由于无法找到模块,因此无法从WinApi创建中调用CryptDecrypt。

4
文档中写道,函数的名称为winapi::um::wincrypt::CryptDecrypt,但是当我安装这个crate并在我的项目中调用该函数时,一切都工作正常,直到我尝试调用函数时,出现以下错误信息:
error[E0433]: failed to resolve. Could not find `wincrypt` in `um`
  --> src\main.rs:68:39
   |
68 |  let decrypted_password = winapi::um::wincrypt::CryptDecrypt(password);
   |                                       ^^^^^^^^ Could not find `wincrypt` in `um`

我的目标是从计算机上Chrome存储密码的“本地数据”文件中解密密码。我正在使用名为winapi 的Windows win32crypt API 绑定的Rust语言。我试图做类似于chromepass的事情,但是用Rust语言实现。


你是否使用了正确的WinAPI版本?你的Cargo.toml文件是什么? - Shepmaster
@Shepmaster 是的,最新版本是 0.3.4 - RyanM
2个回答

5

根据 整个crate的文档:

常见问题

为什么会出现未解决导入错误?

每个模块都有一个功能标志,因此您必须启用相应的功能才能访问这些项。例如,如果您想使用winapi::um::winuser中的某个内容,您必须启用winuser功能。

在此情况下,您需要添加wincrypt

[target.'cfg(windows)'.dependencies]
winapi = { version = "0.3", features = ["wincrypt"] }

1
你怎么知道必须包含“wincrypt”功能?它是否有解释或映射到某个地方? - hedgar2017
1
@hedgar2017,我不知道如何重述文档以使其更清晰:每个模块都在特性标志上打了门槛... winapi::um::winuser里的某些东西 ... 启用winuser功能. - Shepmaster
这个需要更加清晰明了。如果我在谷歌上搜索“winapi crate um feature”,除了stackoverflow上的这条有用评论外,我什么都找不到。那么第一个问题是...为什么会有两个术语“模块”和“特性”,如果模块=特性总是具有1:1的映射关系。(即,在货物的.toml文件中将feature=[]更改为module=[]或允许任一关键字来帮助。 - Ross Youngblood
@RossYoungblood 如果模块=特性总是有1:1映射,那就不是这种情况,所以这个观点是无意义的。对于_这个特定的板条箱_,顶级模块对应于特性,但这不是全局的。是什么让你认为这是普遍真理呢? - Shepmaster

-1

版本0.2.8太旧了,所以当我将wincrypt作为Cargo.toml的一个功能添加时,我得到了构建错误。

enter image description here

features = ["wincrypt"] 在 0.3.9 版本中表现更好/不同。


1
代码作为图片发布对搜索引擎没有用处。此外,发布您收到的_具体错误信息_也对搜索引擎有用。 - Shepmaster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接