An open API service indexing awesome lists of open source software.

https://github.com/vsrs/windows_safe_handle

Generate smart pointers for https://crates.io/crates/windows raw handles with ergonomic APIs.
https://github.com/vsrs/windows_safe_handle

Last synced: 3 months ago
JSON representation

Generate smart pointers for https://crates.io/crates/windows raw handles with ergonomic APIs.

Awesome Lists containing this project

README

        

# `windows_safe_handle`

Generate smart pointers for [windows](https://crates.io/crates/windows) raw handles with ergonomic APIs.

## `safe_handle!`

This crate doesn't offer pre-defined smart pointers. Instead, it provides a single `safe_handle!` macro for generation:

### Simple Smart Pointer, calling an unsafe Function on `Drop`

```rust
use windows_safe_handle::safe_handle;
use windows::Win32::Foundation::{HANDLE, CloseHandle};

safe_handle!(pub Handle(HANDLE), CloseHandle);
```

If you do not need to export the `Handle` type, simply omit the `pub` keyword.

### Smart Pointer with additional `Drop` logic

You can use a closure-based syntax:

```rust
use windows_safe_handle::safe_handle;
use windows::Win32::Foundation::{HANDLE, CloseHandle};

safe_handle!(pub Handle(HANDLE), |h| {
// Place your code here
unsafe { CloseHandle(h) }
});
```

Note that in this case you have to explicitly use `unsafe` block.

## Versions

- `v0.1.*`: Compatible with `windows` `v0.48.0`.
- `v0.2.*`: Compatible with `windows` `v0.58.0`.

## Example

Refer to [`tests/bcrypt_hash.rs`](https://github.com/vsrs/windows_safe_handle/blob/main/tests/bcrypt_hash.rs) to see how to safely wrap [Windows Cryptography Next Generation (CNG) APIs](https://learn.microsoft.com/en-us/windows/win32/seccng/cng-portal) for calculating MD5 hashes.