diff options
| author | pravic <[email protected]> | 2016-04-12 16:39:37 +0300 |
|---|---|---|
| committer | pravic <[email protected]> | 2016-04-12 16:39:37 +0300 |
| commit | 28ff216899e95a6a9756bcbe580f28ed8ce61228 (patch) | |
| tree | bbf00e3c5f3b440db5ddb3f86b6d3a893349cee0 /src/dpc.rs | |
| parent | git ignore (diff) | |
| download | winapi-kmd-rs-28ff216899e95a6a9756bcbe580f28ed8ce61228.tar.xz winapi-kmd-rs-28ff216899e95a6a9756bcbe580f28ed8ce61228.zip | |
Windows Kernel-Mode library
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, +} |