共用方式為


定義和匯出新的 GUID

您可以為驅動程式匯出至其他系統元件、驅動程式或應用程式的專案定義新的 GUID。 例如,您可以在其中一個裝置上定義自訂 PnP 事件的新 GUID。 若要定義和匯出新的 GUID,您必須執行下列動作:

  1. 選擇 GUID 的符號名稱。

    選擇代表 GUID 用途的名稱。 例如,作業系統會使用GUID_BUS_TYPE_PCI和PARPORT_WMI_ALLOCATE_FREE_COUNTS_GUID等名稱。

  2. 使用 Uuidgen.exe 或 Guidgen.exe 產生 GUID 的值。 當您安裝Microsoft Windows SDK時,會自動安裝 Uuidgen.exe。

    這些公用程式會產生代表 128 位值的唯一格式字串。 Uuidgen.exe 上的 「-s」 參數會輸出格式化為 C 結構的 GUID。

  3. 在適當的標頭檔中定義 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 變數的多個宣告。

  4. 為新的 裝置安裝類別裝置介面類別別建立 GUID 時,適用下列規則:

    • 請勿使用單一 GUID 來識別裝置安裝類別和裝置介面類別別。

    • 建立要與 GUID 產生關聯的符號名稱時,請使用下列慣例:

      針對裝置安裝類別,請使用格式 GUID_DEVCLASS_XXX

      針對裝置介面類別別,請使用格式 GUID_DEVINTERFACE_XXX