Compartilhar via


Método IWDFUnifiedPropertyStore::GetPropertyData (wudfddi.h)

[Aviso: UMDF 2 é a versão mais recente do UMDF e substitui UMDF 1. Todos os novos drivers UMDF devem ser gravados usando UMDF 2. Nenhum novo recurso está sendo adicionado ao UMDF 1 e há suporte limitado para UMDF 1 em versões mais recentes do Windows 10. Drivers universais do Windows devem usar UMDF 2. Para obter mais informações, consulte Introdução com UMDF.]

O método GetPropertyData recupera a configuração atual de uma propriedade de dispositivo.

Sintaxe

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
);

Parâmetros

[in] PropertyKey

Um ponteiro para uma estrutura DEVPROPKEY que especifica a chave de propriedade do dispositivo.

[in] Lcid

Especifica um identificador de localidade. Defina esse parâmetro como um valor LCID específico do idioma ou para LOCALE_NEUTRAL. O LOCALE_NEUTRAL LCID especifica que a propriedade é neutra em idioma (ou seja, não específica a nenhum idioma). Não defina esse parâmetro como LOCALE_SYSTEM_DEFAULT ou LOCALE_USER_DEFAULT. Para obter mais informações sobre valores LCID específicos do idioma, consulte Estrutura LCID.

[in] Flags

Reservado para uso do sistema. Os drivers devem definir esse valor como 0.

[in] PropertyDataSize

O tamanho, em bytes, do buffer para o qual PropertyData aponta.

[out, optional] PropertyData

Um ponteiro para os dados da propriedade do dispositivo.

[out] PropertyDataRequiredSize

Um ponteiro para um ULONG para receber o tamanho das informações de propriedade retornadas em PropertyData.

[out] PropertyType

Um ponteiro para um valor DEVPROPTYPE . Se GetPropertyData for concluído com êxito, o método usará PropertyType para fornecer o tipo de dados retornado no buffer PropertyData .

Retornar valor

GetPropertyData retornará S_OK se a operação for bem-sucedida. Caso contrário, o método poderá retornar os valores a seguir.

Código de retorno Descrição
E_OUTOFMEMORY
Falha na tentativa da estrutura de alocar memória.
HRESULT_FROM_NT(STATUS_BUFFER_TOO_SMALL)
O parâmetro PropertyDataRequiredSize contém o tamanho do buffer necessário.
HRESULT_FROM_WIN32 (ERROR_INVALID_PARAMETER)
Se o driver especificar WdfPropertyStoreRootClassDeviceInterfaceKey, a interface solicitada deverá ser aquela que o driver UMDF registrou anteriormente.
HRESULT_FROM_WIN32 (STATUS_NOT_SUPPORTED)
O driver pode solicitar dados de propriedade da interface do dispositivo apenas começando com Windows 8.
 

Esse método pode retornar um dos outros valores que Winerror.h contém.

Comentários

Os drivers baseados em estrutura usam o método GetPropertyData para recuperar as propriedades do dispositivo definidas como parte do modelo de propriedade do dispositivo unificado.

Em particular, você pode usar esse método para recuperar a chave de hardware de um dispositivo ou uma instância de uma classe de interface de dispositivo. Quando você chamar IWDFUnifiedPropertyStoreFactory::RetrieveUnifiedDevicePropertyStore, defina o membro RootClass do parâmetro RootSpecifier como WdfPropertyStoreRootClassHardwareKey ou WdfPropertyStoreRootClassDeviceInterfaceKey.

Se você especificar WdfPropertyStoreRootClassHardwareKey, ao chamar GetPropertyData, deverá fornecer um valor DEVPROPKEY personalizado no parâmetro PropertyKey e não uma chave definida por PnP. O valor deve ter sido definido anteriormente chamando SetPropertyData, uma função de propriedade de dispositivo SetupDI ou usando a diretiva INF AddProperty.

Para obter mais informações sobre as propriedades do dispositivo, consulte Propriedades do dispositivo.

Para obter mais informações sobre como acessar o registro, consulte Usando o Registro em drivers baseados em UMDF.

Exemplos

Para propriedades de tamanho variável, o driver deve fazer duas passagens para recuperar os dados da propriedade. Primeiro, o driver deve passar um buffer NULL no parâmetro PropertyData e definir PropertyDataSize como 0. Em seguida, o driver deve alocar um buffer com base no PropertyDataRequiredSize retornado e chamar GetPropertyData novamente, passando o buffer alocado.

O exemplo a seguir demonstra esse padrão.

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;
}

Requisitos

Requisito Valor
Fim do suporte Indisponível no UMDF 2.0 e posterior.
Plataforma de Destino Área de Trabalho
Versão mínima do UMDF 1.11
Cabeçalho wudfddi.h
DLL WUDFx.dll

Confira também

IWDFUnifiedPropertyStore

IWDFUnifiedPropertyStoreFactory

RetrieveUnifiedDevicePropertyStore

SetPropertyData

WDF_PROPERTY_STORE_ROOT

WDF_PROPERTY_STORE_ROOT_CLASS