阅读:1722回复:2
哎,我就停留在WORKITEM这里了,大家来帮帮我这个初学才啊!
在网上搜了几天,在书上也找了几天就是没结果啊,帮帮我吧。
一、关于WORKITEM有的说是:IO_WORKITEM为了把一些工作放到PASSIVE_LEVEL去做,因为如果你在DISPATCH_LEVEL等高优先级下很多函数是没法调用的。这个和DPC非常类似,DPC是为了提高优先级,而这个是为了降低优先级。IoQueueWorkItem的工作其实就是把这个WorkItem加入队列,然后由一个专门的系统线程来检查运行的。-------------可是我现在看regmon的代码在IRP_MJ_DEVICE_CONTROL的函数:RegmonDeviceControl调用RegmonNewStore再调用RegmonWriteBootLog时,就用加放了WORKITEM,把RegmonWriteBootLog作为WORKITEM的例程,我不知道是为什么,应该这些函数都是在PASSIVE_LEVEL上运行的啊?而在IRP_MJ_SHUTDOWN: 里是直接调用RegmonWriteBootLog的??? 二、查了DDK的帮助讲到:A driver that requires delayed processing can use a work item, which contains a pointer to a driver callback routine that performs the actual processing. 说是为了延迟进程才用WORKITEM,我想大牛们都应该看过regmon的代码,那里为什么要延迟啊? 三、通过我这几天的学习,我个人认为是如果在高于或等于DISPATCH_LEVEL时,用到的函数要操作分页内存时才用WORKITEM降低级别以免兰屏,不知道对不对?? 四、我对System Worker Threads的概念还不是很理解,请大家赐教!! 附上regmomr的代码(不能实现写缓存到日志文件也就是store的内容写不到磁盘里,搞不懂啊) |
|
|
沙发#
发布于:2008-08-25 23:34
不要在workitem中作耗时太长的操作.写文件之类的,建议不要在这儿做,实在不行,开一个系统线程
|
|
|
板凳#
发布于:2008-08-26 08:54
收到,谢谢
|
|