在Delphi中使用SecureZeroMemory

时间:2010-10-27 07:43:54

标签: c++ c security delphi memory

我知道C中有一个SecureZeroMemory函数。 函数实现在<WinnNT.h>中定义为RtlSecureZeroMemory函数。

QNS:如何在Delphi中使用SecureZeroMemory? Delphi是否发布了包含该功能的库?我正在使用Delphi 7. Windows.pas只有ZeroMemory但不是SecureZeroMemory

4 个答案:

答案 0 :(得分:6)

据我了解,ZeroMemorySecureZeroMemory之间的唯一区别是SecureZeroMemory是作为内联函数实现的,确保它不会被编译器优化。< / p>

我不认为Delphi执行相同级别的编译器优化,因此不应优化ZeroMemory调用。

答案 1 :(得分:3)

根据MSDN,SecureZeroMemory()实际上定义为RtlSecureZeroMemory(),您可以按如下方式声明SecureZeroMemory()

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

SecureZeroMemory()仅是RtlSecureZeroMemory()的别名。

答案 2 :(得分:1)

我目前没有可用的Delphi编译器,但我认为不需要SecureZeroMemory

我确实记得在Delphi中,Win32 API函数/宏CopyMemoryMoveMemory 相同(它们都被实现为指针“版本”的Move RTL功能)。因此,the MSDN CopyMemory reference page上的评论说你必须使用MoveMemory而不是CopyMemory是块重叠,这是无关紧要的。 Delphi的Move 总是是正确的。

认为同样适用于ZeroMemorySecureZeroMemory。第一个实现为FillChar#0,如果Deplhi有SecureZeroMemory函数,我认为它也只是#{1}}#0。 (如果FillChar在某些时候会被忽略,那么它确实应该在Delphi参考文献中记录,但事实并非如此。)

如果我错了,请纠正我!

答案 3 :(得分:0)

Take a look at the MSDN help here.

唯一的问题是Delphi的编译器是否将ZeroMemory删除为优化结果, 我很怀疑。