内核事件通知KeWaitForSingleObject

    xiaoxiao2021-03-25  121

    from:   http://blog.csdn.net/apxar/article/details/10865635 /*   使用事件同步,等待线程中的函数DbgPrint结束之后,外面生成线程的函数再返回。         */               #include <ntddk.h>         static KEVENT event;         VOID MyThread()//线程调用的函数   {               DbgPrint("Create Thread");         KeSetEvent(&event,0,TRUE);//事件能获取有信号状态         PsTerminateSystemThread(STATUS_SUCCESS);         }                     void DriverUnload( PDRIVER_OBJECT DriverObject)   {                     }   void  fun()   {                      HANDLE threadHandle=NULL;       NTSTATUS status;             //KeInitializeEvent() 事件初始化       //KeWaitForSingleObject()       //KeSetEvent()                   KeInitializeEvent(           &event,           SynchronizationEvent,//SynchronizationEvent为同步事件           FALSE//  当是TRUE 时初始化事件是有信号状态.,当是FALSE时初始化事件是没信号状态,如果此处为TRUE,则为有信号状态,KeWaitForSingleObject会直接通过,此时需要调用KeResetEvent来设置为无信号           );               //KeResetEvent(&event);//指定的事件对象设置为无信号状态。                         status=PsCreateSystemThread(  //创建线程           &threadHandle,           THREAD_ALL_ACCESS,           NULL,           NULL,           NULL,           MyThread,//调用的函数           NULL  //PVOID StartContext 传递给函数的参数           );              if(!NT_SUCCESS(status))                       return STATUS_UNSUCCESSFUL;                         //等待信号       KeWaitForSingleObject (            &event,//可以为 时间  信号,线程,时钟,互斥对象           Executive,//等待           KernelMode ,           FALSE,           0           );              DbgPrint("Create Thread has return");       ZwClose(threadHandle);   }               NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)   {                     DriverObject->DriverUnload = DriverUnload;             fun();              return STATUS_SUCCESS;   }  
    转载请注明原文地址: https://ju.6miu.com/read-5118.html

    最新回复(0)