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

呼び出し元が指定した場所。返された場合、 WdfFdoInitQueryPropertyPropertyBuffer に格納されている情報のサイズをバイト単位で格納します。 このメソッドの戻り値がSTATUS_BUFFER_TOO_SMALL場合、 ResultLength は必要なバッファー サイズを受け取ります。

戻り値

操作が成功した場合、メソッドは STATUS_SUCCESSを返します。 その他の戻り値は次のとおりです。

リターン コード 説明
STATUS_BUFFER_TOO_SMALL
指定されたバッファーが小さすぎて情報を受信できません。
STATUS_INVALID_PARAMETER_2
指定された DeviceProperty 値が無効です。
STATUS_INVALID_DEVICE_REQUEST
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)

こちらもご覧ください

WdfDeviceQueryProperty

WdfFdoInitAllocAndQueryProperty