次の方法で共有


SecureZeroMemory2 関数

SecureZeroMemory2 関数を使用すると、確実にセキュリティで保護された方法で、メモリ ブロックにゼロが入力されます。

重要

一部の情報はリリース前の製品に関する事項であり、正式版がリリースされるまでに大幅に変更される可能性があります。 Microsoft はここに示されている情報について、明示か黙示かを問わず、一切保証しません。

パラメーター

Param Destination [out]

ゼロが入力されているメモリ ブロックの開始アドレスへのポインター。

Param Length [in]

ゼロが入力されているメモリ ブロックのサイズ (バイト単位)。

構文

volatile void*
  SecureZeroMemory2 (
    _Out_writes_bytes_all_(Length) volatile void* Destination,
    SIZE_T Length
  );

解説

この API は、FillVolatileMemory をラップする便利なラッパーであり、ZeroVolatileMemory と同じものです。 詳細については、FillVolatileMemory のコメントを参照してください。

Note

この関数は、最新バージョンだけではなく、すべてのバージョンの Windows で動作します。 winbase.h ヘッダーから関数宣言を取得するには、最新の SDK を使用する必要があります。 また、最新の SDK のライブラリ (volatileaccessu.lib) も必要です。 ただし、生成されたバイナリが正常に実行されるのは、古いバージョンの Windows です。

UCHAR SensitiveData[100];

// Imagine we temporarily store some sensitive cryptographic
// material in a buffer.

StoreCryptographicKey(&SensitiveData);
DoCryptographicOperation(&SensitiveData);

// Now that we are done using the sensitive data we want to
// erase it from the stack. We cannot call FillMemory because
// if the compiler realizes that "SensitiveData" is not
// referenced again the compiler can remove the call to FillMemory.
// Instead we can call SecureZeroMemory2, ZeroVolatileMemory, or FillVolatileMemory
// (the former two are convienence wrappers around the latter). These
// calls will not be optimized away by the compiler.
// Note that SecureZeroMemory2 performs better than the old
// SecureZeroMemory API.

SecureZeroMemory2(&SensitiveData, sizeof(SensitiveData));

要件

サポートされている最小のクライアント: Windows 11 Insider Preview ビルド TBD

ヘッダー: winbase.h (Winbase.h を含みます)

カーネル モード ライブラリ: volatileaccessk.lib

ユーザー モード ライブラリ: volatileaccessu.lib

関連項目