wil 0.0.6

This crates is a demonstrator of what a Windows Implementation Library in Rust could look like
Documentation
# wil-rs

Windows Implementation Library for Rust

[Documentation](https://docs.rs/wil/)

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:
```toml
[target.'cfg(windows)'.dependencies]
wil = "0.0.3" 
winapi = "0.3.8"
```
main.rs:
```Rust

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


```