阅读:1467回复:4
大家来找错,第一次用workitem就蓝屏了
LogMutex和hLog都是全局的,代码参考regmon的,但是自己修改了(按直觉改的,haha!:P)
softice跟踪了一下,没有执行writelog,但是writeNewlog执行完了 错误是UNEXPECTED_KERNEL_MODE_TRAP void WriteNewLog(char *text) { WORK_QUEUE_ITEM workItem; ExInitializeWorkItem(&workItem, WriteLog, text); ExQueueWorkItem(&workItem, CriticalWorkQueue); } void WriteLog(PVOID text) { IO_STATUS_BLOCK ioStatusBlock; MUTEX_ACQUIRE(LogMutex); ZwWriteFile(hLog, NULL, NULL, NULL, &ioStatusBlock, text, MAXLOGLEN, NULL, NULL); MUTEX_RELEASE(LogMutex); } [编辑 - 12/17/04 by pwpwpw123] |
|
沙发#
发布于:2004-12-17 11:23
没有执行writelog,但是writeNewlog执行完了 肯定是执行writelog出的问题,只能说明你的workItem出了问题, 而我看DDK帮助 ExInitializeWorkItem is exported to support existing driver binaries and is obsolete. Use IoAllocateWorkItem instead. 你明白了吗? |
|
|
板凳#
发布于:2004-12-17 13:47
关注一下
|
|
地板#
发布于:2004-12-17 17:42
你必须确保没有递归调用导致的内核堆栈溢出......
|
|
|
地下室#
发布于:2004-12-18 20:53
各位不信也是不行了,我把断点设在writelog的入口处但是显然没有进入,唯一的可能就是在其他地方产生了破坏queue的操作,我先在writelog加一个事件响应, ExQueueWorkItem(&workItem, CriticalWorkQueue);后面加个wait obj试一试,
|
|