ddkittt
驱动牛犊
驱动牛犊
  • 注册日期2004-10-28
  • 最后登录2018-01-07
  • 粉丝0
  • 关注0
  • 积分166分
  • 威望58点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1697回复:2

请问大虾,DriverUnload里如何通知线程退出,如下代码总报IRQL_NOT_LESS_OR_EQUAL

楼主#
更多 发布于:2007-04-23 17:28
LARGE_INTEGER interval;
HANDLE g_hThread;
KEVENT gLeaveEvent;

VOID
ThreadProc( PVOID pPara )
{
   NTSTATUS status;
   interval.QuadPart = -(10000*1000);
   KeInitializeEvent(&gLeaveEvent, NotificationEvent, FALSE);
   while(TRUE)
   {
       status = KeWaitForSingleObject(&gLeaveEvent, Executive, KernelMode, FALSE, &interval);
       if( status==STATUS_SUCCESS )
       {
           DbgPrint("gLeaveEvent is signaled\n");
           break;
       }
   }   
}

VOID
DriverUnload (
    IN PDRIVER_OBJECT DriverObject
    )
{    
    KeSetEvent(&gLeaveEvent, IO_NO_INCREMENT, FALSE);
    KeWaitForSingleObject(&g_hThread, Executive, KernelMode, FALSE, NULL);
}

NTSTATUS
DriverEntry (
    IN PDRIVER_OBJECT  DriverObject,
    IN PUNICODE_STRING RegistryPath
    )
{    
    DriverObject->DriverUnload = DriverUnload;
    PsCreateSystemThread(&g_hThread, (ACCESS_MASK)0, NULL, (HANDLE)0, NULL, ThreadProc, NULL);
    return STATUS_SUCCESS; 
}
jingjing1977
驱动牛犊
驱动牛犊
  • 注册日期2003-12-24
  • 最后登录2009-02-07
  • 粉丝0
  • 关注0
  • 积分157分
  • 威望16点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-04-29 21:24
KEVENT gLeaveEvent;这个变量应该放在NonPagedPool中,因为它是不允许出现PageFault的。
fanzi
驱动小牛
驱动小牛
  • 注册日期2004-12-09
  • 最后登录2013-12-19
  • 粉丝1
  • 关注0
  • 积分1004分
  • 威望754点
  • 贡献值0点
  • 好评度93点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-04-30 15:25
Re:请问大虾,DriverUnload里如何通知线程退出,如下代码总报IRQL_NOT_
放在全局就是分页内存?我是新手
张帆的内核学习论坛 http://bbs.kerneldev.com
游客

返回顶部