wdk_mutex::kmutex

Struct KMutexGuard

Source
pub struct KMutexGuard<'a, T> { /* private fields */ }
Expand description

A RAII scoped guard for the inner data protected by the mutex. Once this guard is given out, the protected data may be safely mutated by the caller as we guarantee exclusive access via Windows Kernel Mutex primitives.

When this structure is dropped (falls out of scope), the lock will be unlocked.

§IRQL

Access to the data within this guard must be done at <= APC_LEVEL if a non-alertable lock was acquired, or <= DISPATCH_LEVEL if an alertable lock was acquired. It is the callers responsible to manage APC levels whilst using the KMutex.

If you wish to manually drop the lock with a safety check, call the function Self::drop_safe.

§Kernel panic

Raising the IRQL above safe limits whilst using the mutex will cause a Kernel Panic if not appropriately handled. When RAII drops this type, the mutex is released, if the mutex goes out of scope whilst you hold an IRQL that is too high, you will receive a kernel panic.

Implementations§

Source§

impl<T> KMutexGuard<'_, T>

Source

pub fn drop_safe(&mut self) -> Result<(), DriverMutexError>

Safely drop the KMutexGuard, an alternative to RAII.

This function checks the IRQL before attempting to drop the guard.

§Errors

If the IRQL > DISPATCH_LEVEL, no unlock will occur and a DriverMutexError will be returned to the caller.

§IRQL

This function is safe to call at any IRQL, but it will not release the mutex if IRQL > DISPATCH_LEVEL

Trait Implementations§

Source§

impl<T> Deref for KMutexGuard<'_, T>

Source§

type Target = T

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl<T> DerefMut for KMutexGuard<'_, T>

Source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.
Source§

impl<T> Display for KMutexGuard<'_, T>
where T: Display,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T> Drop for KMutexGuard<'_, T>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<'a, T> Freeze for KMutexGuard<'a, T>

§

impl<'a, T> RefUnwindSafe for KMutexGuard<'a, T>
where T: RefUnwindSafe,

§

impl<'a, T> Send for KMutexGuard<'a, T>

§

impl<'a, T> Sync for KMutexGuard<'a, T>

§

impl<'a, T> Unpin for KMutexGuard<'a, T>

§

impl<'a, T> UnwindSafe for KMutexGuard<'a, T>
where T: RefUnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.