Skip to content

jeanga/wil-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

wil-rs

Windows Implementation Library for Rust

Documentation

This crate does not provide raw FFI bindings to Windows API (the winapi crate is what you are looking for). This crate does demonstrate what a Windows Implementation Library could look like in Rust ("à la" https://github.com/microsoft/wil in C++).

The winapi crate is doing a great job in providing the bindings for Windows APIs. What winapi does not provide is a safety wrapper arroung those APIs (with error handling, resource management, ...).

This "wil" crate aims to present what could be a safe wrapper for Windows API.

If this crate is massively missing that something you need. Feel free to create an issue, open a pull request.

Frequently asked questions

Example

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(())
}

About

Windows Implementation Library for Rust

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages