Condividi tramite


Definizione ed esportazione di nuovi GUID

Si definisce un nuovo GUID per un elemento che il driver esporta in altri componenti di sistema, driver o applicazioni. Ad esempio, si definisce un nuovo GUID per un evento PnP personalizzato in uno dei dispositivi. Per definire ed esportare un nuovo GUID, è necessario eseguire le operazioni seguenti:

  1. Scegliere un nome simbolico per il GUID.

    Scegliere un nome che rappresenta lo scopo del GUID. Ad esempio, il sistema operativo usa nomi come GUID_BUS_TYPE_PCI e PARPORT_WMI_ALLOCATE_FREE_COUNTS_GUID.

  2. Generare un valore per il GUID usando Uuidgen.exe o Guidgen.exe. Quando si installa il Microsoft Windows SDK, Uuidgen.exe viene installato automaticamente.

    Queste utilità generano una stringa univoca formattata che rappresenta un valore a 128 bit. L'opzione "-s" su Uuidgen.exe restituisce il GUID formattato come struttura C.

  3. Definire il GUID in un file di intestazione appropriato.

    Usare la macro DEFINE_GUID (definita in Guiddef.h) per associare il nome simbolico GUID al relativo valore (vedere l'esempio 1).

    Esempio 1: Definizione di GUID in un file di intestazione 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 );
    
    :
    

    Se il GUID è definito in un file di intestazione che contiene istruzioni diverse dalle definizioni GUID, è necessario eseguire un passaggio aggiuntivo per assicurarsi che il GUID venga creato un'istanza nei driver che includono il file di intestazione. L'istruzione DEFINE_GUID deve essere eseguita all'esterno di qualsiasi istruzione #ifdef che impedisca l'inclusione multipla. In caso contrario, se il file di intestazione è incluso in un'intestazione precompilata, il GUID non verrà creata un'istanza nei driver che usano il file di intestazione. Vedere l'esempio 2 per una definizione GUID di esempio in un file di intestazione mista.

    Esempio 2: Definizione di GUID in un file di intestazione mista

    #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
    

    L'inserimento di una definizione GUID all'esterno di istruzioni che impediscono l'inclusione multipla non causa più istanze del GUID in un driver perché DEFINE_GUID definisce il GUID come variabile EXTERN_C. Sono consentite più dichiarazioni di una variabile EXTERN purché i tipi corrispondano.

  4. Quando si crea un GUID per una nuova classe di configurazione del dispositivo o una classe dell'interfaccia del dispositivo, si applicano le regole seguenti:

    • Non usare un singolo GUID per identificare sia una classe di installazione del dispositivo che una classe di interfaccia del dispositivo.

    • Quando si crea un nome simbolico da associare al GUID, usare la convenzione seguente:

      Per le classi di installazione del dispositivo, usare il formato GUID_DEVCLASS_XXX.

      Per le classi dell'interfaccia del dispositivo, usare il formato GUID_DEVINTERFACE_XXX.