📄 raswap.cpp
字号:
&hkOpenedKey) == ERROR_SUCCESS)
{
DWORD dwType, dwSize, nResult;
BYTE szTmp[128];
CHAR szCPUType[128];
dwSize = sizeof(szTmp);
nResult = RegQueryValueEx(hkOpenedKey,
"PROCESSOR_ARCHITECTURE", //"PROCESSOR_IDENTIFIER",
NULL,
&dwType,
szTmp,
&dwSize);
if(nResult == ERROR_SUCCESS)
{
lstrcpy(szCPUType, (CHAR *)szTmp);
szCPUType[dwSize] = '\0';
if(strcmp(szCPUType, "AMD64") == 0)
bIsX64 = true;
}
RegCloseKey(hkOpenedKey);
}
return bIsX64;
}
void GetOSVersion()
{
OSVERSIONINFOEX osvi;
BOOLEAN bOsVersionInfoEx;
// Try calling GetVersionEx using the OSVERSIONINFOEX structure.
//
// If that fails, try using the OSVERSIONINFO structure.
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if(!(bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO *)&osvi)))
{
// If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO.
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
if (!GetVersionEx((OSVERSIONINFO *)&osvi))
return;
}
switch(osvi.dwPlatformId)
{
case VER_PLATFORM_WIN32_NT:
// Test for the product.
if(osvi.dwMajorVersion <= 4)
G_osVersion = WinNT;
else if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0)
G_osVersion = Win2000;
else if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1)
G_osVersion = WinXP;
else if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2)
G_osVersion = Win2003Server;
else if (osvi.dwMajorVersion == 6)
{
if(IsX64Platform())
G_osVersion = WinVistaX64;
else
G_osVersion = WinVistaX86;
}
else
G_osVersion = LaterOS;
break;
case VER_PLATFORM_WIN32_WINDOWS:
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
G_osVersion = Win95;
else if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
{
osvi.dwBuildNumber &=0x0000ffff;
if (osvi.dwBuildNumber == 2222)
G_osVersion = Win98SE;
else
G_osVersion = Win98;
}
else if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
G_osVersion = WinME;
break;
}
return;
}
TCHAR* GetCardRegistryPath()
{
return(WIN32_PATH_CLASS_PATH_NETCARDS);
}
BOOL OpenAllAccess(HKEY hKey, const char *lpszSubKey, PHKEY phkResult, BOOL bCreate)
{
PHKEY m_phkResult;
m_phkResult = phkResult;
if(RegOpenKeyEx(hKey, lpszSubKey, 0, KEY_ALL_ACCESS, m_phkResult) != ERROR_SUCCESS)
{
if(bCreate)
{
DWORD dwDisposition;
if(RegCreateKeyEx(hKey, lpszSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, m_phkResult, &dwDisposition) != ERROR_SUCCESS)
return(FALSE);
}
else
return(FALSE);
}
return TRUE;
}
BOOL CopyValues(HKEY hkFrom, HKEY hkTo)
{
TCHAR lpstrName[MAX_PATH];
BYTE pValue[BUFSIZ];
for (int i = 0; ; i++)
{
DWORD nType;
DWORD nNameSize(MAX_PATH);
DWORD nValueSize(MAX_PATH);
LONG res = RegEnumValue(hkFrom, i, lpstrName, &nNameSize, 0, &nType, pValue, &nValueSize);
if (ERROR_NO_MORE_ITEMS == res)
break;
res = RegSetValueEx(hkTo, lpstrName, 0, nType, pValue, nValueSize);
if (ERROR_SUCCESS != res)
return FALSE;
}
return TRUE;
}
BOOL ResetDefaultSetup()
{
HKEY hKeyRoot;
HKEY hDefault;
HKEY hBackup;
DWORD dwStatus;
GUID cls[3];
DWORD numClass = 0;
HDEVINFO devs = INVALID_HANDLE_VALUE;
SP_DEVINFO_DATA devInfo;
HANDLE hMac = NULL;
TCHAR buf[256];
DWORD size = 256;
DWORD reqSize;
DWORD dataType;
BOOLEAN bDeviceExist = FALSE;
CString strRoot;
CString strBackup;
CString strDefault;
// Get Net CLASSGUID use 3 because Win98 have more than one classguid about"NET"
if(!SetupDiClassGuidsFromName(REGSTR_DEVICE_CLASS_NET, cls, 3, &numClass))
{
ASSERT(FALSE);
return FALSE;
}
devs = SetupDiGetClassDevs(cls, NULL, NULL, DIGCF_PRESENT);
if(devs == INVALID_HANDLE_VALUE)
{
ASSERT(FALSE);
return FALSE;
}
devInfo.cbSize = sizeof(devInfo);
int nArraySize = G_arrayDeviceEnum.GetSize();
for(int i = 0; i < nArraySize; i++)
{
UINT nEnum = G_arrayDeviceEnum.GetAt(i);
SetupDiEnumDeviceInfo(devs, nEnum, &devInfo);
SetupDiGetDeviceRegistryProperty(devs, &devInfo, SPDRP_DRIVER ,&dataType, (LPBYTE)buf, size, &reqSize);
if(G_osVersion >= Win2000)
strRoot.Format(_T("%s\\%s"), REGSTR_PATH_CLASS_2K, buf);
else
strRoot.Format(_T("%s\\%s"), REGSTR_PATH_CLASS_9X, buf);
dwStatus = OpenAllAccess(HKEY_LOCAL_MACHINE, strRoot.GetBuffer(200), &hKeyRoot);
if(dwStatus == FALSE)
{
sprintf(buf, _T("OpenAllAccess '%hs' failed\n"), strRoot);
TRACE(buf);
continue;
}
if(G_bAp)
{
strBackup = strRoot + _T("\\") + REGSTR_KEY_STA_BACKUP;
strDefault = strRoot + _T("\\") + REGSTR_KEY_AP_BACKUP;
}
else
{
strBackup = strRoot + _T("\\") + REGSTR_KEY_AP_BACKUP;
strDefault = strRoot + _T("\\") + REGSTR_KEY_STA_BACKUP;
}
dwStatus = OpenAllAccess(HKEY_LOCAL_MACHINE, strDefault.GetBuffer(200), &hDefault);
if(dwStatus == FALSE)
{
strDefault.Empty();
if(G_bAp)
strDefault = strRoot + _T("\\") + REGSTR_KEY_AP_DEFAULT;
else
strDefault = strRoot + _T("\\") + REGSTR_KEY_DEFAULT;
dwStatus = OpenAllAccess(HKEY_LOCAL_MACHINE, strDefault.GetBuffer(200), &hDefault);
if(dwStatus == FALSE)
{
RegCloseKey(hKeyRoot);
sprintf(buf, _T("OpenAllAccess '%hs' failed\n"), strDefault);
TRACE(buf);
continue;
}
}
dwStatus = OpenAllAccess(HKEY_LOCAL_MACHINE, strBackup.GetBuffer(200), &hBackup, TRUE);
if(dwStatus == FALSE)
{
RegCloseKey(hKeyRoot);
RegCloseKey(hDefault);
sprintf(buf, _T("OpenAllAccess '%hs' failed\n"), strBackup);
TRACE(buf);
continue;
}
CopyValues(hKeyRoot, hBackup);
CopyValues(hDefault, hKeyRoot);
RegCloseKey(hDefault);
RegCloseKey(hKeyRoot);
}
if(devs != INVALID_HANDLE_VALUE)
SetupDiDestroyDeviceInfoList(devs);
return TRUE;
}
void SetOPMode(bool G_bAp)
{
HKEY hOpenedKey;
if(RegCreateKeyEx( HKEY_LOCAL_MACHINE,
"SOFTWARE\\RaLink",
0, "",
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&hOpenedKey,
NULL) == ERROR_SUCCESS)
{
char szOpMode[4];
if(G_bAp)
lstrcpy(szOpMode, "1");
else
lstrcpy(szOpMode, "0");
//Trace("[FlashInstall] Let RaLaunch run as admin on Vista");
RegSetValueEx( hOpenedKey, // subkey handle
"OpMode", // value name
0, // must be zero
REG_SZ, // value type
(LPBYTE)szOpMode, // pointer to value data
lstrlen(szOpMode)); // length of value data
RegCloseKey(hOpenedKey);
//Trace("[FlashInstall] Write AppCompatFlags registry %s: %s", szLaunchFile, szRunAsAdmin);
}
}
void CloseUtility()
{
int PID ;
PID = GetProcessID("RaUI.exe");
if(PID != FALSE)
KillProcess(PID);
PID = GetProcessID("ApUI.exe");
if(PID != FALSE)
KillProcess(PID);
}
void RunUtility()
{
char szCurDir[256], szUtiltiy[256], szSelectCard[256], szCmdLine[128];
UINT nRet;
GetModuleFileName(NULL, szCurDir, sizeof(szCurDir));
CHAR * c=szCurDir + strlen(szCurDir) -1;
while(*c!='\\') c--; *(c+1)=0;
//strcpy(szSelectCard, szCurDir);
if(G_osVersion > Win2000)
{
if(G_bAp == FALSE)
{
sprintf(szSelectCard, "\"%s\\SelectCard.exe\" ICS_DOWN", szCurDir);
//WinExec("\"SelectCard.exe\" ICS_DOWN", SW_HIDE);
}
else
{
sprintf(szSelectCard, "\"%s\\SelectCard.exe\" %s", szCurDir, gVarDevID);
//WinExec("SelectCard.exe", SW_SHOW);
}
//Trace("[RC][RaSwap] Launch %s", szSelectCard);
//WinExec(szSelectCard, SW_SHOW);
PROCESS_INFORMATION proc;
STARTUPINFO start;
ZeroMemory(&start, sizeof(start));
start.cb = sizeof(start);
ZeroMemory(&proc, sizeof(proc));
if(CreateProcess(NULL, szSelectCard, NULL, NULL, false, 0, NULL, NULL, &start, &proc))
{
// Wait for the shelled application to finish:
int ret = WaitForSingleObject(proc.hProcess, INFINITE);
DWORD dwExit;
GetExitCodeProcess(proc.hProcess, &dwExit);
CloseHandle(proc.hThread);
CloseHandle(proc.hProcess);
}
}
if(G_bAp == FALSE)
{
sprintf(szUtiltiy, "\"%s\\RaUI.exe\"", szCurDir);
//strcat(szUtiltiy, "RaUI.exe");
}
else
{
sprintf(szUtiltiy, "\"%s\\APUI.exe\"", szCurDir);
//strcat(szUtiltiy, "APUI.exe");
}
//Trace("[RC][RaSwap] Launch %s", szUtiltiy);
nRet = WinExec(szUtiltiy, SW_SHOW);
SetOPMode(G_bAp);
if(nRet <= 31)
AfxMessageBox("Config Utility cannot be found");
}
//CSIDL_COMMON_STARTUP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -