阅读:1285回复:3
在Create中能否判断出当前的create是打开目录还是删除目录动作
在Create中能否判断出当前的create是打开目录还是删除目录动作
|
|
|
驱动小牛
|
沙发#
发布于:2007-06-21 13:02
CREATE里面唯一能判断可能就是DELETEONCLOSE.其他情况无法判断
|
|
板凳#
发布于:2007-06-23 14:28
在option里面好象可以判断创建前的操作,你仔细看一看。
|
|
地板#
发布于:2007-06-23 16:30
这些参数组合调试一下试试看
ULONG Options; ULONG CreateDisposition; BOOLEAN OpenDirectory; BOOLEAN OpenTargetDirectory; BOOLEAN CreateDirectory; BOOLEAN SequentialOnly; BOOLEAN NoIntermediateBuffering; BOOLEAN IsPagingFile; BOOLEAN DirectoryFile; BOOLEAN NonDirectoryFile; BOOLEAN NoEaKnowledge; BOOLEAN TemporaryFile; BOOLEAN CaseSensitive; PFILESPY_DEVICE_EXTENSION DevExt = (PFILESPY_DEVICE_EXTENSION) DeviceObject->DeviceExtension; PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); BOOLEAN DeleteOnClose = (BOOLEAN) (IrpSp->Parameters.Create.Options & FILE_DELETE_ON_CLOSE); DirectoryFile = IsFlagOn(Options, FILE_DIRECTORY_FILE); OpenTargetDirectory = IsFlagOn(IrpSp->Flags, SL_OPEN_TARGET_DIRECTORY); NonDirectoryFile = IsFlagOn(Options, FILE_NON_DIRECTORY_FILE); SequentialOnly = IsFlagOn(Options, FILE_SEQUENTIAL_ONLY); NoIntermediateBuffering = IsFlagOn(Options, FILE_NO_INTERMEDIATE_BUFFERING); CreateDisposition = (Options >> 24) & 0x000000ff; IsPagingFile = IsFlagOn(IrpSp->Flags, SL_OPEN_PAGING_FILE); CreateDirectory = (BOOLEAN)(DirectoryFile && ((CreateDisposition == FILE_CREATE) || (CreateDisposition == FILE_OPEN_IF))); OpenDirectory = (BOOLEAN)(DirectoryFile && ((CreateDisposition == FILE_OPEN) || (CreateDisposition == FILE_OPEN_IF))); |
|