在驱动中增加系统版本号判断,增加如下方法获取版本号。
#pragma comment(lib, "Version.lib")
BOOL GetNtVersionNumbers(DWORD& dwMajorVer, DWORD& dwMinorVer, DWORD& dwBuildNumber, DWORD& dwBuildSubNumber)
{
BOOL bRet = FALSE;
DWORD size, len, dwHandle;
unsigned int puLen;
void* version;
char Filename[MAX_PATH];
LPVOID lpBuffer;
VS_FIXEDFILEINFO file_info;
memset(&file_info, 0, sizeof(file_info));
size = GetFileVersionInfoSize(TEXT("C:\\WINDOWS\\SYSTEM32\\NTDLL.DLL"), &dwHandle);
if (size) {
version = VirtualAlloc(0, size, MEM_COMMIT, PAGE_READWRITE);
if (version == NULL)
{
DBG_LOGE("VirtualAlloc fail");
return FALSE;
}
if (GetFileVersionInfo(TEXT("C:\\WINDOWS\\SYSTEM32\\NTDLL.DLL"), 0, size, version) && VerQueryValue(version, TEXT("\\"), &lpBuffer, &puLen)) {
len = puLen;
if (puLen >= 52)
len = 52;
memcpy(&file_info, lpBuffer, len);
}
VirtualFree(version, 0, MEM_RELEASE);
bRet = TRUE;
}
dwMajorVer = (file_info.dwProductVersionMS >> 16) & 0xffff;
dwMinorVer = file_info.dwProductVersionMS & 0xffff;
dwBuildNumber = (file_info.dwProductVersionLS >> 16) & 0xffff;
dwBuildSubNumber = file_info.dwProductVersionLS & 0xffff;
return bRet;
}
调用:
DWORD dwMajorVer, dwMinorVer, dwBuildNumber, dwBuildSubNumber;
if (pDevContext->GetNtVersionNumbers(dwMajorVer, dwMinorVer, dwBuildNumber, dwBuildSubNumber))
{
DBG_LOGI("Windows Version = %d.\%d.%d.%d\n", dwMajorVer, dwMinorVer, dwBuildNumber, dwBuildSubNumber);
}