Compartilhar via


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

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

O método GetPropertyData recupera a configuração atual de uma propriedade do 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 de 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 LCID de LOCALE_NEUTRAL especifica que a propriedade é neutra em idioma (ou seja, não é específica para qualquer 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 de DEVPROPTYPE. Se GetPropertyData for concluído com êxito, o método usará PropertyType para fornecer o tipo de dados retornado no buffer PropertyData.

Valor de retorno

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 o Windows 8.
 

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

Observações

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 do dispositivo. Quando você chamar IWDFUnifiedPropertyStoreFactory::RetrieveUnifiedDevicePropertyStore, defina o do parâmetro RootSpecifier RootClass membro para WdfPropertyStoreRootClassHardwareKey ou WdfPropertyStoreRootClassDeviceInterfaceKey.

Se você especificar WdfPropertyStoreRootClassHardwareKey, ao chamar GetPropertyData, você deverá fornecer um valor de 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 SetupDIou 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.
da Plataforma de Destino Área de trabalho
versão mínima do UMDF 1.11
cabeçalho wudfddi.h
de DLL WUDFx.dll

Consulte também

IWDFUnifiedPropertyStore

IWDFUnifiedPropertyStoreFactory

RetrieveUnifiedDevicePropertyStore

SetPropertyData

WDF_PROPERTY_STORE_ROOT

WDF_PROPERTY_STORE_ROOT_CLASS