wdk_mutex::fast_mutex

Struct FastMutexGuard

Source
pub struct FastMutexGuard<'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 It is the callers responsible to manage IRQL whilst using the FastMutex. On calling FastMutex::lock, the IRQL will automatically be raised to APC_LEVEL.

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.

Implementations§

Source§

impl<T> FastMutexGuard<'_, T>

Source

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

Safely drop the FastMutexGuard, an alternative to RAII.

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

§Errors

If the IRQL != APC_LEVEL, no unlock will occur and a DriverMutexError will be returned to the caller.

§IRQL

This function must be called at APC_LEVEL

Trait Implementations§

Source§

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

Source§

type Target = T

The resulting type after dereferencing.
Source§

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

Dereferences the value.
Source§

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

Source§

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

Mutably dereferences the value.
Source§

impl<T> Display for FastMutexGuard<'_, 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 FastMutexGuard<'_, T>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

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

§

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

§

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

§

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

§

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

§

impl<'a, T> UnwindSafe for FastMutexGuard<'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.