描述:
            我要将FileMon用于我的监控程序中,但它有个问题,当读写操作太过频繁,用户程序来不及读,它的监视记录缓冲区满后,很多记录会被丢掉。为了解决这个问题,我在LogRecord加了以下代码,但是程序死在KeWaitForSingleObject()处了。
LogRecord(...)
{
    ...
    if( passedFilters ) 
    {
        if( MaxLog-1 == NumLog )//记录满了,等待,//添加的
        {
            bLogFull = TRUE;
            KeResetEvent( &LogFullEvent );
            KeWaitForSingleObject( &LogFullEvent, Executive, KernelMode, FALSE, NULL );
        }
        // 
        // Lock the output buffer and Log.
        // 
        ExAcquireFastMutex( &LogMutex );
        ...
        ExReleaseFastMutex( &LogMutex );
    }
}
在用户程序读监视记录的函数中
FilemonFastIoDeviceControl(...)
{
    ...
    case IOCTL_FILEMON_GETSTATS:
        ExAcquireFastMutex( &LogMutex ); 
        ... //将监视记录复制到用户缓冲区
        ExReleaseFastMutex( &LogMutex );
        if( bLogFull ) //添加的
        {
            KeSetEvent( &LogFullEvent, 0, FALSE );
            bLogFull = FALSE;
        }
}

