找回密码
 加入
搜索
查看: 6911|回复: 11

[系统综合] 【已解决】请教:DllCall使用问题

  [复制链接]
发表于 2012-3-26 16:14:55 | 显示全部楼层 |阅读模式
本帖最后由 ppsfxn 于 2012-3-27 10:18 编辑

想使用crypt32.dll中的CryptProtectData函数进行字符串加密,函数定义如下:
BOOL WINAPI CryptProtectData(
DATA_BLOB* pDataIn,
LPCWSTR szDataDescr,
DATA_BLOB* pOptionalEntropy,
PVOID pvReserved,
CRYPTPROTECT_PROMPTSTRUCT* pPromptStruct,
DWORD dwFlags,
DATA_BLOB* pDataOut
);
BLOB定义如下:
DATA_BLOB{
LONG cbData;
BYTE *pbData
}
C语言中的调用如下:
(CryptProtectData(&DataIn,L"password", // A description string
//to be included with the
// encrypted data.
NULL, // Optional entropy not used.
NULL, // Reserved.
NULL, // Pass NULL for the
// prompt structure.
0,
&DataOut))
AU3调用代码如下:
Local $str = "long var1; char var2[2048]" ;模拟DATA_BLOB结构体,创建输入和输出参数
Local $in = DllStructCreate($str)
Local $out = DllStructCreate($str)
;给输入参数赋值
DllStructSetData($in, "var1", 3)
DllStructSetData($in, "var2", "test")
;调用 dll
$result = DllCall("crypt32.dll", "BOOL", "CryptProtectData", "ptr", DllStructGetPtr($in), "wstr", "desc", "ptr", "NULL", "ptr", "NULL", "ptr", "NULL", "DWORD", 0, "ptr", DllStructGetPtr($out))
MsgBox(0,DllStructGetData($out, 1), DllStructGetData($out, 2))
问题:DllStructGetData($out, 2)应该要返回加密后的字符串,但总返回空值,不知道哪里出了错,请大虾们指点
@error返回0,应该是参数出现了问题。
新手,对dllcall参数很是迷惑,对带指针、结构体的参数更是迷惑。。。
发表于 2012-3-26 19:05:02 | 显示全部楼层
#include <lsasecur.au3>

Local $sPlainText = StringToBinary("Hello world~", 2)
Local $bEncrypt  = _SeProtectData($sPlainText)

MsgBox(0, "Encrypted", $bEncrypt)

Local $bDecrypt = _SeUnprotectData($bEncrypt)
MsgBox(0, "Decrypted", BinaryToString($bDecrypt, 2))
 楼主| 发表于 2012-3-27 08:57:48 | 显示全部楼层
非常非常感谢!!!
AutoIt真是太神奇了~~~
 楼主| 发表于 2012-3-27 08:57:54 | 显示全部楼层
非常非常感谢!!!
AutoIt真是太神奇了~~~
 楼主| 发表于 2012-3-27 08:58:43 | 显示全部楼层
还是想知道DllCall怎么用。。。
 楼主| 发表于 2012-3-27 08:59:05 | 显示全部楼层
还是想知道DllCall怎么用。。。
发表于 2012-3-27 09:29:17 | 显示全部楼层
不错,学习了,谢谢!
发表于 2012-3-27 09:58:11 | 显示全部楼层
楼主,你下一个lsasecur.au3去研究吧,里面有的。
 楼主| 发表于 2012-3-27 10:12:13 | 显示全部楼层
回复 8# shqf

嗯嗯,刚发现,正在看
 楼主| 发表于 2012-3-27 10:26:06 | 显示全部楼层
怎么把贴子弄到已解决区呢?哪里可以设置主题分类为已解决  
发表于 2012-12-3 09:58:31 | 显示全部楼层
学习...我连想到的问题都不会....
发表于 2017-4-2 21:50:45 | 显示全部楼层
autoit 和其他程序变量传递的时候 涉及指针是不是一定要用struct? 然后getptr获得指针吗?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-17 04:36 , Processed in 0.142817 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表