描述:
我要将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;
}
}