新しい GUID の定義とエクスポート
ドライバーから他のシステム コンポーネント、ドライバー、またはアプリケーションにエクスポートされる項目に対しては、新しい GUID を定義します。 たとえば、デバイスの 1 つにあるカスタム PnP イベントに対して新しい GUID を定義します。 新しい GUID を定義してエクスポートするには、次の操作を行う必要があります。
GUID のシンボル名を選択します。
GUID の目的を表す名前を選択します。 たとえば、オペレーティング システムでは、GUID_BUS_TYPE_PCI や PARPORT_WMI_ALLOCATE_FREE_COUNTS_GUID. などの名前が使用されます。
Uuidgen.exe または Guidgen.exe を使用して GUID の値を生成します。 Microsoft Windows SDK をインストールすると、Uuidgen.exe が自動的にインストールされます。
これらのユーティリティは、128 ビット値を表す一意の書式設定された文字列を生成します。 Uuidgen.exe の "-s" スイッチは、C 構造体の形式で GUID を出力します。
適切なヘッダー ファイルで GUID を定義します。
DEFINE_GUID マクロ (Guiddef.h で定義) を使用して、GUID シンボリック名をその値に関連付けます (例 1 を参照)。
例 1: GUID のみのヘッダー ファイルでの 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
DEFINE_GUID は GUID を EXTERN_C 変数として定義するため、多重インクルードを防止するステートメントの外側に GUID 定義を置いても、ドライバー内で GUID のインスタンスが複数発生することはありません。 型が一致する限り、EXTERN 変数の多重宣言が許可されます。
新しいデバイス セットアップ クラスまたはデバイス インターフェイス クラスの GUID を作成する場合は、次の規則が適用されます。
1 つの GUID を、デバイス セットアップ クラスとデバイス インターフェイス クラスの両方の識別子として使用しないでください。
GUID に関連付けるシンボリック名を作成する場合は、次の規則を使用します。
デバイス セットアップ クラスには、GUID_DEVCLASS_XXX の形式を使用します。
デバイス インターフェイス クラスには、GUID_DEVINTERFACE_XXX の形式を使用します。