Использование SecureZeroMemory в Delphi
Я понимаю, что есть SecureZeroMemory
функция в C. Реализация функции определяется в <WinnNT.h>
как RtlSecureZeroMemory
функция.
QNS: как можно SecureZeroMemory
использоваться в Delphi? Delphi выпустила библиотеку, которая содержит эту функцию? Я использую Delphi 7. Windows.pas
только имеет ZeroMemory
но нет SecureZeroMemory
,
4 ответа
Насколько я понимаю, единственная разница между ZeroMemory
а также SecureZeroMemory
является SecureZeroMemory
реализован как встроенная функция, гарантирующая, что она не будет оптимизирована компилятором.
Я не думаю, что Delphi выполняет тот же уровень оптимизации компилятора, поэтому ZeroMemory
звонки не должны быть оптимизированы.
Так как в соответствии с MSDN, SecureZeroMemory () на самом деле определяется как RtlSecureZeroMemory()
Вы можете объявить SecureZeroMemory()
следующее:
procedure SecureZeroMemory(_ptr: Pointer; cnt: Longint); external 'kernel32.dll' name 'RtlSecureZeroMemory';
SecureZeroMemory()
это просто псевдоним RtlSecureZeroMemory()
,
У меня сейчас нет компилятора Delphi, но я не думаю, что SecureZeroMemory
,
Я помню, что в Delphi, Win32 API функции / макросы CopyMemory
а также MoveMemory
идентичны (они оба реализованы так же, как указатель "версии" Move
Функция RTL). Отсюда и замечание на MSDN CopyMemory
страница справки о том, что вы должны использовать MoveMemory
скорее, чем CopyMemory
блоки перекрываются, не имеет значения. Делфи Move
всегда делает правильные вещи.
Я думаю, что то же самое относится и к ZeroMemory
а также SecureZeroMemory
, Первый реализован как FillChar
с #0, и если будет SecureZeroMemory
функция для Депли, я думаю, что это также будет просто FillChar
с #0. (Если FillChar
будет игнорироваться в некоторых случаях, это действительно должно быть задокументировано в справочнике Delphi, но это не так.)
Пожалуйста, поправьте меня, если я ошибаюсь!
Взгляните на справку MSDN здесь.
Единственный вопрос, удаляет ли компилятор Delphi ZeroMemory в качестве результата оптимизации, хотя я сомневаюсь в этом.