다음을 통해 공유


새 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 정의를 여러 개의 포함을 방지하는 문 외부에 배치해도 DEFINE_GUID GUID를 EXTERN_C 변수로 정의하므로 드라이버에서 GUID 인스턴스가 여러 대 발생하지는 않습니다. EXTERN 변수의 여러 선언은 형식이 일치하는 한 허용됩니다.

  4. 디바이스 설정 클래스 또는 디바이스 인터페이스 클래스에 대한 GUID를 만들 때 다음 규칙이 적용됩니다.

    • 단일 GUID를 사용하여 디바이스 설정 클래스와 디바이스 인터페이스 클래스를 모두 식별하지 마세요.

    • GUID와 연결할 기호 이름을 만들 때 다음 규칙을 사용합니다.

      디바이스 설정 클래스의 경우 GUID_DEVCLASS_XXX 형식을 사용합니다.

      디바이스 인터페이스 클래스의 경우 GUID_DEVINTERFACE_XXX 형식을 사용합니다.