23#define BugCheckFileId (FAT_BUG_CHECK_STRUCSUP)
29#define Dbg (DEBUG_TRACE_STRUCSUP)
31#define FillMemory(BUF,SIZ,MASK) { \
33 for (i = 0; i < (((SIZ)/4) - 1); i += 2) { \
34 ((PULONG)(BUF))[i] = (MASK); \
35 ((PULONG)(BUF))[i+1] = (ULONG)PsGetCurrentThread(); \
39#define IRP_CONTEXT_HEADER (sizeof( IRP_CONTEXT ) * 0x10000 + FAT_NTC_IRP_CONTEXT)
52#define FAT_FILL_FREE 0
198#pragma alloc_text(PAGE, FatInitializeVcb)
199#pragma alloc_text(PAGE, FatTearDownVcb)
200#pragma alloc_text(PAGE, FatDeleteVcb)
201#pragma alloc_text(PAGE, FatCreateRootDcb)
202#pragma alloc_text(PAGE, FatCreateFcb)
203#pragma alloc_text(PAGE, FatCreateDcb)
204#pragma alloc_text(PAGE, FatDeleteFcb)
205#pragma alloc_text(PAGE, FatCreateCcb)
206#pragma alloc_text(PAGE, FatDeallocateCcbStrings)
207#pragma alloc_text(PAGE, FatDeleteCcb)
208#pragma alloc_text(PAGE, FatGetNextFcbTopDown)
209#pragma alloc_text(PAGE, FatGetNextFcbBottomUp)
210#pragma alloc_text(PAGE, FatConstructNamesInFcb)
211#pragma alloc_text(PAGE, FatCheckFreeDirentBitmap)
212#pragma alloc_text(PAGE, FatCreateIrpContext)
213#pragma alloc_text(PAGE, FatDeleteIrpContext_Real)
214#pragma alloc_text(PAGE, FatIsHandleCountZero)
215#pragma alloc_text(PAGE, FatAllocateCloseContext)
216#pragma alloc_text(PAGE, FatPreallocateCloseContext)
217#pragma alloc_text(PAGE, FatEnsureStringBufferEnough)
218#pragma alloc_text(PAGE, FatFreeStringBuffer)
219#pragma alloc_text(PAGE, FatScanForDataTrack)
301 Vcb->VolumeFileHeader.NodeByteSize =
sizeof(
VCB);
317#pragma prefast( push )
318#pragma prefast( disable: 28137, "prefast wants the wait to be a constant, but that isn't possible for the way fastfat is designed" )
319#pragma prefast( disable: 28193, "this will always wait" )
325#pragma prefast( pop )
330 UnwindEntryList = &
Vcb->VcbLinks;
341 Vcb->CurrentDevice =
Vpb->RealDevice;
436 sizeof(StorDeviceNumber),
457 UnwindResource = &
Vcb->Resource;
460 UnwindResource2 = &
Vcb->ChangeBitMapResource;
476 RealDevice =
Vcb->CurrentDevice;
479 CloseContextAllocated =
TRUE;
495 Vcb->VirtualVolumeFile->SectionObjectPointer = &
Vcb->SectionObjectPointers;
497 Vcb->VirtualVolumeFile->ReadAccess =
TRUE;
498 Vcb->VirtualVolumeFile->WriteAccess =
TRUE;
499 Vcb->VirtualVolumeFile->DeleteAccess =
TRUE;
525 UnwindCacheMap =
Vcb->VirtualVolumeFile;
535 UnwindWeAllocatedMcb =
TRUE;
544 UnwindWeAllocatedBadBlockMap =
TRUE;
550 Vcb->ClusterHint = 2;
574 UnwindStatistics =
Vcb->Statistics;
580 Vcb->Statistics[
i].Common.Version = 1;
581 Vcb->Statistics[
i].Common.SizeOfCompleteStructure =
608 FsRtlSetupAdvancedHeader( &
Vcb->VolumeFileHeader,
609 &
Vcb->AdvancedFcbHeaderMutex );
616 IrpContext->Vcb =
Vcb;
634 if (UnwindEntryList !=
NULL) {
636#pragma prefast( suppress: 28137, "prefast wants the wait to be a constant, but that isn't possible for the way fastfat is designed" )
648 if (CloseContextAllocated && (
Vcb->VirtualVolumeFile ==
NULL)) {
666 CloseContextAllocated =
FALSE;
717 if (
Vcb->VirtualVolumeFile !=
NULL) {
746 DirectoryFileObject =
Vcb->RootDcb->Specific.Dcb.DirectoryFile;
748 if (DirectoryFileObject !=
NULL) {
758 Vcb->RootDcb->Specific.Dcb.DirectoryFile =
NULL;
807 if (IrpContext->Vcb ==
Vcb) {
809 IrpContext->Vcb =
NULL;
836 if (
Vcb->VolumeGuidPath.Buffer) {
838 Vcb->VolumeGuidPath.Buffer =
NULL;
854 if ((
Vcb->DirectAccessOpenCount != 0) || (
Vcb->OpenFileCount != 0)) {
857#pragma prefast( suppress:28159, "things are seriously wrong if we get here" )
869 Vcb->EaFcb->OpenCount = 0;
915 if (
Vcb->FreeClusterBitMap.Buffer !=
NULL) {
936 if (
Vcb->First0x24BytesOfBootSector ) {
939 Vcb->First0x24BytesOfBootSector =
NULL;
1042 DebugDump(
"Error trying to create multiple root dcbs\n", 0,
Vcb);
1044#pragma prefast( suppress:28159, "things are seriously wrong if we get here" )
1070 Dcb->Header.NodeByteSize =
sizeof(
DCB);
1121 Dcb->FullFileName.MaximumLength = (
USHORT)4;
1125 Dcb->ShortName.Name.Oem.MaximumLength = (
USHORT)2;
1139 FsRtlSetupAdvancedHeader( &
Dcb->Header,
1140 &
Dcb->NonPaged->AdvancedFcbHeaderMutex );
1148 UnwindMcb = &
Dcb->Mcb;
1156 Dcb->FirstClusterOfFile =
Vcb->Bpb.RootDirFirstCluster;
1174 Dcb->Header.AllocationSize.LowPart = 0xFFFFFFFF;
1175 FatLookupFileAllocationSize( IrpContext,
Dcb);
1177 Dcb->Header.FileSize.QuadPart =
1178 Dcb->Header.AllocationSize.QuadPart;
1185 Dcb->Header.FileSize.QuadPart =
1195 Dcb->Specific.Dcb.UnusedDirentVbo = 0xffffffff;
1196 Dcb->Specific.Dcb.DeletedDirentHint = 0xffffffff;
1206 FatCheckFreeDirentBitmap( IrpContext,
Dcb );
1208#if (NTDDI_VERSION >= NTDDI_WIN8)
1233 for (
i = 0;
i <
sizeof(UnwindStorage)/
sizeof(
PVOID);
i += 1) {
1256 IN ULONG LfnOffsetWithinDirectory,
1257 IN ULONG DirentOffsetWithinDirectory,
1394 if (SingleResource) {
1462 &FatSystemJanOne1980 );
1473 Dirent->LastAccessDate );
1543 Fcb->
Header.AllocationSize.QuadPart = 0;
1606 for (
i = 0;
i <
sizeof(UnwindStorage)/
sizeof(
PVOID);
i += 1) {
1627 IN ULONG LfnOffsetWithinDirectory,
1628 IN ULONG DirentOffsetWithinDirectory,
1711 Dcb->Header.NodeByteSize =
sizeof(
DCB);
1748 &
Dcb->ParentDcbLinks );
1749 UnwindEntryList = &
Dcb->ParentDcbLinks;
1767 Dcb->LfnOffsetWithinDirectory = LfnOffsetWithinDirectory;
1768 Dcb->DirentOffsetWithinDirectory = DirentOffsetWithinDirectory;
1774 Dcb->DirentFatFlags =
Dirent->Attributes;
1796 &FatSystemJanOne1980 );
1805 Dcb->LastAccessTime =
1807 Dirent->LastAccessDate );
1811 Dcb->LastAccessTime = FatSystemJanOne1980;
1827 Dcb->CreationTime = FatSystemJanOne1980;
1836 FsRtlSetupAdvancedHeader( &
Dcb->Header,
1837 &
Dcb->NonPaged->AdvancedFcbHeaderMutex );
1844 UnwindMcb = &
Dcb->Mcb;
1855 Dcb->FirstClusterOfFile +=
Dirent->FirstClusterOfFileHi << 16;
1858 if (
Dcb->FirstClusterOfFile == 0 ) {
1860 Dcb->Header.AllocationSize.QuadPart = 0;
1887 Dcb->Specific.Dcb.UnusedDirentVbo = 0xffffffff;
1888 Dcb->Specific.Dcb.DeletedDirentHint = 0xffffffff;
1890#if (NTDDI_VERSION >= NTDDI_WIN8)
1913 Dcb->ShortName.FileNameDos =
TRUE;
1933 for (
i = 0;
i <
sizeof(UnwindStorage)/
sizeof(
PVOID);
i += 1) {
1990#pragma prefast( suppress:28159, "things are seriously wrong if we get here" )
2004#pragma prefast( suppress:28159, "things are seriously wrong if we get here" )
2028#if (NTDDI_VERSION >= NTDDI_WIN8)
2110#ifdef SYSCACHE_COMPILE
2112 if (
Fcb->WriteMask) {
2193 Ccb->NodeByteSize =
sizeof(
CCB);
2388 IrpContext->OriginatingIrp =
Irp;
2408 IrpContext->RealDevice =
FileObject->DeviceObject;
2453 DebugTrace(-1,
Dbg,
"FatCreateIrpContext -> %p\n", IrpContext);
2486 DebugTrace(+1,
Dbg,
"FatDeleteIrpContext, IrpContext = %p\n", IrpContext);
2496 if (IrpContext->FatIoContext !=
NULL) {
2500 if (IrpContext->FatIoContext->ZeroMdl) {
2501 IoFreeMdl( IrpContext->FatIoContext->ZeroMdl );
2589 if (
Fcb == TerminationFcb) {
2604 if (NextFcb ==
NULL) {
2611 NextFcb = TerminationFcb;
2693 if (
Fcb == TerminationFcb ) {
2707 if ( Sibling !=
NULL ) {
2709 return (Sibling != TerminationFcb) ? Sibling :
NULL;
2770#pragma prefast( push )
2771#pragma prefast( disable: 28175, "touching Vpb is ok for a filesystem" )
2786 Vcb->SwapVpb->Size =
sizeof(
VPB );
2789 Vcb->SwapVpb->RealDevice->Vpb =
Vcb->SwapVpb;
2823#pragma prefast( pop )
2845FatCheckForDismount (
2897 if (
Vcb->Vpb->ReferenceCount ==
Vcb->ResidualOpenCount &&
Vcb->OpenFileCount == 0) {
2908 VolumeLabel.
Length =
Vcb->Vpb->VolumeLabelLength;
2910 VolumeLabel.
Buffer = &
Vcb->Vpb->VolumeLabel[0];
2914 "FASTFAT: Dismounting Volume %Z\n",
2974 if (
Vcb->Vpb->ReferenceCount == 0 &&
Vcb->InternalOpenCount == 0) {
3229#pragma warning( push )
3230#pragma warning( disable:4244 )
3238#pragma warning( pop )
3487FatCheckFreeDirentBitmap (
3511 ULONG OldNumberOfDirents;
3512 ULONG NewNumberOfDirents;
3523 OldNumberOfDirents =
Dcb->Specific.Dcb.FreeDirentBitmap.SizeOfBitMap;
3524 NewNumberOfDirents =
Dcb->Header.AllocationSize.LowPart /
sizeof(
DIRENT);
3530 if (NewNumberOfDirents > OldNumberOfDirents) {
3539 ULONG BytesInBitmapBuffer;
3540 ULONG BytesInOldBitmapBuffer;
3542 OldNumberOfDirents =
Dcb->Specific.Dcb.FreeDirentBitmap.SizeOfBitMap;
3543 NewNumberOfDirents =
Dcb->Header.AllocationSize.LowPart /
sizeof(
DIRENT);
3545 if (NewNumberOfDirents > OldNumberOfDirents) {
3551 OldBitmapBuffer =
Dcb->Specific.Dcb.FreeDirentBitmap.
Buffer;
3557 BytesInBitmapBuffer = NewNumberOfDirents / 8;
3559 BytesInOldBitmapBuffer = OldNumberOfDirents / 8;
3568 BytesInBitmapBuffer,
3578 if ((OldNumberOfDirents != 0) &&
3583 BytesInOldBitmapBuffer );
3585 if (OldBitmapBuffer != &
Dcb->Specific.Dcb.FreeDirentBitmapBuffer[0]) {
3591 NT_ASSERT( BytesInBitmapBuffer > BytesInOldBitmapBuffer );
3594 BytesInBitmapBuffer - BytesInOldBitmapBuffer );
3602 NewNumberOfDirents );
3861 ULONG LocalTrackCount;
3862 ULONG LocalTocLength;
3924 if ((LocalTocLength >
Iosb.Information) ||
3926 (LocalTrackCount != 1)) {
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
static CC_FILE_SIZES FileSizes
#define InterlockedIncrement
#define InterlockedDecrement
_In_ PFCB _In_ PDIRENT_ENUM_CONTEXT _Inout_ PDIRENT Dirent
_Inout_ PVCB _In_ BOOLEAN Force
_Inout_ PFILE_OBJECT _In_ TYPE_OF_OPEN PFCB _In_opt_ PCCB Ccb
_Acquires_exclusive_lock_ Resource _Acquires_shared_lock_ Resource _Inout_ PERESOURCE Resource
#define PtrOffset(BASE, OFFSET)
#define IRP_CONTEXT_FLAG_WAIT
VOLUME_DEVICE_OBJECT * PVOLUME_DEVICE_OBJECT
#define _Requires_lock_held_(lock)
#define RtlInitializeBitMap
#define NT_SUCCESS(StatCode)
VOID NTAPI KeInitializeDpc(IN PKDPC Dpc, IN PKDEFERRED_ROUTINE DeferredRoutine, IN PVOID DeferredContext)
BOOLEAN NTAPI KeRemoveQueueDpc(IN PKDPC Dpc)
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB _In_ PDIRENT _In_ ULONG _In_ ULONG _In_ PUNICODE_STRING Lfn
_In_ PIO_STACK_LOCATION IrpSp
FatSetFileObject(FileObject, UserDirectoryOpen,(*Dcb), UnwindCcb=FatCreateCcb(IrpContext))
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB ParentDcb
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB * Dcb
#define FAT_DIRENT_NT_BYTE_8_LOWER_CASE
#define FatRootDirectoryLbo(B)
struct _PACKED_BOOT_SECTOR PACKED_BOOT_SECTOR
#define FAT_DIRENT_NT_BYTE_3_LOWER_CASE
#define FatRootDirectorySize(B)
#define TAG_FAT_CLOSE_CONTEXT
#define FatBugCheck(A, B, C)
#define TAG_DIRENT_BITMAP
#define TAG_DYNAMIC_NAME_BUFFER
#define TAG_FILENAME_BUFFER
#define FAT_NTC_IRP_CONTEXT
#define ExLocalTimeToSystemTime(LocTime, SysTime)
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
#define InsertHeadList(ListHead, Entry)
#define IsListEmpty(ListHead)
NTSTATUS ExInitializeResourceLite(PULONG res)
NTSTATUS RtlUpcaseUnicodeString(PUNICODE_STRING dst, PUNICODE_STRING src, BOOLEAN Alloc)
#define ExDeleteResourceLite(res)
#define InitializeListHead(ListHead)
#define ClearFlag(_F, _SF)
#define IRP_CONTEXT_FLAG_WRITE_THROUGH
#define IRP_CONTEXT_STACK_IO_CONTEXT
#define BooleanFlagOn(F, SF)
VOID FatTearDownAllocationSupport(IN PIRP_CONTEXT IrpContext, IN PVCB Vcb)
VOID FatCloseEaFile(IN PIRP_CONTEXT IrpContext, IN PVCB Vcb, IN BOOLEAN FlushFirst)
VOID FatInitializeCacheMap(_In_ PFILE_OBJECT FileObject, _In_ PCC_FILE_SIZES FileSizes, _In_ BOOLEAN PinAccess, _In_ PCACHE_MANAGER_CALLBACKS Callbacks, _In_ PVOID LazyWriteContext)
VOID FatSyncUninitializeCacheMap(IN PIRP_CONTEXT IrpContext, IN PFILE_OBJECT FileObject)
NTSTATUS FatToggleMediaEjectDisable(IN PIRP_CONTEXT IrpContext, IN PVCB Vcb, IN BOOLEAN PreventRemoval)
NTSTATUS FatPerformDevIoCtrl(IN PIRP_CONTEXT IrpContext, IN ULONG IoControlCode, IN PDEVICE_OBJECT Device, IN PVOID InputBuffer OPTIONAL, IN ULONG InputBufferLength, OUT PVOID OutputBuffer OPTIONAL, IN ULONG OutputBufferLength, IN BOOLEAN InternalDeviceIoControl, IN BOOLEAN OverrideVerify, OUT PIO_STATUS_BLOCK Iosb OPTIONAL)
VOID FatPreallocateCloseContext(PVCB Vcb)
INLINE VOID FatFreeIrpContext(IN PIRP_CONTEXT IrpContext)
PFCB FatGetNextFcbTopDown(IN PIRP_CONTEXT IrpContext, IN PFCB Fcb, IN PFCB TerminationFcb)
VOID FatDeleteCcb(IN PIRP_CONTEXT IrpContext, IN PCCB *Ccb)
INLINE PIRP_CONTEXT FatAllocateIrpContext()
VOID FatDeleteVcb(IN PIRP_CONTEXT IrpContext, IN PVCB Vcb)
INLINE PFCB FatAllocateFcb()
BOOLEAN FatSwapVpb(IN PIRP_CONTEXT IrpContext, PVCB Vcb)
PFCB FatCreateFcb(IN PIRP_CONTEXT IrpContext, IN PVCB Vcb, IN PDCB ParentDcb, IN ULONG LfnOffsetWithinDirectory, IN ULONG DirentOffsetWithinDirectory, IN PDIRENT Dirent, IN PUNICODE_STRING Lfn OPTIONAL, IN PUNICODE_STRING OrigLfn OPTIONAL, IN BOOLEAN IsPagingFile, IN BOOLEAN SingleResource)
VOID FatConstructNamesInFcb(IN PIRP_CONTEXT IrpContext, PFCB Fcb, PDIRENT Dirent, PUNICODE_STRING Lfn OPTIONAL)
PCLOSE_CONTEXT FatAllocateCloseContext(OPTIONAL PVCB Vcb)
VOID FatDeleteIrpContext_Real(IN PIRP_CONTEXT IrpContext)
VOID FatDeallocateCcbStrings(IN PCCB Ccb)
VOID FatEnsureStringBufferEnough(_Inout_ PVOID String, _In_ USHORT DesiredBufferSize)
INLINE PCCB FatAllocateCcb()
BOOLEAN FatIsHandleCountZero(IN PIRP_CONTEXT IrpContext, IN PVCB Vcb)
INLINE PERESOURCE FatAllocateResource()
VOID FatDeleteFcb(IN PIRP_CONTEXT IrpContext, IN PFCB *FcbPtr)
INLINE VOID FatFreeCcb(IN PCCB Ccb)
PCCB FatCreateCcb(IN PIRP_CONTEXT IrpContext)
INLINE VOID FatFreeFcb(IN PFCB Fcb)
PDCB FatCreateDcb(IN PIRP_CONTEXT IrpContext, IN PVCB Vcb, IN PDCB ParentDcb, IN ULONG LfnOffsetWithinDirectory, IN ULONG DirentOffsetWithinDirectory, IN PDIRENT Dirent, IN PUNICODE_STRING Lfn OPTIONAL)
BOOLEAN FatScanForDataTrack(IN PIRP_CONTEXT IrpContext, IN PDEVICE_OBJECT TargetDeviceObject)
VOID FatFreeStringBuffer(_Inout_ PVOID String)
INLINE VOID FatFreeResource(IN PERESOURCE Resource)
PFCB FatGetNextFcbBottomUp(IN PIRP_CONTEXT IrpContext, IN PFCB Fcb OPTIONAL, IN PFCB TerminationFcb)
INLINE VOID FatFreeNonPagedFcb(PNON_PAGED_FCB NonPagedFcb)
VOID FatTearDownVcb(IN PIRP_CONTEXT IrpContext, IN PVCB Vcb)
PIRP_CONTEXT FatCreateIrpContext(IN PIRP Irp, IN BOOLEAN Wait)
INLINE PNON_PAGED_FCB FatAllocateNonPagedFcb()
NPAGED_LOOKASIDE_LIST FatNonPagedFcbLookasideList
LARGE_INTEGER FatJanOne1980
SLIST_HEADER FatCloseContextSList
LARGE_INTEGER FatMaxLarge
LARGE_INTEGER FatLargeZero
NPAGED_LOOKASIDE_LIST FatIrpContextLookasideList
NPAGED_LOOKASIDE_LIST FatEResourceLookasideList
#define DebugDump(STR, LEVEL, PTR)
#define DebugTrace(INDENT, LEVEL, X, Y)
#define FatGetNextSibling(FILE)
#define FatVcbAcquiredExclusive(IRPCONTEXT, VCB)
IN OUT PVCB IN PDEVICE_OBJECT TargetDeviceObject
VOID FatInsertName(IN PIRP_CONTEXT IrpContext, IN PRTL_SPLAY_LINKS *RootNode, IN PFILE_NAME_NODE Name)
#define FatAcquireExclusiveGlobal(IRPCONTEXT)
#define IsFileWriteThrough(FO, VCB)
#define FatAcquireDirectoryFileMutex(VCB)
#define FatReleaseGlobal(IRPCONTEXT)
#define FatSetVcbCondition(V, X)
PFCB FatFindFcb(IN PIRP_CONTEXT IrpContext, IN OUT PRTL_SPLAY_LINKS *RootNode, IN PSTRING Name, OUT PBOOLEAN FileNameDos OPTIONAL)
#define FatDeviceIsFatFsdo(D)
IN OUT PVCB IN PDEVICE_OBJECT IN PVPB IN PDEVICE_OBJECT FsDeviceObject
#define FatReleaseDirectoryFileMutex(VCB)
IN OUT PVCB IN PDEVICE_OBJECT IN PVPB Vpb
KDEFERRED_ROUTINE FatCleanVolumeDpc
IN PDCB IN POEM_STRING IN PUNICODE_STRING IN OUT POEM_STRING ShortName
BOOLEAN FatAddMcbEntry(IN PVCB Vcb, IN PLARGE_MCB Mcb, IN VBO Vbo, IN LBO Lbo, IN ULONG SectorCount)
#define FatGetFirstChild(DIR)
#define FatNormalizeAndRaiseStatus(IRPCONTEXT, STATUS)
#define FatAreNamesEqual(IRPCONTEXT, NAMEA, NAMEB)
#define FatGetFcbOplock(F)
VOID FatRemoveNames(IN PIRP_CONTEXT IrpContext, IN PFCB Fcb)
VOID Fat8dot3ToString(_In_ PIRP_CONTEXT IrpContext, _In_ PDIRENT Dirent, _In_ BOOLEAN RestoreCase, _Out_ POEM_STRING OutputString)
LARGE_INTEGER FatFatTimeToNtTime(_In_ PIRP_CONTEXT IrpContext, _In_ FAT_TIME_STAMP FatTime, _In_ UCHAR TenMilliSeconds)
#define FatDeleteResource(RESRC)
LARGE_INTEGER FatFatDateToNtTime(_In_ PIRP_CONTEXT IrpContext, _In_ FAT_DATE FatDate)
#define IRP_CONTEXT_FLAG_RECURSIVE_CALL
#define VCB_STATE_FLAG_LOCKED
#define CCB_FLAG_FREE_UNICODE
#define FCB_STATE_8_LOWER_CASE
#define VCB_STATE_FLAG_REMOVABLE_MEDIA
#define VCB_STATE_FLAG_HOTPLUGGABLE
#define VCB_STATE_FLAG_DEFERRED_FLUSH
#define VCB_STATE_FLAG_DISMOUNT_IN_PROGRESS
#define CCB_FLAG_CLOSE_CONTEXT
#define DCB_UNION_SLACK_SPACE
#define FCB_STATE_SYSTEM_FILE
#define FCB_LOOKUP_ALLOCATIONSIZE_HINT
#define FCB_STATE_HAS_OEM_LONG_NAME
#define VCB_STATE_FLAG_VPB_MUST_BE_FREED
#define FCB_STATE_3_LOWER_CASE
#define CCB_FLAG_FREE_OEM_BEST_FIT
#define FCB_STATE_NAMES_IN_SPLAY_TREE
#define FCB_STATE_PAGING_FILE
struct _FILE_SYSTEM_STATISTICS FILE_SYSTEM_STATISTICS
#define FCB_STATE_HAS_UNICODE_LONG_NAME
VOID NTAPI FsRtlInitializeFileLock(IN PFILE_LOCK FileLock, IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL, IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL)
VOID NTAPI FsRtlUninitializeFileLock(IN PFILE_LOCK FileLock)
VOID NTAPI FsRtlTeardownPerStreamContexts(IN PFSRTL_ADVANCED_FCB_HEADER AdvFcbHeader)
#define FSRTL_FLAG2_IS_PAGING_FILE
#define FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS
BOOLEAN NTAPI CcUninitializeCacheMap(IN PFILE_OBJECT FileObject, IN OPTIONAL PLARGE_INTEGER TruncateSize, IN OPTIONAL PCACHE_UNINITIALIZE_EVENT UninitializeEvent)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
static ULONG BitmapBuffer[(XMS_BLOCKS+31)/32]
VOID NTAPI RtlFreeOemString(POEM_STRING OemString)
NTSYSAPI NTSTATUS WINAPI RtlDowncaseUnicodeString(UNICODE_STRING *, const UNICODE_STRING *, BOOLEAN)
NTSYSAPI NTSTATUS WINAPI RtlUpcaseUnicodeStringToCountedOemString(STRING *, const UNICODE_STRING *, BOOLEAN)
VOID NTAPI FsRtlUninitializeLargeMcb(IN PLARGE_MCB Mcb)
VOID NTAPI FsRtlInitializeLargeMcb(IN PLARGE_MCB Mcb, IN POOL_TYPE PoolType)
#define RtlFillMemoryUlong(dst, len, val)
#define IOCTL_STORAGE_GET_HOTPLUG_INFO
#define DPFLTR_INFO_LEVEL
#define FSCTL_INVALIDATE_VOLUMES
#define FILE_ATTRIBUTE_DIRECTORY
#define FILE_FLOPPY_DISKETTE
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define FILE_REMOVABLE_MEDIA
#define UNREFERENCED_PARAMETER(P)
#define IOCTL_CDROM_READ_TOC
#define IOCTL_STORAGE_GET_DEVICE_NUMBER
#define ARGUMENT_PRESENT(ArgumentPointer)
#define VPB_REMOVE_PENDING
PVOID NTAPI FsRtlAllocatePoolWithTag(IN POOL_TYPE PoolType, IN ULONG NumberOfBytes, IN ULONG Tag)
VOID NTAPI FsRtlNotifyUninitializeSync(IN PNOTIFY_SYNC *NotifySync)
VOID NTAPI FsRtlNotifyInitializeSync(IN PNOTIFY_SYNC *NotifySync)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
PFILE_OBJECT NTAPI IoCreateStreamFileObject(IN PFILE_OBJECT FileObject, IN PDEVICE_OBJECT DeviceObject)
PIRP NTAPI IoGetTopLevelIrp(VOID)
VOID NTAPI IoGetStackLimits(OUT PULONG_PTR LowLimit, OUT PULONG_PTR HighLimit)
VOID NTAPI IoReleaseVpbSpinLock(IN KIRQL Irql)
VOID NTAPI IoAcquireVpbSpinLock(OUT PKIRQL Irql)
#define STATUS_UNMAPPABLE_CHARACTER
VOID NTAPI FsRtlUninitializeOplock(IN POPLOCK Oplock)
VOID NTAPI FsRtlInitializeOplock(IN OUT POPLOCK Oplock)
#define FILESYSTEM_STATISTICS_TYPE_FAT
#define _SEH2_AbnormalTermination()
PULONG MinorVersion OPTIONAL
LARGE_INTEGER ValidDataLength
LARGE_INTEGER AllocationSize
TRACK_DATA TrackData[MAXIMUM_NUMBER_TRACKS]
CACHE_MANAGER_CALLBACKS CacheManagerNoOpCallbacks
KSPIN_LOCK GeneralSpinLock
LIST_ENTRY ParentDcbLinks
VBO LfnOffsetWithinDirectory
UNICODE_STRING ExactCaseLongName
UNICODE_STRING FullFileName
FCB_CONDITION FcbCondition
LARGE_INTEGER LastWriteTime
struct _FCB::@734::@737 Fcb
FSRTL_ADVANCED_FCB_HEADER Header
LARGE_INTEGER LastAccessTime
union _FCB::@734 Specific
struct _FCB::@734::@736 Dcb
union _FCB::@735 LongName
VBO DirentOffsetWithinDirectory
union _FILE_NAME_NODE::@733 Name
struct _IO_STACK_LOCATION::@3983::@3998 FileSystemControl
struct _IO_STACK_LOCATION::@3983::@4003 MountVolume
PDEVICE_OBJECT DeviceObject
union _IO_STACK_LOCATION::@1584 Parameters
PKEVENT OutstandingAsyncEvent
FAST_MUTEX AdvancedFcbHeaderMutex
BOOLEAN WriteCacheEnableOverride
unsigned short MaximumLength
struct _DEVICE_OBJECT * RealDevice
BOOLEAN NTAPI KeCancelTimer(IN OUT PKTIMER Timer)
VOID NTAPI KeInitializeTimer(OUT PKTIMER Timer)
VOID NTAPI FsRtlInitializeTunnelCache(IN PTUNNEL Cache)
VOID NTAPI FsRtlDeleteTunnelCache(IN PTUNNEL Cache)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_IO_DEVICE_ERROR
#define STATUS_INVALID_DEVICE_REQUEST
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ _Strict_type_match_ POOL_TYPE PoolType
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
_In_ WDFDPC _In_ BOOLEAN Wait
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
#define ExInterlockedPushEntrySList(SListHead, SListEntry, Lock)
#define ExInterlockedPopEntrySList(SListHead, Lock)
FORCEINLINE VOID ExInitializeFastMutex(_Out_ PFAST_MUTEX FastMutex)
#define IRP_MJ_FILE_SYSTEM_CONTROL
#define IRP_MN_USER_FS_REQUEST
#define VPB_DIRECT_WRITES_ALLOWED
#define MAXIMUM_VOLUME_LABEL_LENGTH
#define IRP_MN_MOUNT_VOLUME
#define ObDereferenceObject
#define ObReferenceObject
#define RtlOemStringToCountedUnicodeSize(STRING)