Generate smart pointers for windows raw handles with ergonomic APIs.

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 windowssafehandle::safe_handle; use windows::Win32::Foundation::{HANDLE, CloseHandle};

safe_handle!(pub Handle(HANDLE), CloseHandle); `` If you do not need to export theHandletype, simply omit thepub` keyword.

Smart Pointer with additional Drop logic

You can use a closure-based syntax: ```rust use windowssafehandle::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 useunsafe` block.

Example

Refer to tests/bcrypt_hash.rs to see how to safely wrap Windows Cryptography Next Generation (CNG) APIs for calculating MD5 hashes.