在驅動中獲得Windows的版本號

2021-06-21 15:01:26 字數 1417 閱讀 5307

在寫驅動程式時,我們發現對於windows的不同版本,其對應的核心資料結構是不同的,所以在具體操作時同樣要根據windows的不同版本進行不同的操作,那麼怎樣獲取windows的版本,並且windows的不同版本的結構模式應如何區別,這是下面要解決的問題。msdn上提到psgetversion是已經過時的函式版本,如果要在xp或以後的版本上獲取windows的版本號,就用rtlgetversion。所以這兩個函式對應的版本還是有所不同的,那麼怎樣區別性的對待這兩種不同的函式呢?下面是乙個部落格上提供的一種方法,就是用試探式區分:用rtlgetversion獲取版本號,如果成功,則認為當前版本是xp及以後版本,否則認為是xp以下的版本。

下面是函式的實現:

typedef enum win_ver_detail win_ver_detail;

typedef ntstatus (ntapi * pfn_rtlgetversion)(out prtl_osversioninfow lpversioninformation);

extern_c win_ver_detail getwindowsversion()

; rtl_osversioninfoexw osverinfo = ; 

pfn_rtlgetversion pfnrtlgetversion = null; 

rtlinitunicodestring(&ustrfuncname, l"rtlgetversion"); 

pfnrtlgetversion = mmgetsystemroutineaddress(&ustrfuncname); 

//判斷xp前後版本,呼叫不同的函式獲得版本號

if (pfnrtlgetversion)

else 

kdprintf("[******xx] osversion nt %d.%d:%d sp%d.%d\n", 

osverinfo.dwmajorversion, osverinfo.dwminorversion, osverinfo.dwbuildnumber, 

osverinfo.wservicepackmajor, osverinfo.wservicepackminor);

//根據獲得的版本號情況,返回結果

if (osverinfo.dwmajorversion == 5 && osverinfo.dwminorversion == 0) else if (osverinfo.dwmajorversion == 5 && osverinfo.dwminorversion == 1) else if (osverinfo.dwmajorversion == 5 && osverinfo.dwminorversion == 2) else

} else if (6 == osversioninfoex.dwmajorversion)

}return windows_version_none;

}

在windows中安裝映象版的redis

最近公司的專案中使用docker,於是我在我的win10上部署一套環境來進行開發測試,其中包含redis,mysql,mongodb,kong,還有許多自己的微服務.遇到很多坑,在這一點上,windows沒有mac好用.1.先安裝windows版的docker,dockertoolbox或者dock...

在WDM驅動中如何獲得PCI卡的物理Slot號

在wdm驅動中如何獲得pci卡的物理slot號?系統提供了乙個函式 iogetdeviceproperty 來實現這個功能。該函式的宣告如下 ntstatus iogetdeviceproperty in pdevice objectdeviceobject in device registry p...

mysql綠色版在windows系統中的啟動

2 修改配置檔案,my default.ini名稱改為 my.ini,檔案裡面的引數配置 mysqld skip grant tables these are commonly set,remove the and set as required.basedir d mysql datadir d ...