diff options
Diffstat (limited to 'src/dpc.rs')
| -rw-r--r-- | src/dpc.rs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/dpc.rs b/src/dpc.rs new file mode 100644 index 0000000..de37e1a --- /dev/null +++ b/src/dpc.rs @@ -0,0 +1,41 @@ +//! Deferred Procedure Calls (DPC). + +use ::basedef::*; + +extern "system" +{ + pub fn KeInitializeDpc(Dpc: *mut KDPC, DeferredRoutine: PDEFERRED_ROUTINE, DeferredContext: *mut u8); + pub fn KeInsertQueueDpc(Dpc: *mut KDPC, SystemArgument1: *const u8, SystemArgument2: *const u8) -> bool; + pub fn KeRemoveQueueDpc(Dpc: *mut KDPC) -> bool; + pub fn KeFlushQueuedDpcs(); + pub fn KeGenericCallDpc(DeferredRoutine: PDEFERRED_ROUTINE, DeferredContext: *mut u8); +} + +pub type PDEFERRED_ROUTINE = extern "system" fn (Dpc: *const KDPC, DeferredContext: *mut u8, SystemArgument1: *const u8, SystemArgument2: *const u8); + +/// Deferred Procedure Call object. +#[repr(C)] +pub struct KDPC +{ + Type: u8, + Number: u8, + Importance: u8, + + DpcListEntry: LIST_ENTRY, + DeferredRoutine: PDEFERRED_ROUTINE, + DeferredContext: *mut u8, + SystemArgument1: *mut u8, + SystemArgument2: *mut u8, + + DpcData: *mut KDPC_DATA, +} + +/// DPC data structure definition. +#[repr(C)] +pub struct KDPC_DATA +{ + DpcListHead: LIST_ENTRY, + DpcLock: KSPIN_LOCK, + DpcQueueDepth: i32, + DpcCount: u32, +} |