我知道C中有一个SecureZeroMemory
函数。
函数实现在<WinnNT.h>
中定义为RtlSecureZeroMemory
函数。
QNS:如何在Delphi中使用SecureZeroMemory
? Delphi是否发布了包含该功能的库?我正在使用Delphi 7. Windows.pas
只有ZeroMemory
但不是SecureZeroMemory
。
答案 0 :(得分:6)
据我了解,ZeroMemory
和SecureZeroMemory
之间的唯一区别是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函数/宏CopyMemory
和MoveMemory
相同(它们都被实现为指针“版本”的Move
RTL功能)。因此,the MSDN CopyMemory
reference page上的评论说你必须使用MoveMemory
而不是CopyMemory
是块重叠,这是无关紧要的。 Delphi的Move
总是是正确的。
我认为同样适用于ZeroMemory
和SecureZeroMemory
。第一个实现为FillChar
#0,如果Deplhi有SecureZeroMemory
函数,我认为它也只是#{1}}#0。 (如果FillChar
在某些时候会被忽略,那么它确实应该在Delphi参考文献中记录,但事实并非如此。)
如果我错了,请纠正我!
答案 3 :(得分:0)
Take a look at the MSDN help here.
唯一的问题是Delphi的编译器是否将ZeroMemory删除为优化结果, 我很怀疑。