0x00 函式
kewaitforsingleobject
將當前執行緒置於等待狀態,直到給定的
dispatcher
物件被設定為乙個訊號狀態,或者(可選
)直到等待超時。
pscreatesystemthread
建立乙個以核心模式執行並返回執行緒控制代碼的系統執行緒。
psterminatesystemthread
終止當前系統執行緒。
zwclose
關閉乙個物件控制代碼。
keinitializeevent
將事件物件初始化為同步
(單個侍者
)或通知型別事件,並將其設定為已發出訊號或未發出訊號的狀態。
kesetevent
如果事件尚未發出訊號,則
kesetevent
例程將事件物件設定為已發出訊號的狀態,並返回事件物件的前一狀態。
keclearevent
將事件設定為無訊號狀態。
kedelayexecutionthread
在指定的時間間隔內將當前執行緒置於可報警或不可報警的等待狀態。
0x01 **
#include
//1
建立通知事件
//2
初始化事件
//3
建立三個現成
-> 1
個修改,2
個等待檢視列印資訊
//4
將事件更改為同步事件
//5
檢視執行緒列印資訊
kevent
event = ;
void
driverunload(
pdriver_object
driverobject)
void
kstartroutine1(
pvoid
startcontext)
; timeout.quadpart = -10 * 1000 * 1000 * 5;
//5秒
->
單位為100
納秒,*10 =
微秒,*10*1000 =
毫秒,*10*1000*1000 = 秒
ntstatus
status =
status_success;
status = kewaitforsingleobject(&event, executive, kernelmode,
false
, &timeout); if
(status ==
status_timeout)
else
else
} psterminatesystemthread(0);
//關閉執行緒
,否則執行緒屬於掛起狀態 }
void
kstartroutine2(
pvoid
startcontext)
; timeout.quadpart = -10 * 1000 * 1000 * 5;
//5秒
->
單位為100
納秒,*10 =
微秒,*10*1000 =
毫秒,*10*1000*1000 = 秒
ntstatus
status =
status_success;
status = kewaitforsingleobject(&event, executive, kernelmode,
false
, &timeout); if
(status ==
status_timeout)
else
else
} psterminatesystemthread(0);
//關閉執行緒
,否則執行緒屬於掛起狀態 }
void
kstartroutine3(
pvoid
startcontext)
ntstatus
driverentry(
pdriver_object
driverobject
,punicode_string
registrypath)
; interval.quadpart = -10 * 1000 * 1000 * 7;
kedelayexecutionthread(kernelmode,
false
, &interval);
keclearevent(&event);
dbgprint(
"driverentry keclearevent success ");
//同步事件
->
接收處理一次後失效
keinitializeevent(&event, synchronizationevent,
false
);
//建立同步事件
pscreatesystemthread(&thread,
generic_all
, null
, null
, null
, kstartroutine1,
null);
if(thread)
zwclose(thread);
pscreatesystemthread(&thread,
generic_all
, null
, null
, null
, kstartroutine2,
null);
if(thread)
zwclose(thread);
pscreatesystemthread(&thread,
generic_all
, null
, null
, null
, kstartroutine3,
null);
if(thread)
zwclose(thread);
return
status; }
對Windows程式的事件驅動特性的了解
什麼是事件驅動?程式不斷等待 利用乙個while迴圈 等待任何可能的輸入,然後做判斷,然後再做適當的處理,上述的 輸入 是由作業系統捕捉到之後,以訊息形式進入程式之中。如下 msg msg while getmessage msg,null,null,null 什麼是訊息?訊息,就是上面的msg結構...
驅動python python實現事件驅動
eventmanager事件管理類實現,大概就百來行 左右。encoding utf 8 系統模組 from queue import queue,empty from threading import class eventmanager def init self 初始化事件管理器 事件物件列表...
事件驅動與流程驅動
1 流程驅動 類似 一般就是主動輪詢 在幹活中還要分心 主動去找活幹 這樣有空餘的時間也完全浪費掉了 2 事件驅動 類似 比如公司有乙個oa系統 你幹完活的時候只需要看下oa系統有沒分配給你活 沒有可以幹自己的事 不用擔心還有其他事沒幹完 3者對比 採用警覺式者主動去輪詢 polling 行為取決於...