aboutsummaryrefslogtreecommitdiff
path: root/src/dpc.rs
diff options
context:
space:
mode:
authorpravic <[email protected]>2016-04-12 16:39:37 +0300
committerpravic <[email protected]>2016-04-12 16:39:37 +0300
commit28ff216899e95a6a9756bcbe580f28ed8ce61228 (patch)
treebbf00e3c5f3b440db5ddb3f86b6d3a893349cee0 /src/dpc.rs
parentgit ignore (diff)
downloadwinapi-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.rs41
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,
+}