Définition et exportation de nouveaux GUID
Vous définissez un nouveau GUID pour un élément que le pilote exporte vers d’autres composants système, pilotes ou applications. Par exemple, vous définissez un nouveau GUID pour un événement PnP personnalisé sur l’un de ses appareils. Pour définir et exporter un nouveau GUID, vous devez effectuer les opérations suivantes :
Choisissez un nom symbolique pour le GUID.
Choisissez un nom qui représente l’objectif du GUID. Par exemple, le système d’exploitation utilise des noms tels que GUID_BUS_TYPE_PCI et PARPORT_WMI_ALLOCATE_FREE_COUNTS_GUID.
Générez une valeur pour le GUID à l’aide de Uuidgen.exe ou Guidgen.exe. Lorsque vous installez le Microsoft Windows SDK, Uuidgen.exe est automatiquement installé.
Ces utilitaires génèrent une chaîne mise en forme unique qui représente une valeur de 128 bits. Le commutateur « -s » sur Uuidgen.exe génère le GUID au format C.
Définissez le GUID dans un fichier d’en-tête approprié.
Utilisez la macro DEFINE_GUID (définie dans Guiddef.h) pour associer le nom symbolique guid à sa valeur (voir l’exemple 1).
Exemple 1 : définition de GUID dans un fichier d’en-tête 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 ); :
Si le GUID est défini dans un fichier d’en-tête qui contient des instructions autres que des définitions GUID, vous devez effectuer une étape supplémentaire pour vous assurer que le GUID est instancié dans les pilotes qui incluent le fichier d’en-tête. L’instruction DEFINE_GUID doit se produire en dehors des instructions #ifdef qui empêchent l’inclusion multiple. Sinon, si le fichier d’en-tête est inclus dans un en-tête précompilé, le GUID n’est pas instancié dans les pilotes qui utilisent le fichier d’en-tête. Consultez l’exemple 2 pour obtenir un exemple de définition DE GUID dans un fichier d’en-tête mixte.
Exemple 2 : définition de GUID dans un fichier d’en-tête mixte
#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
Le fait de placer une définition de GUID en dehors des instructions qui empêchent plusieurs inclusions n’entraîne pas plusieurs instances du GUID dans un pilote, car DEFINE_GUID définit le GUID en tant que variable EXTERN_C. Plusieurs déclarations d’une variable EXTERN sont autorisées tant que les types correspondent.
Lors de la création d’un GUID pour une classe d’installation d’appareil ou une classe d’interface d’appareil, les règles suivantes s’appliquent :
N’utilisez pas un GUID unique pour identifier à la fois une classe d’installation d’appareil et une classe d’interface d’appareil.
Lors de la création d’un nom symbolique à associer au GUID, utilisez la convention suivante :
Pour les classes de configuration d’appareil, utilisez le format GUID_DEVCLASS_XXX.
Pour les classes d’interface d’appareil, utilisez le format GUID_DEVINTERFACE_XXX.