定義和匯出新的 GUID
您可以為驅動程式匯出至其他系統元件、驅動程式或應用程式的專案定義新的 GUID。 例如,您可以在其中一個裝置上定義自訂 PnP 事件的新 GUID。 若要定義和匯出新的 GUID,您必須執行下列動作:
選擇 GUID 的符號名稱。
選擇代表 GUID 用途的名稱。 例如,作業系統會使用GUID_BUS_TYPE_PCI和PARPORT_WMI_ALLOCATE_FREE_COUNTS_GUID等名稱。
使用 Uuidgen.exe 或 Guidgen.exe 產生 GUID 的值。 當您安裝Microsoft Windows SDK時,會自動安裝 Uuidgen.exe。
這些公用程式會產生代表 128 位值的唯一格式字串。 Uuidgen.exe 上的 「-s」 參數會輸出格式化為 C 結構的 GUID。
在適當的標頭檔中定義 GUID。
使用 Guiddef.h) 中定義的 DEFINE_GUID (宏,將 GUID 符號名稱與其值產生關聯 (請參閱範例 1) 。
範例 1:在 GUID-Only 標頭檔中定義 GUID
: DEFINE_GUID( GUID_BUS_TYPE_PCMCIA, 0x09343630L, 0xaf9f, 0x11d0, 0x92,0x9f, 0x00, 0xc0, 0x4f, 0xc3, 0x40, 0xb1 ); DEFINE_GUID( GUID_BUS_TYPE_PCI, 0xc8ebdfb0L, 0xb510, 0x11d0, 0x80,0xE9, 0x00, 0x00, 0xf8, 0x1e, 0x1b, 0x30 ); :
如果在包含 GUID 定義以外的語句的標頭檔中定義 GUID,您必須採取額外的步驟,以確保 GUID 會在包含標頭檔的驅動程式中具現化。 DEFINE_GUID語句必須發生在任何 #ifdef語句之外,以避免包含多個語句。 否則,如果標頭檔包含在先行編譯標頭檔中,則 GUID 將不會在使用標頭檔的驅動程式中具現化。 如需混合標頭檔中的範例 GUID 定義,請參閱範例 2。
範例 2:在混合標頭檔中定義 GUID
#ifndef _NTDDSER_ // this ex. is from a serial driver .h file #define _NTDDSER_ : // Put other header file definitions here. : #endif // _NTDDSER_ #ifdef DEFINE_GUID // Do not break compiles of drivers that // include this header but that do not // want the GUIDs. // // Put GUID definitions outside of the multiple inclusion // protection. DEFINE_GUID(GUID_CLASS_COMPORT, 0x86e0d1e0L, 0x8089, 0x11d0, 0x9c, 0xe4, 0x08, 0x00, 0x3e, 0x30, 0x1f, 0x73); DEFINE_GUID (GUID_SERENUM_BUS_ENUMERATOR, 0x4D36E978, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18); : #endif // DEFINE_GUID
將 GUID 定義放在防止多個包含的語句外,並不會在驅動程式中造成多個 GUID 實例,因為 DEFINE_GUID 將 GUID 定義為EXTERN_C變數。 只要類型相符,就允許 EXTERN 變數的多個宣告。
為新的 裝置安裝類別 或 裝置介面類別別建立 GUID 時,適用下列規則:
請勿使用單一 GUID 來識別裝置安裝類別和裝置介面類別別。
建立要與 GUID 產生關聯的符號名稱時,請使用下列慣例:
針對裝置安裝類別,請使用格式 GUID_DEVCLASS_XXX。
針對裝置介面類別別,請使用格式 GUID_DEVINTERFACE_XXX。