Bagikan melalui


Menentukan dan Mengekspor GUID Baru

Anda menentukan GUID baru untuk item yang diekspor driver ke komponen sistem, driver, atau aplikasi lain. Misalnya, Anda menentukan GUID baru untuk peristiwa PnP kustom di salah satu perangkatnya. Untuk menentukan dan mengekspor GUID baru, Anda harus melakukan hal berikut:

  1. Pilih nama simbolis untuk GUID.

    Pilih nama yang mewakili tujuan GUID. Misalnya, sistem operasi menggunakan nama seperti GUID_BUS_TYPE_PCI dan PARPORT_WMI_ALLOCATE_FREE_COUNTS_GUID.

  2. Buat nilai untuk GUID menggunakan Uuidgen.exe atau Guidgen.exe. Saat Anda menginstal Microsoft Windows SDK, Uuidgen.exe diinstal secara otomatis.

    Utilitas ini menghasilkan string unik dan diformat yang mewakili nilai 128-bit. Sakelar "-s" pada Uuidgen.exe menghasilkan GUID yang diformat sebagai struktur C.

  3. Tentukan GUID dalam file header yang sesuai.

    Gunakan makro DEFINE_GUID (didefinisikan dalam Guiddef.h) untuk mengaitkan nama simbolis GUID dengan nilainya (lihat Contoh 1).

    Contoh 1: Menentukan GUID dalam File Header GUID-Only

    :
    
    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 );
    
    :
    

    Jika GUID didefinisikan dalam file header yang berisi pernyataan selain definisi GUID, Anda harus mengambil langkah tambahan untuk memastikan bahwa GUID dibuat dalam driver yang menyertakan file header. Pernyataan DEFINE_GUID harus terjadi di luar pernyataan #ifdef apa pun yang mencegah beberapa penyertaan. Jika tidak, jika file header disertakan dalam header yang telah dikommpilasikan sebelumnya, GUID tidak akan dibuat dalam driver yang menggunakan file header. Lihat Contoh 2 untuk contoh definisi GUID dalam file header campuran.

    Contoh 2: Menentukan GUID dalam File Header Campuran

    #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
    

    Menempatkan definisi GUID di luar pernyataan yang mencegah beberapa penyertaan tidak menyebabkan beberapa instans GUID dalam driver karena DEFINE_GUID mendefinisikan GUID sebagai variabel EXTERN_C. Beberapa deklarasi variabel EXTERN diizinkan selama jenisnya cocok.

  4. Saat membuat GUID untuk kelas penyiapan perangkat atau kelas antarmuka perangkat baru, aturan berikut berlaku:

    • Jangan gunakan guid tunggal untuk mengidentifikasi kelas penyiapan perangkat dan kelas antarmuka perangkat.

    • Saat membuat nama simbolis untuk dikaitkan dengan GUID, gunakan konvensi berikut:

      Untuk kelas penyiapan perangkat, gunakan format GUID_DEVCLASS_XXX.

      Untuk kelas antarmuka perangkat, gunakan format GUID_DEVINTERFACE_XXX.