//
// The following field is used for fast I/O. It contains the node
// type code and size, indicates if fast I/O is possible, contains
// allocation, file, and valid data size, a resource, and call back
// pointers for FastIoRead and FastMdlRead.
//
// The node type codes for the Scb must be either NTFS_NTC_SCB_INDEX,
// NTFS_NTC_SCB_ROOT_INDEX, or NTFS_NTC_SCB_DATA. Which one it is
// determines the state of the union below.
//
FSRTL_ADVANCED_FCB_HEADER Header;
//
// The links for the queue of Scb off of a given Fcb. And a pointer
// back to the Fcb. Corresponds to Fcb->ScbQueue
//
LIST_ENTRY FcbLinks; <-0x3C
PFCB Fcb; <-0x44
//
// A pointer to the Vcb containing this Scb
//
PVCB Vcb; <-0x48
//
// The internal state of the Scb.
//
ULONG ScbState;
//
// A count of the number of file objects opened on this stream
// which represent user non-cached handles. We use this count to
// determine when to flush and purge the data section in only
// non-cached handles remain on the file.
//
CLONG NonCachedCleanupCount;
//
// A count of the number of file objects that have been opened for
// this attribute, but not yet been cleaned up yet.
// This count gets decremented in NtfsCommonCleanup,
// while the CloseCount below gets decremented in NtfsCommonClose.
//
CLONG CleanupCount;
//
// A count of the number of file objects that have opened
// this attribute.
//
CLONG CloseCount;
//
// Share Access structure for this stream.
//
SHARE_ACCESS ShareAccess;
//
// The following two fields identify the actual attribute for this
// Scb with respect to its file. We identify the attribute by
// its type code and name.
//
//
// Stream File Object for internal use. This field is NULL if the
// file stream is not being accessed internally.
//
PFILE_OBJECT FileObject;
//
// These pointers are used to detect writes that eminated from the
// cache manager's worker thread. It prevents lazy writer threads,
// who already have the Fcb shared, from trying to acquire it
// exclusive, and thus causing a deadlock. We have to store two
// threads, because the second thread could be writing the compressed
// stream
//
PVOID LazyWriteThread[2];
//
// Pointer to the non-paged section objects and open attribute
// table index.
//
PSCB_NONPAGED NonpagedScb;
//
// The following field contains the mcb for this Scb and some initial
// structures for small and medium files.
//