デバイス インスタンス プロパティへのアクセス
Windows Vista 以降のバージョンの Windows では、アプリケーションとインストーラーは、次の関数を呼び出すことによって、統合プロパティ モデルの一部であるデバイス インスタンスプロパティにアクセスできます。
Note
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 を使用して、デバイス インスタンスに現在設定されているデバイス プロパティを識別するデバイス プロパティ キーの配列を取得できます。 これは、デバイスに設定されたプロパティの完全なセットを決定するために使用できます。 ただし、これらの関数を使用して、特にこれらの関数がデバイス インスタンスに設定されていることを示すすべてのプロパティの値を取得する場合は、すべてのプロパティとその値のリストの取得はコストのかかる操作になる可能性があるため、慎重に使用する必要があります。