use std::os::windows::io::RawHandle; use windows_sys::Win32::Foundation::{CloseHandle, HANDLE}; /// Wrapper around a Windows HANDLE so that we close it upon drop in all scenarios #[derive(Debug)] pub struct Handle(HANDLE); impl Handle { #[inline] pub fn new(handle: HANDLE) -> Self { Self(handle) } pub fn raw(&self) -> HANDLE { self.0 } pub fn into_raw(self) -> RawHandle { let ret = self.0; // This is super important so that drop is not called! std::mem::forget(self); ret as RawHandle } } impl Drop for Handle { fn drop(&mut self) { unsafe { CloseHandle(self.0) }; } }