次の方法で共有


IWDFUnifiedPropertyStore::GetPropertyData メソッド (wudfddi.h)

[警告: UMDF 2 は UMDF の最新バージョンであり、UMDF 1 よりも優先されます。 すべての新しい UMDF ドライバーは、UMDF 2 を使用して記述する必要があります。 UMDF 1 には新機能が追加されておらず、新しいバージョンのWindows 10では UMDF 1 のサポートが制限されています。 ユニバーサル Windows ドライバーでは UMDF 2 を使用する必要があります。 詳細については、「UMDF を使用したはじめに」を参照してください。

GetPropertyData メソッドは、デバイス プロパティの現在の設定を取得します。

構文

HRESULT GetPropertyData(
  [in]            const DEVPROPKEY *PropertyKey,
  [in]            LCID             Lcid,
  [in]            ULONG            Flags,
  [in]            ULONG            PropertyDataSize,
  [out, optional] PVOID            PropertyData,
  [out]           ULONG            *PropertyDataRequiredSize,
  [out]           DEVPROPTYPE      *PropertyType
);

パラメーター

[in] PropertyKey

デバイス プロパティ キーを指定する DEVPROPKEY 構造体へのポインター。

[in] Lcid

ロケール識別子を指定します。 このパラメーターは、言語固有の LCID 値または LOCALE_NEUTRALに設定します。 LOCALE_NEUTRAL LCID は、 プロパティが言語に依存しないことを指定します (つまり、どの言語にも固有ではありません)。 このパラメーターは、LOCALE_SYSTEM_DEFAULTまたはLOCALE_USER_DEFAULTに設定しないでください。 言語固有の LCID 値の詳細については、「 LCID 構造体」を参照してください。

[in] Flags

システムで使用するために予約されています。 ドライバーは、この値を 0 に設定する必要があります。

[in] PropertyDataSize

PropertyData が指すバッファーのサイズ (バイト単位)。

[out, optional] PropertyData

デバイス プロパティ データへのポインター。

[out] PropertyDataRequiredSize

PropertyData で返されるプロパティ情報のサイズを受け取る ULONG へのポインター。

[out] PropertyType

DEVPROPTYPE 値へのポインター。 GetPropertyData が正常に完了した場合、メソッドは PropertyType を使用して PropertyData バッファーで返されるデータの型を指定します。

戻り値

GetPropertyData は、操作が成功した場合にS_OKを返します。 それ以外の場合、メソッドは次の値を返す可能性があります。

リターン コード 説明
E_OUTOFMEMORY
フレームワークのメモリの割り当て試行が失敗しました。
HRESULT_FROM_NT(STATUS_BUFFER_TOO_SMALL)
PropertyDataRequiredSize パラメーターには、必要なバッファーのサイズが含まれています。
HRESULT_FROM_WIN32 (ERROR_INVALID_PARAMETER)
ドライバーが WdfPropertyStoreRootClassDeviceInterfaceKey を指定する場合、要求されたインターフェイスは、UMDF ドライバーが以前に登録したインターフェイスである必要があります。
HRESULT_FROM_WIN32 (STATUS_NOT_SUPPORTED)
ドライバーは、Windows 8以降でのみ、デバイス インターフェイスのプロパティ データを要求できます。
 

このメソッドは 、Winerror.h に含まれる他の値のいずれかを返す場合があります。

注釈

フレームワーク ベースのドライバーは 、GetPropertyData メソッドを使用して、統合デバイス プロパティ モデルの一部として定義されているデバイス プロパティを取得します。

特に、このメソッドを使用して、デバイスの ハードウェア キー またはデバイス インターフェイス クラスのインスタンスを取得できます。 IWDFUnifiedPropertyStoreFactory::RetrieveUnifiedDevicePropertyStore を呼び出すときに、RootSpecifier パラメーターの RootClass メンバーを WdfPropertyStoreRootClassHardwareKey または WdfPropertyStoreRootClassDeviceInterfaceKey に設定します。

WdfPropertyStoreRootClassHardwareKey を指定した場合は、GetPropertyData を呼び出すときに、PnP で定義されたキーではなく、PropertyKey パラメーターにカスタム DEVPROPKEY 値を指定する必要があります。 値は、 SetPropertyDataSetupDI デバイス プロパティ関数、または INF AddProperty ディレクティブを使用して、以前に設定されている必要があります。

デバイスのプロパティの詳細については、「 デバイスのプロパティ」を参照してください。

レジストリへのアクセスの詳細については、「 UMDF ベースのドライバーでのレジストリの使用」を参照してください。

可変サイズのプロパティの場合、ドライバーはプロパティ データを取得するために 2 つのパスを作成する必要があります。 最初に、ドライバーは PropertyData パラメーターに NULL バッファーを渡し、 PropertyDataSize を 0 に設定する必要があります。 次に、ドライバーは返された PropertyDataRequiredSize に基づいてバッファーを割り当て、割り当てられたバッファーを渡して GetPropertyData を再度呼び出す必要があります。

次の例でそのパターンを示します。

HRESULT
GetFriendlyName(
    _In_ IWDFUnifiedPropertyStore * pUnifiedPropertyStore
    )
{
    HRESULT hr = S_OK;
    DEVPROPTYPE type;
    ULONG requiredSize;
    BYTE * friendlyNameBuffer = NULL;
    ULONG friendlyNameBufferSize;

    hr = pUnifiedPropertyStore->GetPropertyData(
            &DEVPKEY_Device_FriendlyName,
            0, //Lcid
            0, //Flags
            0, //BufferSize
            NULL, //Buffer
            &requiredSize,
            &type
            );

    if (HRESULT_CODE(hr) != ERROR_INSUFFICIENT_BUFFER)
    {
        TraceEvents(
            TRACE_LEVEL_ERROR, 
            TEST_TRACE_DEVICE, 
            "GetPropertyData failed: hr = %!HRESULT!",
            hr
            );
        goto exit;
    }

    friendlyNameBufferSize = requiredSize;
    friendlyNameBuffer = new BYTE[requiredSize];
    if (NULL == friendlyNameBuffer)
    {
        hr = E_OUTOFMEMORY;
        TraceEvents(
            TRACE_LEVEL_ERROR, 
            TEST_TRACE_DEVICE, 
            "Out of memory while allocating property data buffer returning:”
            “ %!HRESULT!",
            hr
            );
        goto exit;
    }
    
    hr = pUnifiedPropertyStore->GetPropertyData(
            &DEVPKEY_Device_FriendlyName,
            0, //Lcid
            0, //Flags
            friendlyNameBufferSize,
            friendlyNameBuffer,
            &requiredSize,
            &type
            );

    if (FAILED(hr))
    {
        TraceEvents(
            TRACE_LEVEL_ERROR, 
            TEST_TRACE_DEVICE, 
            "GetPropertyData failed: hr = %!HRESULT!",
            hr
            );
        goto exit;
    }
    
    if (type != DEVPROP_TYPE_STRING)
    {
        TraceEvents(
            TRACE_LEVEL_ERROR, 
            TEST_TRACE_DEVICE, 
            "Expected type %d, actual type: %d",
            DEVPROP_TYPE_STRING,
            type
            );
        hr = E_UNEXPECTED;
        goto exit;
    }

exit:
    delete [] friendlyNameBuffer;
    friendlyNameBuffer = NULL;

    return hr;
}

要件

要件
サポート終了 UMDF 2.0 以降では使用できません。
対象プラットフォーム デスクトップ
最小 UMDF バージョン 1.11
Header wudfddi.h
[DLL] WUDFx.dll

こちらもご覧ください

IWDFUnifiedPropertyStore

IWDFUnifiedPropertyStoreFactory

RetrieveUnifiedDevicePropertyStore

SetPropertyData

WDF_PROPERTY_STORE_ROOT

WDF_PROPERTY_STORE_ROOT_CLASS