阅读:1964回复:9
filemon中,怎么判断IRP_JM_CREATE是打开文件还是创建文件?
FilemonHookRoutine例程中,
case IRP_JM_CREAET: 中怎么判断该IRP_JM_CREATE是打开一个文件,还是创建一个文件,我想屏蔽掉打开文件 的日志,只想在创建文件或者目录的时候做日志。 我用IoSetCompletionRoutine设置一个完成例程来判断,可是老是重新启动。 谁帮我解决?顺便问一下,怎么才能给分? |
|
最新喜欢:![]() |
沙发#
发布于:2007-04-25 16:40
zhaock斑竹,如果我在写派遣例程中将所有IRP过滤掉,就不能创建文件了啊,这个冲突怎么解决
|
|
|
板凳#
发布于:2005-07-01 18:18
你看看sfilter代码就可以,你的代码明显有问题,如果IoCallDriver返回Pending,
这个irp就没有机会完成了,一直pending, |
|
地板#
发布于:2005-07-01 16:45
另外想问一下,删除某个文件是否触发IRP_MJ_CLEARUP例程,
为什么每次删掉一个文件,都会触发这么多次IRP_MJ_CLEARUP? 谢谢! |
|
地下室#
发布于:2005-07-01 16:42
to zhaock:
刚刚试过啦,单独的在case IRP_MJ_CREATE做判断是达不到目的的, 能够给我提供一个例程的例子吗? 我的例程: RtlCopyMemory(NextIrpStack, CurrentIrpStack, sizeof(IO_STACK_LOCATION)); KeInitializeEvent(&Event, NotificationEvent, FALSE); IoSetCompletionRoutine(Irp,&OurCloseCompletion,&Event,TRUE,TRUE,T RUE); IoMarkIrpPending(Irp); status = IoCallDriver(Extension->FilteredDeviceObject, Irp); if (status != STATUS_PENDING) { if (KeReadStateEvent(&Event) == 0) { IoCompleteRequest(Irp, IO_NO_INCREMENT); } } else { KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, 0); } if(Irp->IoStatus.Information==FILE_CREATED) { Log("file create success!"); } return STATUS_PENDING; OurCloseCompletion(PDEVICE_OBJECT Device Object, PIRP Irp, PVOID Context) { Event = (PKEVENT)Context; KeSetEvent(Event, 0, FALSE); return STATUS_MORE_PROCESSING_REQUIRED; } 不过系统会重启,有时候还会阻塞! 帮我看看以上的代码! |
|
5楼#
发布于:2005-07-01 16:15
对于FILE_OPEN_IF,FILE_OVERWRITE_IF就要在完成里判断了
|
|
6楼#
发布于:2005-07-01 16:05
TO zhaock :
Options = IrpSp->Parameters.Create.Options; CreateDisposition = (Options >> 24) & 0x000000ff; 难道仅仅判断 if( CreateDisposition == FILE_CREATE )//表示是文件创建, if( CreateDisposition == FILE_OPEN )//表示是文件打开吗? 这样判断就行啦? |
|
7楼#
发布于:2005-07-01 16:00
在case IRP_MJ_CREATE处理就可以
|
|
8楼#
发布于:2005-07-01 15:56
to zhaock :
关键是在那里判断,是不是要加完成例程? 在case IRP_MJ_CREATE:中加上 Options = IrpSp->Parameters.Create.Options; CreateDisposition = (Options >> 24) & 0x000000ff; 吗? |
|
9楼#
发布于:2005-07-01 15:51
Options = IrpSp->Parameters.Create.Options;
CreateDisposition = (Options >> 24) & 0x000000ff; 然后去看ddk的帮助ZwCreateFile,参数CreateDisposition的取值,FILE_CREATE ,FILE_OPEN等等 |
|