Função IoGetDeviceProperty (wdm.h)

A rotina IoGetDeviceProperty recupera informações sobre um dispositivo, como informações de configuração e o nome de seu PDO.

Sintaxe

NTSTATUS IoGetDeviceProperty(
  [in]            PDEVICE_OBJECT           DeviceObject,
  [in]            DEVICE_REGISTRY_PROPERTY DeviceProperty,
  [in]            ULONG                    BufferLength,
  [out, optional] PVOID                    PropertyBuffer,
  [out]           PULONG                   ResultLength
);

Parâmetros

[in] DeviceObject

Ponteiro para o PDO (objeto de dispositivo físico) para o dispositivo que está sendo consultado.

[in] DeviceProperty

Especifica a propriedade do dispositivo que está sendo solicitada. Deve ser um dos seguintes valores de enumeração DEVICE_REGISTRY_PROPERTY :

DevicePropertyAddress

Solicita o endereço do dispositivo no barramento. PropertyBuffer aponta para um ULONG.

A interpretação desse endereço é específica do barramento. O chamador dessa rotina deve chamar a rotina novamente para solicitar o DevicePropertyBusTypeGuid ou, possivelmente, o DevicePropertyLegacyBusType, para que ele possa interpretar o endereço. Um valor de endereço de 0xFFFFFFFF indica que o motorista do ônibus subjacente não forneceu um endereço de ônibus para o dispositivo.

A lista a seguir descreve as informações que determinados motoristas de ônibus armazenam no PropertyBuffer para seus dispositivos filho:

Barramento Descrição
1394 Não fornece um endereço porque os endereços são voláteis. O padrão é 0xFFFFFFFF.
EISA Número do slot (0-F).
IDE Para um dispositivo IDE, o endereço contém a ID de destino e o LUN. Para um canal IDE, o endereço é zero ou um (0 = canal primário e 1 = canal secundário).
ISApnp Não fornece um endereço. O padrão é 0xFFFFFFFF.
Pc Card (PCMCIA) O número do soquete (normalmente 0x00 ou 0x40).
PCI O número do dispositivo na palavra alta e o número da função na palavra baixa.
SCSI A ID de destino.
USB O número da porta.

DevicePropertyBootConfiguration

Solicita os recursos de hardware atribuídos ao dispositivo pelo firmware, em forma bruta. PropertyBuffer aponta para uma estrutura de CM_RESOURCE_LIST .

DevicePropertyBootConfigurationTranslated

Os recursos de hardware atribuídos ao dispositivo pelo firmware, em formato traduzido. PropertyBuffer aponta para uma estrutura de CM_RESOURCE_LIST .

DevicePropertyBusNumber

Solicita o número do barramento herdado ao qual o dispositivo está conectado. PropertyBuffer aponta para um ULONG.

DevicePropertyBusTypeGuid

Solicita o GUID para o barramento ao qual o dispositivo está conectado. Os GUIDs do tipo de barramento definido pelo sistema são listados no arquivo de cabeçalho Wdmguid.h. PropertyBuffer aponta para um GUID, que é uma estrutura de 16 bytes que contém o GUID em formato binário.

DevicePropertyClassGuid

Solicita o GUID para a classe de instalação do dispositivo. PropertyBuffer aponta para uma matriz terminada em NULL do WCHAR. Essa rotina retorna o GUID em um formato de cadeia de caracteres da seguinte maneira, em que cada "c" representa um caractere hexadecimal: {cccccc-cccc-cccc-cccccccccc}

DevicePropertyClassName

Solicita o nome da classe de instalação do dispositivo, em formato de texto. PropertyBuffer aponta para uma cadeia de caracteres WCHAR terminada em NULL.

DevicePropertyCompatibleIDs

Solicita as IDs compatíveis relatadas pelo dispositivo. PropertyBuffer aponta para um valor REG_MULTI_SZ.

DevicePropertyDeviceDescription

Solicita uma cadeia de caracteres que descreve o dispositivo, como "Microsoft PS/2 Port Mouse", normalmente definida pelo fabricante. PropertyBuffer aponta para uma cadeia de caracteres WCHAR terminada em NULL.

DevicePropertyDriverKeyName

Solicita o nome da chave do Registro específica do driver. PropertyBuffer aponta para uma cadeia de caracteres WCHAR terminada em NULL.

DevicePropertyEnumeratorName

Solicita o nome do enumerador para o dispositivo, como "PCI" ou "raiz". PropertyBuffer aponta para uma cadeia de caracteres WCHAR terminada em NULL.

DevicePropertyFriendlyName

Solicita uma cadeia de caracteres que pode ser usada para distinguir entre dois dispositivos semelhantes, normalmente definidos pelo instalador de classe. PropertyBuffer aponta para uma cadeia de caracteres WCHAR terminada em NULL.

DevicePropertyHardwareID

Solicita as IDs de hardware fornecidas pelo dispositivo que identificam o dispositivo. PropertyBuffer aponta para um valor REG_MULTI_SZ.

DevicePropertyInstallState

Solicita o estado de instalação do dispositivo. O estado de instalação é retornado como um valor de enumeração DEVICE_INSTALL_STATE .

DevicePropertyLegacyBusType

Solicita o tipo de barramento, como PCIBus ou PCMCIABus. PropertyBuffer aponta para um valor de enumeração INTERFACE_TYPE.

DevicePropertyLocationInformation

Solicita informações sobre a localização do dispositivo no barramento; a interpretação dessas informações é específica do barramento. PropertyBuffer aponta para uma cadeia de caracteres WCHAR terminada em NULL.

DevicePropertyManufacturer

Solicita uma cadeia de caracteres que identifica o fabricante do dispositivo. PropertyBuffer aponta para uma cadeia de caracteres WCHAR terminada em NULL.

DevicePropertyPhysicalDeviceObjectName

Solicita o nome do PDO para este dispositivo. PropertyBuffer aponta para uma cadeia de caracteres WCHAR terminada em NULL.

DevicePropertyRemovalPolicy

Solicita a política de remoção atual do dispositivo. O sistema operacional usa esse valor como uma dica para determinar como o dispositivo é normalmente removido. O parâmetro PropertyBuffer aponta para um valor de enumeração DEVICE_REMOVAL_POLICY .

DevicePropertyUINumber

Solicita um número associado ao dispositivo que pode ser exibido na interface do usuário. PropertyBuffer aponta para um valor ULONG.

Esse número normalmente é um número de slot percebido pelo usuário, como um número impresso ao lado do slot no quadro ou algum outro número que facilita a localização do dispositivo físico para o usuário. Se o dispositivo estiver em um barramento sem convenção de número de interface do usuário ou se o driver de barramento do dispositivo não puder determinar o número da interface do usuário, esse valor será 0xFFFFFFFF.

[in] BufferLength

Especifica o tamanho, em bytes, do PropertyBuffer fornecido pelo chamador.

[out, optional] PropertyBuffer

Ponteiro para um buffer fornecido pelo chamador para receber as informações da propriedade. O buffer pode ser alocado da memória paginável. O tipo do buffer é determinado pela DeviceProperty (veja acima).

[out] ResultLength

Ponteiro para um ULONG para receber o tamanho das informações de propriedade retornadas em PropertyBuffer. Se IoGetDeviceProperty retornar STATUS_BUFFER_TOO_SMALL, ele definirá esse parâmetro como o comprimento do buffer necessário.

Retornar valor

IoGetDeviceProperty retornará STATUS_SUCCESS se a chamada tiver sido bem-sucedida. Possíveis valores retornados por erro incluem o seguinte.

Código de retorno Descrição
STATUS_BUFFER_TOO_SMALL O buffer em PropertyBuffer era muito pequeno. ResultLength aponta para o comprimento do buffer necessário.
STATUS_INVALID_PARAMETER_2 A DeviceProperty fornecida não é uma das propriedades tratadas por essa rotina.
STATUS_INVALID_DEVICE_REQUEST Possivelmente indica que o DeviceObject fornecido não era um ponteiro PDO válido.

Comentários

IoGetDeviceProperty recupera informações de configuração do dispositivo do registro. Use essa rotina, em vez de acessar o registro diretamente, para isolar um driver de diferenças entre plataformas e de possíveis alterações na estrutura do Registro.

Para muitas solicitações de DeviceProperty , pode levar duas ou mais chamadas para IoGetDeviceProperty para determinar o BufferLength necessário. A primeira chamada deve usar um valor de melhor suposição. Se a status de retorno for STATUS_BUFFER_TOO_SMALL, o driver deverá liberar seu buffer atual, alocar um buffer do tamanho retornado em ResultLength e chamar IoGetDeviceProperty novamente. Como algumas das propriedades de instalação são dinâmicas, o tamanho dos dados pode mudar entre o tempo em que o tamanho necessário é retornado e o driver chama essa rotina novamente. Portanto, os drivers devem chamar IoGetDeviceProperty dentro de um loop que é executado até que a status de retorno não seja STATUS_BUFFER_TOO_SMALL.

Os drivers de função que dão suporte a dispositivos em um barramento herdado e em um barramento PnP podem usar as propriedades DevicePropertyBusNumber, DevicePropertyBusTypeGuid e DevicePropertyLegacyBusType para distinguir entre os barramentos.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível a partir do Windows 2000.
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Regras de conformidade da DDI HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

Confira também

CM_RESOURCE_LIST

DEVICE_REMOVAL_POLICY

ExAllocatePoolWithTag

GUID

INTERFACE_TYPE

IO_RESOURCE_REQUIREMENTS_LIST