#winapi #token #look #error-handling

wil

这个crate是一个展示Rust中Windows实现库可能的样子。

6个版本

0.0.6 2020年5月21日
0.0.5 2020年5月21日

#159 in Windows APIs

MIT许可证

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