能力值:
( LV2,RANK:10 )
|
-
-
2 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
还有我已经将驱动unload了,怎么还是有保护。。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
你在处理CREATE_NEW操作时,SHELL收到的失败后会再次尝试创建。哥们你是否在PostCreate处拦截的啊?
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
没啊,我没用minifilter,也没在完成历程中拦截啊,不过我确实是在等待完成历程完成后拦截
|
能力值:
( LV13,RANK:260 )
|
-
-
6 楼
说得话自相矛盾啊,哥们..... ps:要解决问题,首先要别人能明确问题,贴你认为别人能可以看的码....这样也不用 都在这猜测..
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
其实也没,我不知道在等待完成例程完成后是不是就是在postcreate里面,新手不懂啊
if (FlagOn( SfDebug, SFDEBUG_DISPLAY_CREATE_NAMES |
SFDEBUG_DO_CREATE_COMPLETION ) &&
!FlagOn(devExt->Flags,SFDEVFL_DISABLE_VOLUME))
{
KEVENT waitEvent;
KeInitializeEvent( &waitEvent, NotificationEvent, FALSE );
IoCopyCurrentIrpStackLocationToNext( Irp );
IoSetCompletionRoutine(
Irp,
SfCreateCompletion,
&waitEvent,
TRUE,
TRUE,
TRUE );
status = IoCallDriver( devExt->NLExtHeader.AttachedToDeviceObject, Irp );
if (STATUS_PENDING == status) {
NTSTATUS localStatus = KeWaitForSingleObject( &waitEvent,
Executive,
KernelMode,
FALSE,
NULL );
ASSERT(STATUS_SUCCESS == localStatus);
}
ASSERT(KeReadStateEvent(&waitEvent) ||
!NT_SUCCESS(Irp->IoStatus.Status));
if (fileName != NULL)
{
RtlInitUnicodeString(&filter_string,PROTECTED);
CreateOptions = ((irpSp->Parameters.Create.Options>>24)&0x000000ff);
if (CreateOptions == FILE_CREATE || CreateOptions == FILE_OPEN_IF ||
CreateOptions == FILE_OVERWRITE || CreateOptions == FILE_OVERWRITE_IF/*||CreateOptions == FILE_SUPERSEDE*/)
{
SF_LOG_PRINT( SFDEBUG_DISPLAY_CREATE_NAMES,
("SFilter!SfCreate: OPENED fo=%p %08x:%08x %wZ\n",
irpSp->FileObject,
Irp->IoStatus.Status,
Irp->IoStatus.Information,
&fileName->Name) );
if (wcsstr(fileName->Name.Buffer,filter_string.Buffer))
{
KdPrint(("SFilter!SfCreate: hollyshit !\n"));
Irp->IoStatus.Status = STATUS_ACCESS_DENIED;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_ACCESS_DENIED;
}
NLFreeNameControl( fileName, &gSfNameBufferLookasideList );
}
status = Irp->IoStatus.Status;
IoCompleteRequest( Irp, IO_NO_INCREMENT );
return status;
}
其实我这里就没加几行代码
|
能力值:
( LV13,RANK:260 )
|
-
-
8 楼
你这个时候都打开创建了,你如果禁止 就得 cancel open
ps:IoCancelFileOpen
具体应该参考 wdk 下的 取消源码 ,然后 就是 denied_access 返回给 管理器
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
将代码移到IoCallDriver之前,确实解决了创建1000个文件的问题~~
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
嗯,多谢提点,我研究下IoCancelFileOpen
|
能力值:
( LV13,RANK:260 )
|
-
-
11 楼
做拦截 和可以在 pre create 操作 ,不严格的话 在完成之前 操作即可,这个时候就不用 取消创建 ...
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
那什么时候需要取消创建呢
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
听句劝,,那个IoCancelFileOpen 函数极度危险。尽量别用。
|
|
|