pwpwpw123
驱动牛犊
驱动牛犊
  • 注册日期2004-01-26
  • 最后登录2007-08-20
  • 粉丝0
  • 关注0
  • 积分27分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1467回复:4

大家来找错,第一次用workitem就蓝屏了

楼主#
更多 发布于:2004-12-17 09:59
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]
emugine
驱动牛犊
驱动牛犊
  • 注册日期2002-03-05
  • 最后登录2006-03-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-12-17 11:23
没有执行writelog,但是writeNewlog执行完了

肯定是执行writelog出的问题,只能说明你的workItem出了问题,
而我看DDK帮助
ExInitializeWorkItem is exported to support existing driver binaries and is obsolete. Use IoAllocateWorkItem instead.

你明白了吗?

你有好的想法吗? 来,我们一起驱动它!
sean198148
驱动牛犊
驱动牛犊
  • 注册日期2003-01-22
  • 最后登录2014-10-08
  • 粉丝0
  • 关注0
  • 积分44分
  • 威望26点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-12-17 13:47
关注一下
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地板#
发布于:2004-12-17 17:42
你必须确保没有递归调用导致的内核堆栈溢出......
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
pwpwpw123
驱动牛犊
驱动牛犊
  • 注册日期2004-01-26
  • 最后登录2007-08-20
  • 粉丝0
  • 关注0
  • 积分27分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-12-18 20:53
各位不信也是不行了,我把断点设在writelog的入口处但是显然没有进入,唯一的可能就是在其他地方产生了破坏queue的操作,我先在writelog加一个事件响应, ExQueueWorkItem(&workItem, CriticalWorkQueue);后面加个wait obj试一试,
游客

返回顶部