SetFirmwareEnvironmentVariableExA 関数 (winbase.h)

指定したファームウェア環境変数の値を、この変数の格納方法と保守方法を示す属性として設定します。

構文

BOOL SetFirmwareEnvironmentVariableExA(
  [in] LPCSTR lpName,
  [in] LPCSTR lpGuid,
  [in] PVOID  pValue,
  [in] DWORD  nSize,
  [in] DWORD  dwAttributes
);

パラメーター

[in] lpName

ファームウェア環境変数の名前。 ポインターは NULL にすることはできません。

[in] lpGuid

ファームウェア環境変数の名前空間を表す GUID。 GUID は、"{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} という形式の文字列である必要があります。 システムが GUID ベースの名前空間をサポートしていない場合、このパラメーターは無視されます。 ポインターは NULL にすることはできません。

[in] pValue

ファームウェア環境変数の新しい値へのポインター。

[in] nSize

pValue バッファーのサイズ (バイト単位)。 VARIABLE_ATTRIBUTE_APPEND_WRITE、VARIABLE_ATTRIBUTE_AUTHENTICATED_WRITE_ACCESS、またはVARIABLE_ATTRIBUTE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS変数属性が dwAttributes を使用して設定されていない限り、この値を 0 に設定すると、この変数が削除されます。

[in] dwAttributes

変数に関連付けられている UEFI 変数属性を設定するビットマスク。 「UEFI Spec 2.3.1, Section 7.2」も参照してください。

説明
VARIABLE_ATTRIBUTE_NON_VOLATILE
0x00000001
ファームウェア環境変数は、不揮発性メモリ (NVRAM など) に格納されます。
VARIABLE_ATTRIBUTE_BOOTSERVICE_ACCESS
0x00000002
ファームウェア環境変数は、ブート サービス中にアクセスできます。
VARIABLE_ATTRIBUTE_RUNTIME_ACCESS
0x00000004
ファームウェア環境変数には、実行時にアクセスできます。
メモ この属性が設定された変数には、VARIABLE_ATTRIBUTE_BOOTSERVICE_ACCESSも設定 されている 必要があります。
 
VARIABLE_ATTRIBUTE_HARDWARE_ERROR_RECORD
0x00000008
実行時に発生したハードウェア関連のエラーを示します。
VARIABLE_ATTRIBUTE_AUTHENTICATED_WRITE_ACCESS
0x00000010
このファームウェア環境変数に書き込む前に満たす必要がある認証要件を示します。 詳細については、「 UEFI 仕様 2.3.1」を参照してください。
VARIABLE_ATTRIBUTE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS
0x00000020
このファームウェア環境変数に書き込む前に満たす必要がある認証とタイム スタンプの要件を示します。 この属性を設定すると、 pValue で表されるバッファーは、記述子EFI_VARIABLE_AUTHENTICATION_2完全な (シリアル化された) インスタンスで始まります。 詳細については、「 UEFI 仕様 2.3.1」を参照してください。
VARIABLE_ATTRIBUTE_APPEND_WRITE
0x00000040
pValue の値を持つ既存の環境変数を追加します。 ファームウェアで操作がサポートされていない場合、 SetFirmwareEnvironmentVariableEx はERROR_INVALID_FUNCTIONを返します。

戻り値

関数が成功した場合、戻り値は 0 以外の値になります。

関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。 考えられるエラー コードには、ERROR_INVALID_FUNCTIONが含まれます。

解説

Windows 10 バージョン 1803 以降、ユニバーサル Windows アプリは UEFI ファームウェア変数の読み取りと書き込みを行うことができます。 詳細については、「 ユニバーサル Windows アプリから UEFI ファームウェア変数にアクセス する」を参照してください。

Windows 10 バージョン 1803 以降では、User-Mode Driver Framework (UMDF) ドライバーから UEFI ファームウェア変数の読み取りもサポートされています。 UMDF ドライバーからの UEFI ファームウェア変数の書き込みはサポートされていません。

ファームウェア環境変数を記述するには、アプリが実行されているユーザー アカウントに SE_SYSTEM_ENVIRONMENT_NAME 特権が必要です。 ユニバーサル Windows アプリは管理者アカウントから実行し、「 ユニバーサル Windows アプリから UEFI ファームウェア変数にアクセスする」で説明されている要件に従う必要があります。

変数の属性を変更する正しい方法は、変数を削除し、異なる属性で再作成することです。

ファームウェア環境変数の正確なセットは、ブート ファームウェアによって決まります。 これらの環境変数の場所は、ファームウェアによっても指定されます。 たとえば、UEFI ベースのシステムでは、NVRAM にはシステム ブート設定を指定するファームウェア環境変数が含まれています。 使用される特定の変数の詳細については、 UEFI の仕様に関するページを参照してください。 UEFI と Windows の詳細については、「 UEFI と Windows」を参照してください。

ファームウェア変数は、レガシ BIOS ベースのシステムではサポートされていません。 SetFirmwareEnvironmentVariableEx 関数は、レガシ BIOS ベースのシステムで常に失敗します。または、レガシ BIOS と UEFI の両方をサポートするシステムにレガシ BIOS を使用して Windows がインストールされている場合は、常に失敗します。 これらの条件を識別するには、lpName パラメーターの空の文字列 ("") などのダミーのファームウェア環境名と、lpGuid パラメーターの "{00000000-0000-0000-0000-000000000000}" などのダミー GUID を使用して 関数を呼び出します。 レガシ BIOS ベースのシステム、またはレガシ BIOS を使用して Windows がインストールされたレガシ BIOS と UEFI の両方をサポートするシステムでは、関数はERROR_INVALID_FUNCTIONで失敗します。 UEFI ベースのシステムでは、関数は、ダミー GUID 名前空間が存在しないことを示すために、ファームウェアに固有のエラー (ERROR_NOACCESS など) で失敗します。

注意

winbase.h ヘッダーでは、SetFirmwareEnvironmentVariableEx をエイリアスとして定義します。このエイリアスは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

   
サポートされている最小のクライアント Windows 8 [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows Server 2012 [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー winbase.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

ユニバーサル Windows アプリから UEFI ファームウェア変数にアクセスする

GetFirmwareEnvironmentVariableEx

SetFirmwareEnvironmentVariable