use core::ffi::c_void;
use wdk_sys::ntddk::{ExAcquirePushLockSharedEx, ExReleasePushLockSharedEx};
pub struct PushLockShared {
raw: *mut c_void,
}
pub struct PushLockSharedGuard<'a> {
fast_mutex: &'a PushLockShared,
}
impl PushLockShared {
pub fn from_raw(raw: *mut c_void) -> Self {
Self { raw }
}
pub fn lock(&self) -> PushLockSharedGuard {
unsafe { ExAcquirePushLockSharedEx(&self.raw as *const _ as *mut _, 0) };
PushLockSharedGuard { fast_mutex: self }
}
}
impl Drop for PushLockSharedGuard<'_> {
fn drop(&mut self) {
unsafe { ExReleasePushLockSharedEx(&self.fast_mutex.raw as *const _ as *mut _, 0) };
}
}