Использование SecureZeroMemory в Delphi - PullRequest
4 голосов
/ 27 октября 2010

Я понимаю, что в C. есть функция SecureZeroMemory. Реализация функции определена в <WinnNT.h> как RtlSecureZeroMemory функция.

QNS: Как можно использовать SecureZeroMemory в Delphi?Delphi выпустила библиотеку, которая содержит эту функцию?Я использую Delphi 7. Windows.pas имеет только ZeroMemory, но не SecureZeroMemory.

Ответы [ 4 ]

6 голосов
/ 27 октября 2010

Насколько я понимаю, единственная разница между ZeroMemory и SecureZeroMemory в том, что SecureZeroMemory реализована как встроенная функция, гарантирующая, что компилятор не оптимизирует ее.

Я не думаю, что Delphi выполняет тот же уровень оптимизации компилятора, поэтому ZeroMemory вызовы не должны быть оптимизированы.

3 голосов
/ 27 октября 2010

Поскольку согласно MSDN, SecureZeroMemory () фактически определяется как RtlSecureZeroMemory(), вы можете объявить SecureZeroMemory() следующим образом:

  procedure SecureZeroMemory(_ptr: Pointer; cnt: Longint); external 'kernel32.dll' name 'RtlSecureZeroMemory';

SecureZeroMemory() является простопсевдоним RtlSecureZeroMemory().

1 голос
/ 27 октября 2010

У меня сейчас нет компилятора Delphi, но я не думаю, что есть необходимость в SecureZeroMemory.

Я помню, что в Delphi функции / макросы API Win32 CopyMemory и MoveMemory идентичны (оба они реализованы так же, как указатели "версий" * RTL-функции Move ). Следовательно, замечание на справочной странице MSDN CopyMemory о том, что вы должны использовать MoveMemory вместо CopyMemory, если блоки перекрываются, не имеет значения. Move Delphi всегда делает правильные вещи.

Я думаю То же самое относится к ZeroMemory и SecureZeroMemory. Первый реализован как FillChar с # 0, и если для Deplhi будет функция SecureZeroMemory, я думаю, что это будет просто FillChar с # 0. (Если FillChar будет иногда игнорироваться, это действительно должно быть задокументировано в справочнике Delphi, но это не так.)

Пожалуйста, поправьте меня, если я ошибаюсь!

0 голосов
/ 27 октября 2010

Посмотрите справку MSDN здесь.

Единственный вопрос, удаляет ли компилятор Delphi ZeroMemory как результат оптимизации, хотя я в этом сомневаюсь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...