SecureZeroMemory2 函数
SecureZeroMemory2 函数以保证安全的方式用零填充内存块。
重要
一些信息与预发布产品相关,在商业发行之前可能会发生实质性修改。 Microsoft 对此处提供的信息不提供任何明示或暗示的保证。
参数
参数 Destination [输出]
指向内存块起始地址的指针,用零填充。
参数 Length [输入]
内存块的大小,用零填充,以字节为单位。
语法
volatile void*
SecureZeroMemory2 (
_Out_writes_bytes_all_(Length) volatile void* Destination,
SIZE_T Length
);
备注
此 API 是包装 FillVolatileMemory 的便捷包装器,与 ZeroVolatileMemory 相同。 有关详细信息,请参阅 FillVolatileMemory 的备注。
注意
此函数适用于所有版本的 Windows,而不仅仅是最新版本。 需要使用最新的 SDK 从 winbase.h
标头获取函数声明。 还需要最新 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 预览版(待定)
标头:winbase.h(包括 Winbase.h)
Kernel-mode 库:volatileaccessk.lib
User-mode 库:volatileaccessu.lib