Definición y exportación de nuevos GUID
Se define un nuevo GUID para un elemento que el controlador exporta a otros componentes, controladores o aplicaciones del sistema. Por ejemplo, se define un nuevo GUID para un evento PnP personalizado en uno de sus dispositivos. Para definir y exportar un nuevo GUID, debe hacer lo siguiente:
Elija un nombre simbólico para el GUID.
Elija un nombre que represente el propósito del GUID. Por ejemplo, el sistema operativo usa nombres como GUID_BUS_TYPE_PCI y PARPORT_WMI_ALLOCATE_FREE_COUNTS_GUID.
Genere un valor para el GUID mediante Uuidgen.exe o Guidgen.exe. Al instalar el Microsoft Windows SDK, Uuidgen.exe se instala automáticamente.
Estas utilidades generan una cadena con formato único que representa un valor de 128 bits. El modificador "-s" en Uuidgen.exe genera el GUID con formato de estructura C.
Defina el GUID en un archivo de encabezado adecuado.
Use la macro DEFINE_GUID (definida en Guiddef.h) para asociar el nombre simbólico guid con su valor (vea el ejemplo 1).
Ejemplo 1: Definir GUID en un archivo de encabezado de 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 el GUID se define en un archivo de encabezado que contiene instrucciones distintas de las definiciones de GUID, debe realizar un paso adicional para asegurarse de que se crea una instancia del GUID en los controladores que incluyen el archivo de encabezado. La instrucción DEFINE_GUID debe producirse fuera de las instrucciones #ifdef que impidan la inclusión múltiple. De lo contrario, si el archivo de encabezado se incluye en un encabezado precompilado, no se creará una instancia del GUID en los controladores que usan el archivo de encabezado. Consulte el ejemplo 2 para obtener una definición de GUID de ejemplo en un archivo de encabezado mixto.
Ejemplo 2: Definir GUID en un archivo de encabezado mixto
#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
Colocar una definición de GUID fuera de las instrucciones que impiden la inclusión múltiple no provoca varias instancias del GUID en un controlador porque DEFINE_GUID define el GUID como una variable EXTERN_C. Se permiten varias declaraciones de una variable EXTERN siempre que los tipos coincidan.
Al crear un GUID para una nueva clase de configuración de dispositivo o clase de interfaz de dispositivo, se aplican las reglas siguientes:
No use un único GUID para identificar una clase de configuración de dispositivo y una clase de interfaz de dispositivo.
Al crear un nombre simbólico para asociarlo con el GUID, use la siguiente convención:
Para las clases de configuración de dispositivos, use el formato GUID_DEVCLASS_XXX.
Para las clases de interfaz de dispositivo, use el formato GUID_DEVINTERFACE_XXX.