Windows Vista 以降のバージョンの Windows では、アプリケーションとインストーラーは、次の関数 呼び出すことによって 統合プロパティ モデルの一部である のデバイス インスタンス プロパティにアクセスできます。
注
SetupApi は、Windows のすべてのエディションでサポートされているわけではありません。 可能な場合は、CfgMgr32.dll経由で使用可能な API などの下位レイヤー API を使用する必要があります。 ヒントについては、SetupApi から CfgMgr32 への移植 を参照してください。
Windows Server 2003、Windows XP、および Windows 2000 のデバイス プロパティにアクセスする方法については、「SetupAPI と Configuration Manager を使用してデバイスのプロパティにアクセスするを参照してください。
プロパティの取得
CM_Get_DevNode_Property や SetupDiGetDeviceProperty などのプロパティ API を使用して、デバイス インスタンスに設定されているデバイス プロパティを取得できます。 たとえば、DEVPROP_TYPE_UINT32型であると予想されるプロパティを取得するサンプルを次に示します。
DEVPROPTYPE PropertyType = DEVPROP_TYPE_EMPTY;
ULONG PropertySize = 0;
ULONG SomeValue = 0;
PropertySize = sizeof(SomeValue);
cr = CM_Get_DevNode_Property(DevInst,
&DEVPKEY_CustomProperty,
&PropertyType,
(PBYTE)&SomeValue,
&PropertySize,
0);
if (cr == CR_NO_SUCH_VALUE) {
printf("Property was not found\n");
} else if (cr != CR_SUCCESS) {
printf("Error 0x%08x retrieving property.\n", cr);
} else if ((PropertyType != DEVPROP_TYPE_UINT32) || (PropertySize != sizeof(SomeValue))) {
printf("Property data was not of the expected type or size\n");
} else {
printf("Property value: 0x%08x\n", SomeValue);
}
プロパティの設定
CM_Set_DevNode_Property や SetupDiSetDeviceProperty などのプロパティ API を使用して、デバイス インスタンスのデバイス プロパティを設定できます。 たとえば、DEVPROP_TYPE_UINT32型のプロパティを設定するサンプルを次に示します。
ULONG SomeValue = 5;
cr = CM_Set_DevNode_Property(DevInst,
&DEVPKEY_CustomProperty,
DEVPROP_TYPE_UINT32,
(PBYTE)&SomeValue,
sizeof(SomeValue),
0);
if (cr != CR_SUCCESS) {
printf("Error 0x%08x setting property.\n", cr);
}
使用可能なプロパティの一覧を取得する
CM_Get_DevNode_Property_Keys や SetupDiGetDevicePropertyKeys などのプロパティ API を使用して、デバイス インスタンスに現在設定されているデバイス プロパティを識別するデバイス プロパティ キーの配列を取得できます。 これは、デバイスに設定されたプロパティの完全なセットを決定するために使用できます。 ただし、これらの関数を使用すると、特にこれらの関数がデバイス インスタンスに設定されていることを示すすべてのプロパティの値を取得する場合は、すべてのプロパティとその値のリストの取得がコストのかかる操作になる可能性があるため、慎重に使用する必要があります。