lovehunterboy
驱动小牛
驱动小牛
  • 注册日期2008-05-29
  • 最后登录2010-04-16
  • 粉丝2
  • 关注0
  • 积分67分
  • 威望463点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1691回复:2

哎,我就停留在WORKITEM这里了,大家来帮帮我这个初学才啊!

楼主#
更多 发布于:2008-08-25 16:59
在网上搜了几天,在书上也找了几天就是没结果啊,帮帮我吧。
一、关于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的内容写不到磁盘里,搞不懂啊)
附件名称/大小 下载次数 最后更新
regmon.rar (13KB)  12 2008-08-25 16:59
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
沙发#
发布于:2008-08-25 23:34
不要在workitem中作耗时太长的操作.写文件之类的,建议不要在这儿做,实在不行,开一个系统线程
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
lovehunterboy
驱动小牛
驱动小牛
  • 注册日期2008-05-29
  • 最后登录2010-04-16
  • 粉丝2
  • 关注0
  • 积分67分
  • 威望463点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-08-26 08:54
收到,谢谢
游客

返回顶部