Função ExGetFirmwareEnvironmentVariable (wdm.h)

A rotina ExGetFirmwareEnvironmentVariable obtém o valor da variável de ambiente de firmware do sistema especificada.

Sintaxe

NTSTATUS ExGetFirmwareEnvironmentVariable(
  [in]            PUNICODE_STRING VariableName,
  [in]            LPGUID          VendorGuid,
  [out, optional] PVOID           Value,
  [in, out]       PULONG          ValueLength,
  [out, optional] PULONG          Attributes
);

Parâmetros

[in] VariableName

Um ponteiro para uma estrutura UNICODE_STRING que contém o nome da variável de ambiente especificada.

[in] VendorGuid

Um ponteiro para um GUID que identifica o fornecedor associado à variável de ambiente especificada. As variáveis de ambiente são agrupadas em namespaces com base em seus GUIDs de fornecedor. Algumas plataformas de hardware podem não dar suporte a GUIDs do fornecedor. Nessas plataformas, todas as variáveis são agrupadas em um namespace comum e o parâmetro VendorGuid é ignorado.

[out, optional] Value

Um ponteiro para um buffer alocado pelo chamador no qual a rotina grava o valor da variável de ambiente especificada.

[in, out] ValueLength

Um ponteiro para um local que contém o tamanho do buffer. Na entrada, o local apontado por esse parâmetro contém o tamanho, em bytes, do buffer De valor fornecido pelo chamador. Antes de sair, a rotina grava nesse local o tamanho, em bytes, do valor da variável. Se a rotina retornar STATUS_SUCCESS, o valor de saída *ValueLength será o número de bytes de dados gravados no buffer Valor . Se a rotina retornar STATUS_BUFFER_TOO_SMALL, *ValueLength será o tamanho do buffer necessário.

[out, optional] Attributes

Um ponteiro para um local no qual a rotina grava os atributos da variável de ambiente especificada. Esse parâmetro é opcional e pode ser definido como NULL se o chamador não precisar dos atributos. Para obter mais informações, consulte Comentários.

Retornar valor

ExGetFirmwareEnvironmentVariable retornará STATUS_SUCCESS se for bem-sucedido. Os possíveis valores retornados incluem o seguinte erro status códigos.

Código de retorno Descrição
STATUS_INSUFFICIENT_RESOURCES Os recursos do sistema disponíveis são insuficientes para concluir a operação solicitada.
STATUS_BUFFER_TOO_SMALL O buffer Valor é muito pequeno.
STATUS_VARIABLE_NOT_FOUND A variável solicitada não existe.
STATUS_INVALID_PARAMETER Um dos parâmetros não é válido.
STATUS_NOT_IMPLEMENTED Não há suporte para essa rotina nesta plataforma.
STATUS_UNSUCCESSFUL O firmware retornou um erro não reconhecido.

Comentários

As variáveis de ambiente de firmware do sistema contêm valores de dados passados entre o ambiente de firmware de inicialização implementado na plataforma de hardware e os carregadores do sistema operacional e outros softwares executados no ambiente de firmware.

O conjunto de variáveis de ambiente de firmware que está disponível em uma plataforma de hardware depende do firmware de inicialização. A localização dessas variáveis de ambiente também é especificada pelo firmware. Por exemplo, em uma plataforma baseada em UEFI, o NVRAM contém variáveis de ambiente de firmware que especificam as configurações de inicialização do sistema. Para obter informações sobre variáveis específicas usadas, consulte a Especificação da Interface de Firmware Extensível Unificada no site da UEFI . Para obter mais informações sobre UEFI e Windows, consulte UEFI e Windows.

Não há suporte para variáveis de ambiente de firmware em uma plataforma herdada baseada em BIOS. As chamadas para ExGetFirmwareEnvironmentVariable sempre falham em uma plataforma herdada baseada em BIOS; eles também falharão se o Windows tiver sido instalado usando o BIOS herdado em uma plataforma que dá suporte ao BIOS herdado e à UEFI. Para identificar essas condições, primeiro use uuidgen ou uma ferramenta semelhante para gerar um GUID exclusivo aleatório estaticamente. Em seguida, chame essa rotina para procurar um nome de variável específico, fornecendo esse GUID como o parâmetro VendorGuid .

Em uma plataforma herdada baseada em BIOS ou em uma plataforma que dá suporte ao BIOS herdado e à UEFI, mas na qual o Windows foi instalado usando o BIOS herdado, a função falhará com STATUS_NOT_IMPLEMENTED. Em uma plataforma baseada em UEFI, a função falhará com um erro específico ao firmware, como STATUS_VARIABLE_NOT_FOUND, para indicar que o namespace guid fictício não existe.

Se o chamador especificar um parâmetro atributos não NULL, a rotina gravará os atributos da variável de ambiente de firmware do sistema especificada no local apontado por Atributos. A versão 2.3.1 da especificação UEFI define os atributos a seguir para variáveis de ambiente de firmware.

Nome da variável Valor
EFI_VARIABLE_NON_VOLATILE 0x00000001
EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002
EFI_VARIABLE_RUNTIME_ACCESS 0x00000004
EFI_VARIABLE_HARDWARE_ERROR_RECORD 0x00000008
EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS 0x00000010
EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS 0x00000020
EFI_VARIABLE_APPEND_WRITE 0x00000040

Esses valores de atributo são definidos como bits de sinalizador. O valor gravado na variável ULONG apontada por Attributes é zero ou o OR bit a bit de um ou mais atributos na tabela anterior. Para obter mais informações, consulte a especificação UEFI no site da UEFI .

Se você criar um armazenamento de dados de backup, poderá usar essa função para salvar todas as configurações de inicialização da plataforma para que elas possam ser restauradas chamando a rotina ExSetFirmwareEnvironmentVariable , se necessário.

ExGetFirmwareEnvironmentVariable é o equivalente ao modo kernel da função Win32 GetFirmwareEnvironmentVariable .

Requisitos

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

Confira também

ExSetFirmwareEnvironmentVariable

GetFirmwareEnvironmentVariable

UNICODE_STRING