Windows 内核下的多线程开发
来源:互联网 发布:映客刷人气软件 编辑:程序博客网 时间:2024/06/11 15:51
预备知识:
1.PsCreateSystemThread
PsCreateSystemThread例程创建一个在内核模式下运行的系统线程,并为线程返回一个句柄。NTSTATUS
PsCreateSystemThread(
OUT PHANDLE ThreadHandle,
IN ULONG DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN HANDLE ProcessHandle OPTIONAL,
OUT PCLIENT_ID ClientId OPTIONAL,
IN PKSTART_ROUTINE StartRoutine,
IN PVOID StartContext
);
ThreadHandle指向接收句柄的变量。一旦该句柄不在使用,驱动必须使用ZwClose关闭该句柄。
StartRoutine是驱动线程入口点
StartContext 当线程被创建时,提供传递给线程的唯一参数。
当驱动初始化或I/O请求进入驱动的分发例程时,驱动调用此例程创建设备独立线程。例如,当驱动接收到一个一部设备控制请求时,驱动可能创建该线程。
2.内核下事件对象
KeWaitForSingleObject:
keWaitForSingleObject例程将当前线程至于等待状态,知道分发器对象被设置为信号状态或等待超时。
NTSTATUS
KeWaitForSingleObject(
IN PVOID Object,
IN KWAIT_REASON WaitReason,
IN KPROCESSOR_MODE WaitMode,
IN BOOLEAN Alertable,
IN PLARGE_INTEGER Timeout OPTIONAL
);
参数:
Object:指向被初始化的分发器对象(事件,互斥,信号量,线程,定时器),由调用者提供存储。
WaitReason:指定等待的原因。驱动程序应当将该值设置为Executive。若驱动代表User工作,或工作在用户线程上下文中,这种情况下,应当设置为UserRequest
WaitMode:指定调用者是否允许在KernelMode或UserMode。
Alertable:如果等待是alertable,设置布尔型变量为TRUE,否则为FALSE。
TimeOut:指定超时。
KeSetEvent:
KeSetEvent例程,如果时间不处于信号状态,设置事件对象为信号状态,并返回时间对象先前的状态。
LONG
KeSetEvent(
IN PRKEVENT Event,
IN KPRIORITY Increment,
IN BOOLEAN Wait
);
调用KeSetEvent使得事件能获取有信号状态。如果事件为通知事件,系统尝试满足尽可能多等待该事件的对象。事件保持为信号状态直到调用KeClearEvent或KeResetEvent清楚它。
- 通常在Driver初始化例程中,进行内核系统独立线程的初始化,有独立线程的完成函数。
- 有时需要跳过独立线程;
- 有时需要重启线程
- 终止线程
- Windows 内核下的多线程开发
- Windows驱动开发(3) - 内核模式下的字符串操作
- Windows驱动开发(4) - 内核模式下的文件操作
- Windows驱动开发(5) - 内核模式下的注册表操作
- 多线程下 ,linux和 windows开发应注意的区别
- 多线程下 ,linux和 windows开发应注意的区别
- Windows下的多线程学习
- linux下内核多线程的简单实现
- Linux下类似windows下_beginthread和_endthread 的多线程开发
- linux下的多线程开发
- windows下多线程开发---PTHREAD开发包 C语言
- windows内核下的一些东西
- 关于windows内核下的读写锁
- 关于windows内核下的读写锁
- Windows 内核模式下的线程同步
- windows内核开发环境的简易搭建
- 《Windows内核编程》---内核模式下字符串的基本操作
- 《Windows内核编程》---内核模式下字符串的基本操作
- 【个人整理】关于JS获取与设置文本框、文本域光标的实例大全
- 低质量摄像头视频前景检测方案
- Windows Phone 7 的App Bar的小改进
- Makefile
- 小小总结下
- Windows 内核下的多线程开发
- 开博了
- .net中Cache的应用
- TCP/IP协议详解
- Rumors on Synfora, Forte, CatapultC, AutoESL, CoWare, Calypto, EVE
- oracle存储过程
- 基于wince的嵌入式开发
- Java的内存泄漏
- 建立快速刷新的物化视图(materialized view)