Windows SDK練習曲--Windows版本相關資訊 [Native Code] (2)
《取得Windows版本相關資訊--Native Code(1)》曾提及取自Windows SDK 7的Getting the System Version主控台程式,這個程式用了許多Windows API取得Windows版本資訊,以下則將簡述這些API。
GetVersionEx
從Windows 2000就存在的GetVersionEx,是取得Windows版本資訊的基本函式。如果呼叫失敗,GetVersionEx會傳回0;呼叫成功則傳回非0。
GetVersionEx必須使用OSVERSIONINFO或OSVERSIONINFOEX結構作為參數,GetVersionEx會將取得的資訊置入作為參數的結構,包括Windows的主序號、次序號等。以下列出幾個Windows的主序號及次序號。
| Windows | 主序號.次序號 |
| Windows 2000 | 5.0(用戶端及伺服端皆然) |
| Windows XP | 5.1 |
| Windows Server 2003 | 5.2 |
| Windows Server 2003 R2 | 5.2 |
| Windows Vista | 6.0 |
| Windows Server 2008 | 6.0 |
| Windows 7 | 6.1 |
| Windows Server 2008 R2 | 6.1 |
這支程式會用到OSVERSIONINFOEX的以下成員:
- dwPlatformId:平台代號,其值若為VER_PLATFORM_WIN32_NT,表示NT平台。
- dwMajorVersion:主版本序號
- dwMinorVersion:次版本序號
- wProductType:Windows作業系統的產品類型,有VER_NT_WORKSTATION、VER_NT_SERVER、VER_NT_DOMAIN_CONTROLLER等3種常數值。用來判斷Windows是用戶端還是伺服器版本。
- wSuiteMask:Windows作業系統的組合方式,可以利用位元運算(遮罩)查得作業系統的詳細資訊。可以用來檢查伺服器版是不是Home Server、Datacenter或Enterprise等版本、用戶端版是不是家用版、或是不是Embedded版本。
關於GetVersionEx及OSVERSIONINFOEX,還可參考舊作《如何檢測各種Windows平台的版本資訊》的《利用GetVersionEx檢查Windows系統版本》、《GetVersionEx使用範例》、《OSVERSIONINFOEX結構剖析》、《GetVersionEx與OSVERSIONINFOEX搭配應用》等節。
GetNativeSystemInfo / GetSystemInfo
這兩個函式在這支程式的目的是偵測Windows版本是不是x86、x64或IA64。32位元程式要呼叫GetNativeSystemInfo,64位元程式要呼叫GetSystemInfo。GetNativeSystemInfo或GetSystemInfo需使用SYSTEM_INFO結構,而這支程式會用到結構中的wProcessorArchitecture成員,這個成員可以是以下常數值:
| 常數值 | 說明 |
| PROCESSOR_ARCHITECTURE_AMD64 | x64 |
| PROCESSOR_ARCHITECTURE_IA64 | IA64(Intel Itanium) |
| PROCESSOR_ARCHITECTURE_INTEL | x86 |
| PROCESSOR_ARCHITECTURE_UNKNOWN | 未知 |
GetSystemMetrics
這個API會根據參數而傳回系統特定的公制單位或系統設定值。這支程式以下列方式檢查是不是Windows Server 2003 R2:
if( GetSystemMetrics(SM_SERVERR2) )
GetProductInfo
這是Vista及Windows Server 2008開始支援的API,可以根據傳入的主、次版本序號及主、次Service Pack版本序號,取得SKU(例如旗艦版還是企業版)。此函式實際上可取得的 SKU 不止這支程式所列,完整資訊可參考SDK文件。
參考資料:MSDN Getting the System Version

0 意見:
張貼意見