6个版本
0.0.6 | 2020年5月21日 |
---|---|
0.0.5 | 2020年5月21日 |
#159 in Windows APIs
16KB
269 代码行
wil-rs
Rust的Windows实现库
这个crate不提供原始的FFI绑定到Windows API(你想要的是winapi crate)。这个crate展示了Rust中Windows实现库可能的样子(类似于C++中的https://github.com/microsoft/wil)。
winapi crate在提供Windows API绑定方面做得很好。winapi不提供的是围绕这些API的安全包装(包括错误处理、资源管理等)。
这个"wil" crate旨在展示Windows API可能的安全包装。
如果这个crate缺少你需要的某些东西,请随意创建一个issue或提交一个pull request。
常见问题解答
示例
Cargo.toml
[target.'cfg(windows)'.dependencies]
wil = "0.0.3"
winapi = "0.3.8"
main.rs
use wil::token::Token;
use wil::errorhandling::WinAPIError;
use winapi::um::winnt::{TokenImpersonation, TokenPrimary};
use winapi::um::winnt::{TOKEN_DUPLICATE, TOKEN_QUERY, TOKEN_QUERY_SOURCE};
fn main() -> Result<(), WinAPIError> {
let token =
Token::from_current_process(TOKEN_DUPLICATE | TOKEN_QUERY | TOKEN_QUERY_SOURCE)?;
let token = if token.token_type()? == TokenPrimary {
token.duplicate(TokenImpersonation)?
} else {
token
};
if !token.is_admin()? {
if token.can_elevate()? {
println!("user is not an admin but can elevate to one");
} else {
println!("user is not an admin");
}
}
else {
println!("user is an admin");
}
Ok(())
}
依赖项
~46–310KB