Функция RtlSecureZeroMemory2 (wdm.h)
Функция RtlSecureZeroMemory2 является удобной оболочкой для RtlFillVolatileMemory и идентична RtlZeroVolatileMemory.
Синтаксис
volatile void * RtlSecureZeroMemory2(
[out] volatile void *Destination,
[in] size_t Length
);
Параметры
[out] Destination
Указатель на начальный адрес блока памяти для заполнения нулями.
[in] Length
Размер блока памяти для заполнения нулями в байтах.
Возвращаемое значение
Возвращает значение Destination.
Комментарии
Функция RtlSecureZeroMemory2 является удобной оболочкой для RtlFillVolatileMemory и идентична RtlZeroVolatileMemory.
Дополнительные сведения см. в разделе примечаний статьи RtlFillVolatileMemory.
Примечание
Эта функция работает во всех версиях Windows, а не только в последней версии. Чтобы получить объявление функции из заголовка wdm.h, необходимо использовать последнюю версию WDK. Вам также потребуется библиотека (volatileaccessk.lib) из последней версии WDK. Однако результирующий драйвер будет работать нормально в более старых версиях 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 RtlFillMemory because
// if the compiler realizes that "SensitiveData" is not
// referenced again the compiler can remove the call to RtlFillMemory.
// Instead we can call RtlSecureZeroMemory2, RtlZeroVolatileMemory, or RtlFillVolatileMemory
// (the former two are convenience wrappers around the latter). These
// calls will not be optimized away by the compiler.
// Note that RtlSecureZeroMemory2 performs better than
// RtlSecureZeroMemory function.
RtlSecureZeroMemory2(&SensitiveData, sizeof(SensitiveData));
Требования
Требование | Значение |
---|---|
Заголовок | wdm.h (включая Wdm.h) |
Библиотека | volatileaccessk.lib (режим ядра), volatileaccessu.lib (пользовательский режим) |