Windows驅動 事件

2021-10-12 16:16:53 字數 3094 閱讀 8897

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 行為取決於...