DDK中对IRP_MJ_CREATE的描述

 

IRP_MJ_CREATE

 

参数:

文件系统驱动或者文件过滤驱动调用IoGetCurrentIrpStackLocation来得到属于自己的站单元指针,下文中表示为IrpSp,(IRP表示为Irp)下列信息是驱动程序在处理创建请求是可以使用的:

DeviceObject

设备对象指针

Irp->AssociatedIrp.SystemBuffer

指向一个FILE_FULL_EA_INFORMATION结构的缓冲,如果这个文件对象带有扩展属性。否则这个值为NULL

Irp->Flags

下列标志是这个请求可用的值:

IRP_CREATE_OPERATION

IRP_DEFER_IO_COMPLETION

IRP_SYNCHRONOUS_API

Irp->RequestorMode

指示请求操作的执行模式,KernelMode 或是 UserMode。注意如果设置了SL_FORCE_ACCESS_CHECK,必须执行访问检查,即使Irp->RequestorMode KernelMode

Irp->IoStatus

指向一个IO_STATUS_BLOCK结构,它接受请求操作最终的完成的statusInformation。文件系统将这个结构的Information值设为下列值中的一个:

FILE_CREATED

FILE_DOES_NOT_EXIST

FILE_EXISTS

FILE_OPENED

FILE_OVERWRITTEN

FILE_SUPERSEDED

Irp->Overlay.AllocationSize

文件初始化分配的大小,字节为单位。非零值不会产生影响,除非文件正在被创建、覆盖、取代(superseded)。

IrpSp->FileObject

指向一个IO管理器创建的用于表示一个被创建或打开的文件的文件对象。当文件系统处理IRP_MJ_CREATE请求时,它会设置FsContext可能会设置FsContext2为文件系统特定的值。所以FsContextFsContext2直到文件系统驱动处理完成之后才可用。更多信息参考File Streams, Stream Contexts, and Per-Stream Contexts.

FltCancelFileOpen IoCancelFileOpen会在文件对象的Flags域设置FO_FILE_OPEN_CANCELLED标志。设置这个标志表示IRP_MJ_CREATE请求已经被取消,并且会发出一个这个文件对象的IRP_MJ_CLOSE请求。一旦创建请求被取消,就不能重发。

IrpSp->FileObject参数包含一个RelatedFileObject指针,它也指向一个FILE_OBJECT结构。RelatedFileObject用于表示给定文件已经被打开,相对于一个已经打开的文件对象。这通常表示relative file是一个目录但是,stream-base文件可能会打开已经存在的流文件。(This usually indicates that the relative file is a directory but stream-based files may be opened relative to an already existing stream of a file.看不懂,貌似RelatedFileObject基本上都是目录。。。)RelatedFileObject只在处理IRP_MJ_CREATE时有效。

你可能感兴趣的:(ddk,file,stream,io,access,object)