日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

驱动线程与事件

發(fā)布時(shí)間:2025/3/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 驱动线程与事件 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

創(chuàng)建線程

NTSTATUS PsCreateSystemThread (_Out_ PHANDLE ThreadHandle, //句柄指針_In_ ULONG DesiredAccess, //0_In_opt_ POBJECT_ATTRIBUTES ObjectAttributes //NULL_In_opt_ HANDLE ProcessHandle, //NULL_Out_opt_ PCLIENT_ID ClientId, //NULL_In_ PKSTART_ROUTINE StartRoutine, //線程函數(shù)_In_opt_ PVOID StartContext //傳入線程的指針);

初始化事件

VOID KeInitializeEvent (_Out_ PRKEVENT Event, //初始化的事件_In_ EVENT_TYPE Type, //事件類(lèi)型_In_ BOOLEAN State //初始化狀態(tài)一般為 FALSE);

//等待事件(阻塞)

NTSTATUS KeWaitForSingleObject(_In_ PVOID Object, //事件_In_ KWAIT_REASON WaitReason, //Executive_In_ KPROCESSOR_MODE WaitMode, //KernelMode_In_ BOOLEAN Alertable, //0_In_opt_ PLARGE_INTEGER Timeout //0 );

設(shè)置事件

LONG KeSetEvent (_Inout_ PRKEVENT Event, //要設(shè)置的事件_In_ KPRIORITY Increment, //提示優(yōu)先權(quán)_In_ _Literal_ BOOLEAN Wait //修改狀態(tài) TRUE阻塞那就會(huì)執(zhí)行);

案例

#include<ntddk.h>//定義一個(gè)事件 static KEVENT g_event;VOID Sleep(LONG msec) {LARGE_INTEGER My_interval;My_interval.QuadPart = (-10 * 1000);My_interval.QuadPart *= msec;KeDelayExecutionThread(KernelMode, 0, &My_interval); }//線程回調(diào) VOID ThreadProc(PVOID context) {PUNICODE_STRING str = (PUNICODE_STRING)context;for (size_t i = 0; i < 10; i++){KdPrint(("%wZ %d\n", str, i));Sleep(1000);}//設(shè)置事件(設(shè)置后等待那立馬會(huì)執(zhí)行)KeSetEvent(&g_event, 0, TRUE);//結(jié)束自身PsTerminateSystemThread(STATUS_SUCCESS); }VOID MyThreadProc() {UNICODE_STRING str = RTL_CONSTANT_STRING(L"Hello");HANDLE hThread = NULL;//初始化事件KeInitializeEvent(&g_event, SynchronizationEvent, FALSE);//創(chuàng)建線程NTSTATUS status = PsCreateSystemThread(&hThread, 0, NULL, NULL, NULL, (PKSTART_ROUTINE)ThreadProc, (PVOID)&str);if (!NT_SUCCESS(status)){KdPrint(("CreateThread error!\n"));if (hThread != NULL)ZwClose(hThread);return;}ZwClose(hThread);//等待事件(阻塞)KeWaitForSingleObject(&g_event, Executive, KernelMode, 0, 0);//等待KdPrint(("完畢\n"));}//卸載 VOID MyUnload(PDRIVER_OBJECT pDriverObject) {}NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pUnicodeString) {MyThreadProc();pDriverObject->DriverUnload = MyUnload;return STATUS_SUCCESS; }

總結(jié)

以上是生活随笔為你收集整理的驱动线程与事件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。