PFILE_OBJECT

ypedef struct _FILE_OBJECT {
     CSHORT  Type;
     CSHORT  Size;
     PDEVICE_OBJECT  DeviceObject;
     PVPB  Vpb;
     PVOID  FsContext;
     PVOID  FsContext2;
     PSECTION_OBJECT_POINTERS  SectionObjectPointer;
     PVOID  PrivateCacheMap;
     NTSTATUS  FinalStatus;
     struct _FILE_OBJECT   *RelatedFileObject;
     BOOLEAN  LockOperation;
     BOOLEAN  DeletePending;
     BOOLEAN  ReadAccess;
     BOOLEAN  WriteAccess;
     BOOLEAN  DeleteAccess;
     BOOLEAN  SharedRead;
     BOOLEAN  SharedWrite;
     BOOLEAN  SharedDelete;
     ULONG  Flags;
     UNICODE_STRING  FileName;
     LARGE_INTEGER  CurrentByteOffset;
     ULONG  Waiters;
     ULONG  Busy;
     PVOID  LastLock;
     KEVENT  Lock;
     KEVENT  Event;
     PIO_COMPLETION_CONTEXT  CompletionContext;
     KSPIN_LOCK  IrpListLock;
     LIST_ENTRY  IrpList;
     PVOID  FileObjectExtension;
} FILE_OBJECT, *PFILE_OBJECT;

 

Type:一个只读成员,被系统用于标识这是一个文件对象,如果对象是一个文件对象,那么它的值就是5.

 

Size:一个只读成员,标识文件对象的大小(比特),如果扩展部分存在的话,这个大小不包括文件对象的扩展部分。

 

DeviceObject:指向设备对象,文件在该设备对象上打开。

 

Vpb:指向同文件对象关联的卷参数块,如果Vpb成员非空,便标识文件存在一个被挂载的卷上。

FsContext:指向任何驱动程序维护的文件对象可选状态的指针,否则为空。对文件系统驱动程序,这个成员必须指向一个叫做的头结构,它包含一个文件系统特殊结构,否则可能会导致系统不稳定,通常,这个头结构包含在FCB中。然而,在一些支持多数据流的文件系统,例如NTFS,这个头结构是流控制块(SCB)。

注意:在WDM设备栈中,只有功能设备对象能用两个上下文指针,文件系统驱动程序通过打开多个相同的数据流共享这个成员。

 

FsContext2:一个指向驱动程序维护的文件对象的任何其他状态,否则为空。

注意:这个成员对文件系统栈的驱动程序是不透明的,因为底层文件系统使用此成员。

 

SectionObjectPointer:指向文件对象的只读区域对象。这个成员被设置成只能被文件系统用作与缓存管理器交互。

 

PrivateCacheMap:一个不透明成员,只能被文件系统设置。它指向处理特殊信息,被用作与缓存管理器的交互。

 

FinalStatus:一个只读成员,被用作某些特定的同步事件中,标识文件对象IO请求的最终状态

 

RelatedFileObject:一个指向FILE_OBJECT结构的指针,用作标识当前文件对象已经打开相对于一个已经打开的文件对象。这个文件对象通常通过这个成员指向一个目录(表示当前文件已经被打开相对于这个目录)。然而,一个文件能够重新打开相对于它本身,一个文件的分支数据流能够被打开相对于已经打开的同一文件的主数据流。RelatedFileObject成员只在IRP_MJ_CREATE请求例程有效。

 

LockOperation:一个只读成员。如果为FALSE,一个锁操作(NtLockFile)从来没有执行在文件对象上。如果是真,至少有一个锁操作执行在文件对象上。一旦设置成TRUE,这个成员总是保持TRUE(例如,释放文件对象上文件锁不会将这个成员设置成FALSE)。

 

DeletePending:一个只读成员。如果是TRUE,一个文件的删除操作同文件对象的存在关联。如果是FALSE,当前没有待删除的文件对象操作。

 

ReadAccess:一个只读成员,如果是TRUE,与文件相关联的文件对象已经被用作读操作打开,如果是FALSE,文件没有被用作读操作打开,这个信息被用作核查或者设置文件的共享操作。

 

WriteAccess:一个只读成员,如果是TRUE,与文件相关联的文件对象已经被用作写操作打开,如果是FALSE,文件没有被用作写操作打开,这个信息被用作核查或者设置文件的共享操作。

 

DeleteAccess:一个只读成员。如果是TRUE,与文件相关联的文件对象已经被用作删除操作打开,如果是FALSE,文件没有被用作删除操作打开,这个信息被用作核查或者设置文件的共享操作

 

【转】https://blog.csdn.net/wangpengk7788/article/details/9807975

上一篇:mven pom.xml Overriding managed version 问题解决详解


下一篇:屏幕在C#中刮擦大型机屏幕*没有*第三方实用程序