[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
呼び出し元が指定した場所。戻り値には、PropertyBufferに格納 WdfFdoInitQueryProperty 情報のサイズ (バイト単位) が格納されます。 このメソッドの戻り値が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 |
| ヘッダー | wdffdo.h (Wdf.h を含む) |
| 図書館 | Wdf01000.sys (KMDF);WUDFx02000.dll (UMDF) |
| IRQL | PASSIVE_LEVEL |
| DDI コンプライアンス規則 を する | DeviceInitAPI(kmdf), DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |
こちらもご覧ください
WdfDeviceQueryProperty の
WdfFdoInitAllocAndQueryProperty の