Skip to main content

BlockIoHookEngine

Struct BlockIoHookEngine 

Source
pub struct BlockIoHookEngine { /* private fields */ }
Expand description

Installs and removes Block IO read/write hooks for the target volume, and holds the cipher supplier used by the hooked paths.

The engine owns the saved original function pointers so uninstall can restore the protocol vtables to their pristine state before chainloading.

Implementations§

Source§

impl BlockIoHookEngine

Source

pub fn new( geometry: HookGeometry, cipher_supplier: Box<dyn VolumeCipherSupplier>, ) -> VckResult<Self>

Creates an engine bound to the given geometry and the sample-selected cipher supplier.

Source

pub fn install(&mut self) -> VckResult<()>

Locates the target volume’s Block IO protocol(s), saves the original ReadBlocks / WriteBlocks function pointers, and replaces the vtable entries with our hooks.

Matching is done by GPT partition GUID (carried by the handover payload / loader config). Both EFI_BLOCK_IO_PROTOCOL read and write are hooked.

Source

pub fn uninstall(&mut self) -> VckResult<()>

Restores all hooked vtables to their original function pointers.

NOTE: in the normal boot flow the hooks intentionally remain installed across the chainload (the OS loader keeps reading/writing through them), so this is only used for error-path cleanup.

Auto Trait Implementations§

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<T> Pointee for T

Source§

type Metadata = ()

The metadata type for pointers and references to this type.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.