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结构,它接受请求操作最终的完成的status和Information。文件系统将这个结构的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为文件系统特定的值。所以FsContext和FsContext2直到文件系统驱动处理完成之后才可用。更多信息参考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时有效。