安全的等待线程结束
2016-07-15 09:48
218 查看
#include <ntifs.h> //卸载函数 VOID HelloDDKUnload(IN PDRIVER_OBJECT pDriverObject); extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath); VOID Test(void); BOOLEAN bIsRunThread = FALSE; HANDLE hThread = NULL; PETHREAD pThread = NULL; NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath) { pDriverObject->DriverUnload = HelloDDKUnload; DbgBreakPoint(); Test(); return STATUS_SUCCESS; } //卸载函数 VOID HelloDDKUnload(IN PDRIVER_OBJECT pDriverObject) { bIsRunThread = FALSE; KeWaitForSingleObject(pThread, Executive, KernelMode, FALSE, NULL); ObDereferenceObject(pThread); return; } VOID MyProcessThread(IN PVOID StartContext) { LARGE_INTEGER liSleep; liSleep.QuadPart = -10 * 1000 * 1000; while (bIsRunThread) { KeDelayExecutionThread(KernelMode, FALSE, &liSleep); KdPrint(("线程执行中.....\n")); } //结束线程 PsTerminateSystemThread(STATUS_SUCCESS); return; } VOID Test(void) { bIsRunThread = TRUE; OBJECT_ATTRIBUTES ObjectAttributes; InitializeObjectAttributes(&ObjectAttributes, NULL, OBJ_KERNEL_HANDLE, NULL, NULL); CLIENT_ID cid; //创建线程 PsCreateSystemThread(&hThread, 0L, &ObjectAttributes, NULL, &cid,MyProcessThread, NULL); PsLookupThreadByThreadId(cid.UniqueThread, &pThread); return; }
相关文章推荐
- SQL性能优化前期准备-清除缓存、开启IO统计
- HTTP请求和响应
- IOS pop至指定页面 --- IOS isKindOfClass 和 isMemberOfClass 的区别
- Centos7.1 安装测试Alluxio 出现Pseudo-terminal will not be allocated because stdin is not a terminal 错误的解决
- Centos7.1 安装测试Alluxio 出现Pseudo-terminal will not be allocated because stdin is not a terminal 错误的解决
- gradle本地文件仓库 (52.6.5. Flat directory repository)
- BZOJ 2152 聪聪可可
- 使用smartupload进行图片上传(servlet版,springmvc版)
- Android DrawerLayout带有侧滑功能的布局类(1)
- Android 高仿 频道管理----网易、今日头条、腾讯视频 (可以拖动的GridView)附源码DEMO
- tongEASY
- 关于上次射击题目100分解法(pascal)
- 在C语言中,double、long、unsigned、int、char类型数据所占字节数
- Impala
- 验证码的前世今生(前世篇)
- 数据挖掘十大经典算法
- Android程序员面试
- Alamofire 的使用
- [Office] 如何对Excel二维表中的所有数值进行排序
- 页面获取Spring Security登录用户