WdfFdoInitQueryProperty 関数 (wdffdo.h)
[KMDF と UMDF に適用]
WdfFdoInitQueryProperty メソッドは、指定されたデバイス プロパティを取得します。
NTSTATUS WdfFdoInitQueryProperty(
[in] PWDFDEVICE_INIT DeviceInit,
[in] DEVICE_REGISTRY_PROPERTY DeviceProperty,
[in] ULONG BufferLength,
[out] PVOID PropertyBuffer,
[out] PULONG ResultLength
);
[in] DeviceInit
ドライバーが EvtDriverDeviceAdd コールバック関数から取得したWDFDEVICE_INIT構造体へのポインター。
[in] DeviceProperty
取得 するデバイス プロパティを識別するDEVICE_REGISTRY_PROPERTY型指定の列挙子値。
[in] BufferLength
PropertyBuffer が指すバッファーのサイズ (バイト単位)。
[out] PropertyBuffer
要求されたデバイス プロパティを受け取る呼び出し元によって割り当てられたバッファーへの呼び出し元が指定したポインター。 BufferLength パラメーターが 0 の場合、このポインターは NULL にすることができます。
[out] ResultLength
呼び出し元が指定した場所。返された場合、 WdfFdoInitQueryProperty が PropertyBuffer に格納されている情報のサイズをバイト単位で格納します。 このメソッドの戻り値がSTATUS_BUFFER_TOO_SMALL場合、 ResultLength は必要なバッファー サイズを受け取ります。
操作が成功した場合、メソッドは STATUS_SUCCESSを返します。 その他の戻り値は次のとおりです。
リターン コード | 説明 |
---|---|
|
指定されたバッファーが小さすぎて情報を受信できません。 |
|
指定された DeviceProperty 値が無効です。 |
|
WDFDEVICE_INIT構造体は、ドライバーの EvtDriverDeviceAdd コールバック関数から取得されませんでした。 |
メソッドは、他の NTSTATUS 値を返す場合もあります。
デバイス プロパティ データを受信する前に、ドライバーは通常、必要なバッファー サイズを取得するために WdfFdoInitQueryProperty を最初に呼び出す必要があります。 一部のプロパティでは、必要なサイズが返される時間とドライバーがこのルーチンを再度呼び出す時間の間に、データ サイズが変更される可能性があります。 したがって、ドライバーは、戻り値の状態がSTATUS_BUFFER_TOO_SMALLされないまで実行されるループ内で WdfFdoInitQueryProperty を呼び出す必要があります。
WdfFdoInitQueryProperty は、必要なバッファー サイズが既知で変更されていない場合にのみ使用することをお勧めします。その場合、ドライバーは WdfFdoInitQueryProperty を 1 回だけ呼び出す必要があるためです。 必要なバッファー サイズが不明な場合、または異なる場合、ドライバーは WdfFdoInitAllocAndQueryProperty を呼び出す必要があります。
ドライバーは、WdfDeviceCreate を呼び出す前にのみ WdfFdoInitQueryProperty を呼び出すことができます。 WdfDeviceCreate の呼び出しの詳細については、「フレームワーク デバイス オブジェクトの作成」を参照してください。
WdfDeviceCreate を呼び出した後、ドライバーは WdfDeviceQueryProperty を呼び出すことによってデバイス プロパティ情報を取得できます。
WdfFdoInitQueryProperty メソッドの詳細については、「関数ドライバーでのデバイス オブジェクトの作成」を参照してください。
または、 WdfFdoInitQueryPropertyEx を使用して、統合プロパティ モデルによって公開されるデバイス プロパティにアクセスすることもできます。
次のコード例では、デバイスの列挙子の名前を表す Unicode 文字列を取得し、文字列が "PCI" の場合は TRUE を 返します。
NTSTATUS status = STATUS_SUCCESS;
WCHAR enumeratorName[64] = {0};
ULONG returnSize;
UNICODE_STRING unicodeEnumName, temp;
status = WdfFdoInitQueryProperty(
DeviceInit,
DevicePropertyEnumeratorName,
sizeof(enumeratorName),
enumeratorName,
&returnSize
);
if(!NT_SUCCESS(status)){
return status;
}
RtlInitUnicodeString(
&unicodeEnumName,
enumeratorName
);
RtlInitUnicodeString(
&temp,
L"PCI"
);
if(RtlCompareUnicodeString(
&unicodeEnumName,
&temp,
TRUE
) == 0) {
//
// This device is a PCI device.
//
return TRUE;
}
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
最小 KMDF バージョン | 1.0 |
最小 UMDF バージョン | 2.0 |
Header | wdffdo.h (Wdf.h を含む) |
Library | Wdf01000.sys (KMDF);WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
DDI コンプライアンス規則 | DeviceInitAPI(kmdf)、 DriverCreate(kmdf)、 KmdfIrql(kmdf)、 KmdfIrql2(kmdf)、KmdfIrqlExplicit(kmdf) |