23#define BugCheckFileId (FAT_BUG_CHECK_CREATE)
29#define Dbg (DEBUG_TRACE_CREATE)
36#define CollectCreateHitStatistics(VCB) { \
37 PFILE_SYSTEM_STATISTICS Stats = &(VCB)->Statistics[KeGetCurrentProcessorNumber() % FatData.NumberProcessors]; \
38 Stats->Fat.CreateHits += 1; \
41#define CollectCreateStatistics(VCB,STATUS) { \
42 PFILE_SYSTEM_STATISTICS Stats = &(VCB)->Statistics[KeGetCurrentProcessorNumber() % FatData.NumberProcessors]; \
43 if ((STATUS) == STATUS_SUCCESS) { \
44 Stats->Fat.SuccessfulCreates += 1; \
46 Stats->Fat.FailedCreates += 1; \
120FatOpenTargetDirectory (
133FatOpenExistingDirectory (
182FatCreateNewDirectory (
227FatSupersedeOrOverwriteFile (
254#pragma alloc_text(PAGE, FatCheckShareAccess)
255#pragma alloc_text(PAGE, FatCheckSystemSecurityAccess)
256#pragma alloc_text(PAGE, FatCommonCreate)
258#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)
259#pragma alloc_text(PAGE, FatCommonCreateOnNewStack)
260#pragma alloc_text(PAGE, FatCommonCreateCallout)
263#pragma alloc_text(PAGE, FatCreateNewDirectory)
264#pragma alloc_text(PAGE, FatCreateNewFile)
265#pragma alloc_text(PAGE, FatFsdCreate)
266#pragma alloc_text(PAGE, FatOpenExistingDcb)
267#pragma alloc_text(PAGE, FatOpenExistingDirectory)
268#pragma alloc_text(PAGE, FatOpenExistingFcb)
269#pragma alloc_text(PAGE, FatOpenExistingFile)
270#pragma alloc_text(PAGE, FatOpenRootDcb)
271#pragma alloc_text(PAGE, FatOpenTargetDirectory)
272#pragma alloc_text(PAGE, FatOpenVolume)
273#pragma alloc_text(PAGE, FatSupersedeOrOverwriteFile)
274#pragma alloc_text(PAGE, FatSetFullNameInFcb)
349#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)
350 Status = FatCommonCreateOnNewStack( IrpContext,
Irp );
352 Status = FatCommonCreate( IrpContext,
Irp );
365 ExceptionCompletedIrp =
TRUE;
397#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)
400FatCommonCreateCallout (
434 CalloutParameters->IrpStatus = FatCommonCreate( CalloutParameters->Create.IrpContext,
435 CalloutParameters->Create.Irp );
451FatCommonCreateOnNewStack (
488 CalloutParameters.
Create.IrpContext = IrpContext;
498 status = KeExpandKernelStackAndCalloutEx( FatCommonCreateCallout,
591 BOOLEAN NoIntermediateBuffering;
630 ULONG MatchFlags = 0;
653 DebugTrace( 0,
Dbg,
"->AllocationSize.LowPart = %08lx\n",
Irp->Overlay.AllocationSize.LowPart );
654 DebugTrace( 0,
Dbg,
"->AllocationSize.HighPart = %08lx\n",
Irp->Overlay.AllocationSize.HighPart );
655 DebugTrace( 0,
Dbg,
"->SystemBuffer = %p\n",
Irp->AssociatedIrp.SystemBuffer );
685 DebugTrace(-1,
Dbg,
"FatCommonCreate -> STATUS_OBJECT_NAME_INVALID\n", 0);
698 RelatedFileObject =
FileObject->RelatedFileObject;
712 if ( RelatedFileObject !=
NULL ) {
756#if (NTDDI_VERSION >= NTDDI_WIN7)
784 if (
Irp->Overlay.AllocationSize.HighPart != 0 ||
787 DebugTrace(-1,
Dbg,
"FatCommonCreate -> STATUS_INVALID_PARAMETER\n", 0);
814#pragma prefast( suppress:28159, "this is a serious programming error if it happens" )
829 OemFinalName.Length = 0;
830 OemFinalName.MaximumLength =
sizeof( OemBuffer);
831 OemFinalName.Buffer = (
PCHAR)OemBuffer;
833 UpcasedFinalName.
Length = 0;
835 UpcasedFinalName.
Buffer = UpcasedBuffer;
838 Lfn.MaximumLength =
sizeof( LfnBuffer);
880 Vcb->Vpb->RealDevice );
907 if (RelatedFileObject ==
NULL ||
921 DebugTrace(0,
Dbg,
"Cannot open volume as a directory\n", 0);
930 if (OpenTargetDirectory) {
946 Irp->IoStatus.Information =
Iosb.Information;
957 if (RelatedFileObject !=
NULL) {
1000 FatVerifyFcb( IrpContext, RelatedDcb );
1018 if (NonDirectoryFile) {
1020 DebugTrace(0,
Dbg,
"Cannot open root directory as a file\n", 0);
1029 if (OpenTargetDirectory) {
1047 Iosb = FatOpenRootDcb( IrpContext,
1054 Irp->IoStatus.Information =
Iosb.Information;
1081 TrailingBackslash =
TRUE;
1085 TrailingBackslash =
FALSE;
1096 FatSetFullFileNameInFcb( IrpContext,
ParentDcb );
1128 &NextRemainingPart );
1136 if (((NextRemainingPart.
Length != 0) && (NextRemainingPart.
Buffer[0] ==
L'\\')) ||
1164 OemFinalName.Length = 0;
1208 if (NextFcb !=
NULL) {
1213 if ((NextFcb ==
NULL) ||
1215 (NextRemainingPart.
Length == 0)) {
1237 FatVerifyFcb( IrpContext,
Fcb );
1253 if (IsPagingFile && FirstLoop &&
1325 if (OpenTargetDirectory) {
1329 Iosb = FatOpenTargetDirectory( IrpContext,
1336 Irp->IoStatus.Information =
Iosb.Information;
1352 if (NonDirectoryFile) {
1363 Iosb = FatOpenExistingDcb( IrpContext,
1379 Irp->IoStatus.Information =
Iosb.Information;
1416 if ( TrailingBackslash ) {
1422 Iosb = FatOpenExistingFcb( IrpContext,
1452 Irp->IoStatus.Information =
Iosb.Information;
1469#pragma prefast( suppress:28159, "this is a serious corruption if it happens" )
1624 FatLocateDirent( IrpContext,
1706 if (OpenTargetDirectory) {
1708 Iosb = FatOpenTargetDirectory( IrpContext,
1716 Irp->IoStatus.Information =
Iosb.Information;
1740 if (NonDirectoryFile) {
1749 Iosb = FatOpenExistingDirectory( IrpContext,
1767 Irp->IoStatus.Information =
Iosb.Information;
1785 if ( TrailingBackslash ) {
1790 Iosb = FatOpenExistingFile( IrpContext,
1823 Irp->IoStatus.Information =
Iosb.Information;
1851 OemFinalName.Length = 0;
1881 Vcb->Vpb->RealDevice );
1893 if (TemporaryFile) {
1898 Iosb = FatCreateNewDirectory( IrpContext,
1914 Irp->IoStatus.Information =
Iosb.Information;
1920 if ( TrailingBackslash ) {
1939 Vcb->Vpb->RealDevice );
1947 Iosb = FatCreateNewFile( IrpContext,
1977 Irp->IoStatus.Information =
Iosb.Information;
2008#if (NTDDI_VERSION >= NTDDI_WIN7)
2025 IrpContext->OriginatingIrp,
2062 SavedFlags = IrpContext->Flags;
2069 if ((FinalDcb !=
NULL) &&
2077 DirectoryFileObject = FinalDcb->
Specific.
Dcb.DirectoryFile;
2086 IrpContext->Flags = SavedFlags;
2120 if (!OplockPostIrp) {
2167 FatTruncateFileAllocation( IrpContext, LocalFcb, 0 );
2169 FatDeleteDirent( IrpContext, LocalFcb,
NULL,
TRUE );
2190 DirectoryFileObject = LocalFcb->
Specific.
Dcb.DirectoryFile;
2237#pragma prefast( suppress:28112, "this should be safe" )
2259#pragma prefast( suppress:28112, "this should be safe" )
2370#if (NTDDI_VERSION >= NTDDI_VISTA)
2379 FsRtlAreVolumeStartupApplicationsComplete()) {
2401 FatPurgeReferencedFileObjects( IrpContext,
Vcb->RootDcb,
Flush );
2413 if (
Vcb->OpenFileCount != 0) {
2420 if (
Vcb->ReadOnlyCount !=
Vcb->OpenFileCount) {
2432 UnwindVolumeLock =
TRUE;
2438 CleanedVolume =
TRUE;
2449 CleanedVolume =
TRUE;
2457 if (CleanedVolume &&
2488 if (
Vcb->DirectAccessOpenCount > 0) {
2504 &
Vcb->ShareAccess );
2507 UnwindShareAccess =
TRUE;
2519 FileObject->SectionObjectPointer = &
Vcb->SectionObjectPointers;
2521 Vcb->DirectAccessOpenCount += 1;
2522 Vcb->OpenFileCount += 1;
2524 UnwindCounts =
TRUE;
2534 Vcb->Vpb->RealDevice,
2538 IrpContext->OriginatingIrp->RequestorMode ));
2564 Vcb->DirectAccessOpenCount -= 1;
2565 Vcb->OpenFileCount -= 1;
2570 if (UnwindVolumeLock) {
Vcb->VcbState &= ~VCB_STATE_FLAG_LOCKED; }
2643 RootDcb =
Vcb->RootDcb;
2650 (
VOID)FatAcquireExclusiveFcb( IrpContext, RootDcb );
2651 RootDcbAcquired =
TRUE;
2698 UnwindShareAccess =
TRUE;
2712 Vcb->OpenFileCount += 1;
2714 UnwindCounts =
TRUE;
2737 Vcb->OpenFileCount -= 1;
2744 if (RootDcbAcquired) {
2822#if (NTDDI_VERSION <= NTDDI_WIN7)
2837 (
VOID)FatAcquireExclusiveFcb( IrpContext,
Dcb );
2843 *OplockPostIrp =
FALSE;
2857#if (NTDDI_VERSION >= NTDDI_WIN8)
2865 IrpContext->OriginatingIrp,
2894 FatGetDirentFromFcbOrDcb( IrpContext,
2900 FatGetNeedEaCount( IrpContext,
2926 Dcb->DirentFatFlags,
2938 if (
Dcb->OpenCount > 0) {
2945#if (NTDDI_VERSION >= NTDDI_WIN8)
2960 IrpContext->OriginatingIrp,
2974 *OplockPostIrp =
TRUE;
2981 }
else if (!
NT_SUCCESS( OplockBreakStatus )) {
2983 Iosb.Status = OplockBreakStatus;
3017#if (NTDDI_VERSION >= NTDDI_WIN8)
3025 if (
Dcb->UncleanCount != 0) {
3028 IrpContext->OriginatingIrp,
3041 *OplockPostIrp =
TRUE;
3055 IrpContext->OriginatingIrp,
3056 (
Dcb->UncleanCount + 1) );
3081 if (
Dcb->OpenCount > 0) {
3093 UnwindShareAccess =
TRUE;
3105 Dcb->UncleanCount += 1;
3106 Dcb->OpenCount += 1;
3107 Vcb->OpenFileCount += 1;
3169 DebugTrace(-1,
Dbg,
"FatOpenExistingDcb -> Iosb.Status = %08lx\n",
Iosb.Status);
3279 (
VOID)FatAcquireExclusiveFcb( IrpContext,
Fcb );
3285 *OplockPostIrp =
FALSE;
3287#if (NTDDI_VERSION >= NTDDI_WIN7)
3295 IrpContext->OriginatingIrp,
3322 IrpContext->OriginatingIrp,
3334 *OplockPostIrp =
TRUE;
3414 DebugTrace(0,
Dbg,
"The hidden and/or system bits do not match\n", 0);
3434 Vcb->Vpb->RealDevice );
3453#if (NTDDI_VERSION >= NTDDI_WIN7)
3468 IrpContext->OriginatingIrp,
3482 *OplockPostIrp =
TRUE;
3489 }
else if (!
NT_SUCCESS( OplockBreakStatus )) {
3491 Iosb.Status = OplockBreakStatus;
3539 IrpContext->OriginatingIrp,
3552 *OplockPostIrp =
TRUE;
3566 IrpContext->OriginatingIrp,
3602 DecrementFcbOpenCount =
TRUE;
3605 MmFlushForWrite )) {
3673 FatGetDirentFromFcbOrDcb( IrpContext,
3679 FatGetNeedEaCount( IrpContext,
3726 DebugTrace(0,
Dbg,
"Doing supersede/overwrite operation\n", 0);
3733 OldStatus =
Iosb.Status;
3748 Iosb = FatSupersedeOrOverwriteFile( IrpContext,
3760 Iosb.Status = OldStatus;
3771#pragma prefast( suppress:28159, "things are seriously wrong if we get here" )
3798#pragma prefast( suppress:28931, "it needs to be there for debug assert" );
3818 UnwindShareAccess =
TRUE;
3831 Vcb->OpenFileCount += 1;
3865 IrpContext->OriginatingIrp->RequestorMode ))) {
3894 if (DecrementFcbOpenCount) {
3903 FcbAcquired =
FALSE;
3912 DebugTrace(-1,
Dbg,
"FatOpenExistingFcb -> Iosb.Status = %08lx\n",
Iosb.Status);
3924FatOpenTargetDirectory (
3981 (
VOID)FatAcquireExclusiveFcb( IrpContext,
Dcb );
3993 if (
Dcb->OpenCount > 0) {
4012 UnwindShareAccess =
TRUE;
4024 Dcb->UncleanCount += 1;
4025 Dcb->OpenCount += 1;
4026 Dcb->Vcb->OpenFileCount += 1;
4119 DebugTrace(-1,
Dbg,
"FatOpenTargetDirectory -> Iosb.Status = %08lx\n",
Iosb.Status);
4134#pragma warning(suppress:6101)
4136FatOpenExistingDirectory (
4218#if (NTDDI_VERSION <= NTDDI_WIN7)
4238 FatGetNeedEaCount( IrpContext,
4281#if (NTDDI_VERSION >= NTDDI_WIN8)
4289 IrpContext->OriginatingIrp,
4305 IrpContext->OriginatingIrp,
4306 ((*Dcb)->UncleanCount + 1) );
4341 (*Dcb)->UncleanCount += 1;
4342 (*Dcb)->OpenCount += 1;
4384 (*Dcb)->UncleanCount -= 1;
4385 (*Dcb)->OpenCount -= 1;
4386 Vcb->OpenFileCount -= 1;
4413FatOpenExistingFile (
4517#if (NTDDI_VERSION < NTDDI_WIN7)
4591 DebugTrace(0,
Dbg,
"The hidden and/or system bits do not match\n", 0);
4593 if ( !IsPagingFile ) {
4614 Vcb->Vpb->RealDevice );
4639 (*Fcb)->Header.ValidDataLength.LowPart = (*Fcb)->Header.FileSize.LowPart;
4648 FatLookupFileAllocationSize( IrpContext, *
Fcb );
4651#if (NTDDI_VERSION >= NTDDI_WIN7)
4659 IrpContext->OriginatingIrp,
4675 IrpContext->OriginatingIrp,
4676 ((*Fcb)->UncleanCount + 1) );
4713 FatGetNeedEaCount( IrpContext,
4733 FileObject->SectionObjectPointer = &(*Fcb)->NonPaged->SectionObjectPointers;
4743 DebugTrace(0,
Dbg,
"Doing supersede/overwrite operation\n", 0);
4754 Iosb = FatSupersedeOrOverwriteFile( IrpContext,
4770#pragma prefast( suppress:28159, "things are seriously wrong if we get here" )
4796 (*Fcb)->UncleanCount += 1;
4797 (*Fcb)->OpenCount += 1;
4799 (*Fcb)->NonCachedUncleanCount += 1;
4801 Vcb->OpenFileCount += 1;
4840 IrpContext->OriginatingIrp->RequestorMode ))) {
4860 (*Fcb)->UncleanCount -= 1;
4861 (*Fcb)->OpenCount -= 1;
4863 (*Fcb)->NonCachedUncleanCount -= 1;
4865 Vcb->OpenFileCount -= 1;
4869 if (UnwindFcb !=
NULL) {
4880 DebugTrace(-1,
Dbg,
"FatOpenExistingFile -> Iosb.Status = %08lx\n",
Iosb.Status);
4893FatCreateNewDirectory (
4970 ULONG ShortDirentByteOffset;
4978 ULONG BytesInFirstPage = 0;
4979 ULONG DirentsInFirstPage = 0;
4983 ULONG SecondPageOffset;
4990 UCHAR ShortNameBuffer[12];
4992#if (NTDDI_VERSION <= NTDDI_WIN7)
5017 DebugTrace(-1,
Dbg,
"FatCreateNewDirectory -> Iosb.Status = %08lx\n",
Iosb.Status);
5034 FatSelectNames( IrpContext,
5067 FatPrepareWriteDirectoryFile( IrpContext,
5099 DirentsInFirstPage = BytesInFirstPage /
sizeof(
DIRENT);
5101 FatPrepareWriteDirectoryFile( IrpContext,
5109 (
PVOID *)&SecondPageDirent,
5117 FirstPageDirent =
Dirent;
5123 DirentFromPool =
TRUE;
5155 if (DirentFromPool) {
5160 Dirent + DirentsInFirstPage,
5163 ShortDirent = SecondPageDirent + (
DirentsNeeded - DirentsInFirstPage) - 1;
5174 ShortDirentByteOffset,
5178#if (NTDDI_VERSION >= NTDDI_WIN8)
5192 IrpContext->OriginatingIrp,
5208 IrpContext->OriginatingIrp,
5209 (
Dcb->UncleanCount + 1) );
5222 IrpContext->OriginatingIrp,
5223 OPLOCK_FLAG_PARENT_OBJECT,
5250 FatCreateEa( IrpContext,
5254 &
Dcb->ShortName.Name.Oem,
5260 ShortDirent->ExtendedAttributes =
EaHandle;
5274 FatInitializeDirectoryDirent( IrpContext,
Dcb, ShortDirent );
5324 Dcb->UncleanCount += 1;
5325 Dcb->OpenCount += 1;
5326 Vcb->OpenFileCount += 1;
5347 Iosb.Status = IrpContext->ExceptionStatus;
5366#pragma prefast( suppress: 28924, "prefast thinks this test is redundant, but DCB can be NULL depending on where we raise" )
5395 if (DirentFromPool ==
FALSE) {
5410 if ((SecondPageBcb ==
NULL) &&
5411 (
i == DirentsInFirstPage)) {
5420 if (
i < DirentsInFirstPage) {
5452 if (DirentFromPool) {
5460#pragma prefast( suppress: 28924, "prefast thinks this test is redundant, but DCB can be NULL depending on where we raise" )
5472 DirectoryFileObject =
Dcb->Specific.Dcb.DirectoryFile;
5502 if (
Dcb->FirstClusterOfFile != 0) {
5506 Dcb->Header.FileSize.LowPart = 0;
5515 FatTruncateFileAllocation( IrpContext,
Dcb, 0 );
5526 if (DirectoryFileObject !=
NULL) {
5529 DirectoryFileObject );
5560 if (DirectoryFileObject !=
NULL) {
5567 Dcb->Specific.Dcb.DirectoryFile =
NULL;
5580#pragma prefast( suppress: 28924, "prefast thinks this test is redundant, but FileObject can be NULL depending on where we raise" )
5589 DebugTrace(-1,
Dbg,
"FatCreateNewDirectory -> Iosb.Status = %08lx\n",
Iosb.Status);
5697 ULONG ShortDirentByteOffset;
5705 ULONG BytesInFirstPage = 0;
5706 ULONG DirentsInFirstPage = 0;
5710 ULONG SecondPageOffset;
5716 UCHAR ShortNameBuffer[12];
5719 WCHAR UniTunneledShortNameBuffer[12];
5721 WCHAR UniTunneledLongNameBuffer[26];
5723 ULONG TunneledDataSize;
5724 BOOLEAN HaveTunneledInformation;
5742#if (NTDDI_VERSION < NTDDI_WIN7)
5751 ShortName.MaximumLength =
sizeof(ShortNameBuffer);
5754 UniTunneledShortName.
Length = 0;
5755 UniTunneledShortName.
MaximumLength =
sizeof(UniTunneledShortNameBuffer);
5756 UniTunneledShortName.
Buffer = &UniTunneledShortNameBuffer[0];
5758 UniTunneledLongName.
Length = 0;
5759 UniTunneledLongName.
MaximumLength =
sizeof(UniTunneledLongNameBuffer);
5760 UniTunneledLongName.
Buffer = &UniTunneledLongNameBuffer[0];
5795 &UniTunneledShortName,
5796 &UniTunneledLongName,
5798 &TunneledCreationTime );
5805 FatSelectNames( IrpContext,
5810 (HaveTunneledInformation? &UniTunneledShortName :
NULL),
5836 UniTunneledLongName.
Length &&
5837 !FatLfnDirentExists(IrpContext,
ParentDcb, &UniTunneledLongName, LfnBuffer)) {
5839 UsingTunneledLfn =
TRUE;
5842 RealUnicodeName = &UniTunneledLongName;
5867 FatPrepareWriteDirectoryFile( IrpContext,
5901 DirentsInFirstPage = BytesInFirstPage /
sizeof(
DIRENT);
5903 FatPrepareWriteDirectoryFile( IrpContext,
5911 (
PVOID *)&SecondPageDirent,
5919 FirstPageDirent =
Dirent;
5925 DirentFromPool =
TRUE;
5951 (HaveTunneledInformation ? &TunneledCreationTime :
NULL) );
5957 if (DirentFromPool) {
5962 Dirent + DirentsInFirstPage,
5965 ShortDirent = SecondPageDirent + (
DirentsNeeded - DirentsInFirstPage) - 1;
5978 ShortDirentByteOffset,
5984 UnwindDirent =
NULL;
5986#if (NTDDI_VERSION >= NTDDI_WIN7)
6000 IrpContext->OriginatingIrp,
6016 IrpContext->OriginatingIrp,
6021#if (NTDDI_VERSION >= NTDDI_WIN8)
6032 IrpContext->OriginatingIrp,
6033 OPLOCK_FLAG_PARENT_OBJECT,
6055 if (TemporaryFile) {
6069 UnwindAllocation =
TRUE;
6079 FatCreateEa( IrpContext,
6089 ShortDirent->ExtendedAttributes =
EaHandle;
6140 Vcb->OpenFileCount += 1;
6173 if ( !
CreateLfn && !UsingTunneledLfn ) {
6186 IrpContext->OriginatingIrp->RequestorMode ))) {
6198 if (UniTunneledLongName.
Buffer != UniTunneledLongNameBuffer) {
6217 if (LocalAbnormalTermination) {
6225 Vcb->OpenFileCount -= 1;
6229 if (UnwindFcb ==
NULL) {
6246 if (UnwindDirent !=
NULL) {
6252 if (DirentFromPool ==
FALSE) {
6267 if ((SecondPageBcb ==
NULL) &&
6268 (
i == DirentsInFirstPage)) {
6277 if (
i < DirentsInFirstPage) {
6299 if (LocalAbnormalTermination) {
6300 if (UnwindAllocation) {
6301 FatTruncateFileAllocation( IrpContext,
Fcb, 0 );
6309 if (LocalAbnormalTermination) {
6310 if (UnwindFcb !=
NULL) {
6311 FatDeleteDirent( IrpContext, UnwindFcb,
NULL,
TRUE );
6317 if (LocalAbnormalTermination) {
6318 if (UnwindFcb !=
NULL) {
6334 if (DirentFromPool) {
6355FatSupersedeOrOverwriteFile (
6412 ULONG HeaderSize = 0;
6437 DebugTrace(-1,
Dbg,
"FatSupersedeOrOverwriteFile -> Iosb.Status = %08lx\n",
Iosb.Status);
6482 FatCreateEa( IrpContext,
6493#if (NTDDI_VERSION >= NTDDI_WIN8)
6502 IrpContext->OriginatingIrp,
6503 OPLOCK_FLAG_PARENT_OBJECT,
6521 ReleasePaging =
TRUE;
6524 Fcb->
Header.ValidDataLength.LowPart = 0;
6552 ReleasePaging =
FALSE;
6565 FatGetDirentFromFcbOrDcb( IrpContext,
6595 (
VOID)FatNtTimeToFatTime( IrpContext,
6626 FatDeleteEa( IrpContext,
6628 Dirent->ExtendedAttributes,
6655 FatSetDirtyBcb( IrpContext, DirentBcb,
Fcb->
Vcb,
TRUE );
6711 DebugTrace(-1,
Dbg,
"FatSupersedeOrOverwriteFile -> Iosb.Status = %08lx\n",
Iosb.Status);
6788 &FinalName->Buffer[0],
6789 FinalName->Length );
6821 &FinalName->Buffer[0],
6822 FinalName->Length );
6905#if (NTDDI_VERSION >= NTDDI_VISTA)
ULONG NTAPI MmDoesFileHaveUserWritableReferences(IN PSECTION_OBJECT_POINTERS SectionPointer)
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
BOOLEAN FatCheckFileAccess(PIRP_CONTEXT IrpContext, IN UCHAR DirentAttributes, IN PACCESS_MASK DesiredAccess)
NTSTATUS FatExplicitDeviceAccessGranted(IN PIRP_CONTEXT IrpContext, IN PDEVICE_OBJECT DeviceObject, IN PACCESS_STATE AccessState, IN KPROCESSOR_MODE ProcessorMode)
BOOLEAN FatCheckManageVolumeAccess(_In_ PIRP_CONTEXT IrpContext, _In_ PACCESS_STATE AccessState, _In_ KPROCESSOR_MODE ProcessorMode)
#define FILE_DIRECTORY_FILE
#define FILE_NON_DIRECTORY_FILE
#define FILE_COMPLETE_IF_OPLOCKED
#define FILE_DELETE_ON_CLOSE
BOOLEAN FatOpenVolume(PFAT_VOLUME_INFO Volume, PFAT_BOOTSECTOR BootSector, ULONGLONG PartitionSectorCount)
VOID NTAPI CcFlushCache(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN OPTIONAL PLARGE_INTEGER FileOffset, IN ULONG Length, OUT OPTIONAL PIO_STATUS_BLOCK IoStatus)
_Inout_ PFILE_OBJECT _In_ TYPE_OF_OPEN TypeOfOpen
_Inout_ PFILE_OBJECT _In_ TYPE_OF_OPEN PFCB _In_opt_ PCCB Ccb
enum _TYPE_OF_OPEN TYPE_OF_OPEN
VOLUME_DEVICE_OBJECT * PVOLUME_DEVICE_OBJECT
#define _Requires_lock_held_(lock)
#define STATUS_NOT_IMPLEMENTED
#define NT_SUCCESS(StatCode)
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 DirentByteOffset
LUID FatSecurityPrivilege
_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 _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB _In_ PDIRENT Dirent
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB _In_ PDIRENT _In_ ULONG _In_ ULONG _In_ PUNICODE_STRING _In_ PACCESS_MASK _In_ USHORT _In_ ULONG _In_ BOOLEAN _In_ BOOLEAN _In_ BOOLEAN _In_ BOOLEAN OpenRequiringOplock
_In_ PIO_STACK_LOCATION IrpSp
NTSTATUS FatCheckSystemSecurityAccess(_In_ PIRP_CONTEXT IrpContext)
NTSTATUS FatCallSelfCompletionRoutine(__in PDEVICE_OBJECT DeviceObject, __in PIRP Irp, __in PVOID Contxt)
VOID FatSetFullNameInFcb(_In_ PIRP_CONTEXT IrpContext, _Inout_ PFCB Fcb, _In_ PUNICODE_STRING FinalName)
FatSetFileObject(FileObject, UserDirectoryOpen,(*Dcb), UnwindCcb=FatCreateCcb(IrpContext))
#define CollectCreateStatistics(VCB, STATUS)
#define CollectCreateHitStatistics(VCB)
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB ParentDcb
NTSTATUS FatCheckShareAccess(_In_ PIRP_CONTEXT IrpContext, _In_ PFILE_OBJECT FileObject, _In_ PFCB FcbOrDcb, _In_ PACCESS_MASK DesiredAccess, _In_ ULONG ShareAccess)
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB _In_ PDIRENT _In_ ULONG _In_ ULONG _In_ PUNICODE_STRING _In_ PACCESS_MASK _In_ USHORT _In_ ULONG _In_ BOOLEAN _In_ BOOLEAN DeleteOnClose
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB _In_ PDIRENT _In_ ULONG LfnByteOffset
BOOLEAN CountsIncremented
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB _In_ PDIRENT _In_ ULONG _In_ ULONG _In_ PUNICODE_STRING _In_ PACCESS_MASK _In_ USHORT _In_ ULONG _In_ BOOLEAN NoEaKnowledge
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB _In_ PDIRENT _In_ ULONG _In_ ULONG _In_ PUNICODE_STRING _In_ PACCESS_MASK _In_ USHORT _In_ ULONG _In_ BOOLEAN _In_ BOOLEAN _In_ BOOLEAN FileNameOpenedDos
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB _In_ PDIRENT _In_ ULONG _In_ ULONG _In_ PUNICODE_STRING _In_ PACCESS_MASK _In_ USHORT ShareAccess
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB * Dcb
#define FAT_DIRENT_ATTR_READ_ONLY
#define FAT_DIRENT_DELETED
#define FAT_DIRENT_ATTR_SYSTEM
#define FAT_DIRENT_ATTR_DIRECTORY
#define FAT_DIRENT_ATTR_HIDDEN
PACKED_LFN_DIRENT LFN_DIRENT
#define FAT_LFN_DIRENTS_NEEDED(NAME)
#define FatBugCheck(A, B, C)
#define TAG_FILENAME_BUFFER
#define IsListEmpty(ListHead)
NTSTATUS RtlUpcaseUnicodeString(PUNICODE_STRING dst, PUNICODE_STRING src, BOOLEAN Alloc)
#define KeSetEvent(pEvt, foo, foo2)
#define KeQuerySystemTime(t)
#define ExAcquireResourceExclusiveLite(res, wait)
#define ClearFlag(_F, _SF)
#define BooleanFlagOn(F, SF)
VOID FatUnpinRepinnedBcbs(IN PIRP_CONTEXT IrpContext)
VOID FatSyncUninitializeCacheMap(IN PIRP_CONTEXT IrpContext, IN PFILE_OBJECT FileObject)
NTSTATUS FatToggleMediaEjectDisable(IN PIRP_CONTEXT IrpContext, IN PVCB Vcb, IN BOOLEAN PreventRemoval)
VOID FatConstructDirent(IN PIRP_CONTEXT IrpContext, IN OUT PDIRENT Dirent, IN POEM_STRING FileName, IN BOOLEAN ComponentReallyLowercase, IN BOOLEAN ExtensionReallyLowercase, IN PUNICODE_STRING Lfn OPTIONAL, IN USHORT Attributes, IN BOOLEAN ZeroAndSetTimeFields, IN PLARGE_INTEGER SetCreationTime OPTIONAL)
ULONG FatExceptionFilter(IN PIRP_CONTEXT IrpContext, IN PEXCEPTION_POINTERS ExceptionPointer)
BOOLEAN FatIsIrpTopLevel(IN PIRP Irp)
LARGE_INTEGER FatLargeZero
#define TimerStart(LEVEL)
#define FAT_RESERVE_MDL_SIZE
#define TimerStop(LEVEL, s)
#define DebugTrace(INDENT, LEVEL, X, Y)
VOID FatDeleteFcb(IN PIRP_CONTEXT IrpContext, IN PFCB *Fcb)
VOID FatDeleteCcb(IN PIRP_CONTEXT IrpContext, IN PCCB *Ccb)
#define FatUnpinBcb(IRPCONTEXT, BCB)
static INLINE BOOLEAN FatIsNameLongUnicodeValid(PIRP_CONTEXT IrpContext, PUNICODE_STRING Name, BOOLEAN CanContainWildcards, BOOLEAN PathNameOk, BOOLEAN LeadingBackslashOk)
VOID FatStringTo8dot3(_In_ PIRP_CONTEXT IrpContext, _In_ OEM_STRING InputString, _Out_writes_bytes_(11) PFAT8DOT3 Output8dot3)
IN PDCB IN POEM_STRING IN PUNICODE_STRING IN OUT POEM_STRING IN PUNICODE_STRING SuggestedShortName IN OUT BOOLEAN IN OUT BOOLEAN IN OUT BOOLEAN * CreateLfn
#define IsFileObjectReadOnly(FO)
#define FAT_CREATE_INITIAL_NAME_BUF_SIZE
NTSTATUS FatFsdPostRequest(IN PIRP_CONTEXT IrpContext, IN PIRP Irp)
TYPE_OF_OPEN FatDecodeFileObject(_In_ PFILE_OBJECT FileObject, _Outptr_ PVCB *Vcb, _Outptr_ PFCB *FcbOrDcb, _Outptr_ PCCB *Ccb)
IN PDCB IN POEM_STRING IN PUNICODE_STRING IN OUT POEM_STRING IN PUNICODE_STRING SuggestedShortName IN OUT BOOLEAN * AllLowerComponent
IN PFCB IN PCCB IN TYPE_OF_OPEN IN BOOLEAN IN BOOLEAN TopLevel
#define FatCompleteRequest(IRPCONTEXT, IRP, STATUS)
#define FatNotifyReportChange(I, V, F, FL, A)
#define FatReleaseFcb(IRPCONTEXT, Fcb)
NTSTATUS FatFlushFat(IN PIRP_CONTEXT IrpContext, IN 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 NTAPI FatPrePostIrp(IN PVOID Context, IN PIRP Irp)
PFCB FatFindFcb(IN PIRP_CONTEXT IrpContext, IN OUT PRTL_SPLAY_LINKS *RootNode, IN PSTRING Name, OUT PBOOLEAN FileNameDos OPTIONAL)
#define FatDeviceIsFatFsdo(D)
#define FatResetExceptionState(IRPCONTEXT)
#define FatAcquireExclusiveVcb(IC, V)
VOID FatEnsureStringBufferEnough(_Inout_ PVOID String, _In_ USHORT DesiredBufferSize)
IN PDCB IN ULONG DirentsNeeded
IN PDCB IN POEM_STRING IN PUNICODE_STRING UnicodeName
BOOLEAN FatIsHandleCountZero(IN PIRP_CONTEXT IrpContext, IN PVCB Vcb)
IN PDCB IN POEM_STRING IN PUNICODE_STRING IN OUT POEM_STRING ShortName
PCCB FatCreateCcb(IN PIRP_CONTEXT IrpContext)
#define FatIsFastIoPossible(FCB)
VOID NTAPI FatOplockComplete(IN PVOID Context, IN PIRP Irp)
IN PDCB IN POEM_STRING IN PUNICODE_STRING IN OUT POEM_STRING IN PUNICODE_STRING SuggestedShortName IN OUT BOOLEAN IN OUT BOOLEAN * AllLowerExtension
#define FatIsNameShortOemValid(IRPCONTEXT, NAME, CAN_CONTAIN_WILD_CARDS, PATH_NAME_OK, LEADING_BACKSLASH_OK)
IN PVCB IN PUCHAR IN ULONG IN POEM_STRING OUT PUSHORT EaHandle
VOID FatVerifyVcb(IN PIRP_CONTEXT IrpContext, IN PVCB Vcb)
#define FatRaiseStatus(IRPCONTEXT, STATUS)
IN PVCB IN PDIRENT OUT PULONG EaLength
#define FatGetFcbOplock(F)
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)
IN PFCB IN PFILE_OBJECT FileObject IN ULONG AllocationSize
VOID FatRemoveNames(IN PIRP_CONTEXT IrpContext, IN PFCB Fcb)
#define FatIsFileOplockable(F)
VOID FatFreeStringBuffer(_Inout_ PVOID String)
#define FatReleaseVcb(IRPCONTEXT, Vcb)
IN PDCB IN POEM_STRING OemName
#define FatDirectoryKey(FcbOrDcb)
IN PVCB IN PDIRENT OUT PULONG NeedEaCount
PIRP_CONTEXT FatCreateIrpContext(IN PIRP Irp, IN BOOLEAN Wait)
static INLINE BOOLEAN FatIsIoRangeValid(IN PVCB Vcb, IN LARGE_INTEGER Start, IN ULONG Length)
#define VCB_STATE_FLAG_VOLUME_DIRTY
#define VCB_STATE_FLAG_LOCKED
#define CCB_FLAG_MANAGE_VOLUME_ACCESS
#define IRP_CONTEXT_FLAG_SWAPPED_STACK
#define VCB_STATE_FLAG_REMOVABLE_MEDIA
#define IRP_CONTEXT_FLAG_DISABLE_RAISE
#define VCB_STATE_FLAG_BOOT_OR_PAGING_FILE
#define CCB_FLAG_OPENED_BY_SHORTNAME
#define CCB_FLAG_SKIP_SHORT_NAME_COMPARE
#define VCB_STATE_FLAG_CREATE_IN_PROGRESS
#define VCB_STATE_FLAG_MOUNTED_DIRTY
#define FCB_STATE_TEMPORARY
#define VCB_STATE_FLAG_WRITE_PROTECTED
#define FCB_STATE_DELETE_ON_CLOSE
#define FCB_STATE_SYSTEM_FILE
#define FCB_STATE_TRUNCATE_ON_CLOSE
#define FCB_STATE_PAGING_FILE
#define IRP_CONTEXT_FLAG_DISABLE_WRITE_THROUGH
#define CCB_FLAG_DELETE_ON_CLOSE
#define FCB_STATE_DELAY_CLOSE
struct _FileName FileName
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE _In_ ACCESS_MASK _In_ POBJECT_ATTRIBUTES _Out_ PIO_STATUS_BLOCK _In_opt_ PLARGE_INTEGER _In_ ULONG FileAttributes
#define FILE_OPEN_BY_FILE_ID
#define FILE_OVERWRITE_IF
#define FILE_NO_EA_KNOWLEDGE
#define FILE_NO_INTERMEDIATE_BUFFERING
#define FsRtlEnterFileSystem
_Out_ PANSI_STRING _Out_ PANSI_STRING RemainingPart
#define FsRtlExitFileSystem
#define OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY
#define OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK
VOID NTAPI CcSetFileSizes(IN PFILE_OBJECT FileObject, IN PCC_FILE_SIZES FileSizes)
BOOLEAN NTAPI CcUninitializeCacheMap(IN PFILE_OBJECT FileObject, IN OPTIONAL PLARGE_INTEGER TruncateSize, IN OPTIONAL PCACHE_UNINITIALIZE_EVENT UninitializeEvent)
BOOLEAN NTAPI CcPurgeCacheSection(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN OPTIONAL PLARGE_INTEGER FileOffset, IN ULONG Length, IN BOOLEAN UninitializeCacheMaps)
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
#define FILE_OPEN_REQUIRING_OPLOCK
NTSYSAPI NTSTATUS WINAPI RtlDowncaseUnicodeString(UNICODE_STRING *, const UNICODE_STRING *, BOOLEAN)
NTSYSAPI NTSTATUS WINAPI RtlUpcaseUnicodeStringToCountedOemString(STRING *, const UNICODE_STRING *, BOOLEAN)
#define EXCEPTION_EXECUTE_HANDLER
#define EXCEPTION_CONTINUE_SEARCH
#define InterlockedCompareExchangePointer
BOOLEAN NTAPI CcIsThereDirtyData(IN PVPB Vpb)
#define SE_SECURITY_PRIVILEGE
DRIVER_DISPATCH(nfs41_FsdDispatch)
#define _Outptr_result_maybenull_
#define _Function_class_(n)
#define FILE_DOES_NOT_EXIST
#define FILE_ATTRIBUTE_READONLY
#define ACCESS_SYSTEM_SECURITY
#define FILE_ATTRIBUTE_HIDDEN
ACCESS_MASK * PACCESS_MASK
#define FILE_ATTRIBUTE_SYSTEM
#define FILE_SHARE_DELETE
#define FILE_WRITE_ATTRIBUTES
#define FILE_ATTRIBUTE_ARCHIVE
#define FILE_ATTRIBUTE_TEMPORARY
#define UNREFERENCED_PARAMETER(P)
#define ARGUMENT_PRESENT(ArgumentPointer)
#define FILE_ATTRIBUTE_ENCRYPTED
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
PVOID NTAPI FsRtlAllocatePoolWithTag(IN POOL_TYPE PoolType, IN ULONG NumberOfBytes, IN ULONG Tag)
VOID NTAPI FsRtlDissectName(IN UNICODE_STRING Name, OUT PUNICODE_STRING FirstPart, OUT PUNICODE_STRING RemainingPart)
VOID NTAPI IoSetShareAccess(IN ACCESS_MASK DesiredAccess, IN ULONG DesiredShareAccess, IN PFILE_OBJECT FileObject, OUT PSHARE_ACCESS ShareAccess)
NTSTATUS NTAPI IoCheckShareAccess(IN ACCESS_MASK DesiredAccess, IN ULONG DesiredShareAccess, IN PFILE_OBJECT FileObject, IN PSHARE_ACCESS ShareAccess, IN BOOLEAN Update)
VOID NTAPI IoRemoveShareAccess(IN PFILE_OBJECT FileObject, IN PSHARE_ACCESS ShareAccess)
VOID NTAPI IoUpdateShareAccess(IN PFILE_OBJECT FileObject, OUT PSHARE_ACCESS ShareAccess)
#define IoCompleteRequest
VOID NTAPI IoSetTopLevelIrp(IN PIRP Irp)
VOID NTAPI IoSetHardErrorOrVerifyDevice(IN PIRP Irp, IN PDEVICE_OBJECT DeviceObject)
BOOLEAN NTAPI SeSinglePrivilegeCheck(_In_ LUID PrivilegeValue, _In_ KPROCESSOR_MODE PreviousMode)
Checks if a single privilege is present in the context of the calling thread.
#define STATUS_DELETE_PENDING
#define STATUS_VOLUME_DISMOUNTED
#define STATUS_USER_MAPPED_FILE
#define STATUS_FILE_INVALID
#define STATUS_EAS_NOT_SUPPORTED
#define STATUS_OPLOCK_BREAK_IN_PROGRESS
#define STATUS_CANNOT_BREAK_OPLOCK
#define STATUS_UNMAPPABLE_CHARACTER
BOOLEAN NTAPI FsRtlCurrentBatchOplock(IN POPLOCK Oplock)
NTSTATUS NTAPI FsRtlOplockFsctrl(IN POPLOCK Oplock, IN PIRP Irp, IN ULONG OpenCount)
NTSTATUS NTAPI FsRtlCheckOplock(IN POPLOCK Oplock, IN PIRP Irp, IN PVOID Context, IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL, IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL)
#define _SEH2_AbnormalTermination()
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_GetExceptionInformation()
#define AbnormalTermination()
#define GetExceptionInformation()
#define GetExceptionCode()
#define KERNEL_STACK_SIZE
BOOLEAN NTAPI MmCanFileBeTruncated(_In_ PSECTION_OBJECT_POINTERS SectionObjectPointer, _In_opt_ PLARGE_INTEGER NewFileSize)
BOOLEAN NTAPI MmFlushImageSection(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN MMFLUSH_TYPE FlushType)
#define STATUS_CANNOT_DELETE
#define STATUS_MORE_PROCESSING_REQUIRED
union _CCB::@761::@763::@765 OemQueryTemplate
UNICODE_STRING UnicodeQueryTemplate
BOOLEAN ContainsWildCards
struct _FAT_CALLOUT_PARAMETERS::@768::@770 Create
LIST_ENTRY AsyncCloseList
LIST_ENTRY DelayedCloseList
UNICODE_STRING ExactCaseLongName
UNICODE_STRING FullFileName
ULONG EaModificationCount
struct _FCB::@757::@759 Dcb
FCB_CONDITION FcbCondition
LARGE_INTEGER LastWriteTime
FSRTL_ADVANCED_FCB_HEADER Header
CLONG NonCachedUncleanCount
union _FCB::@757 Specific
union _FILE_NAME_NODE::@756 Name
union _IO_STACK_LOCATION::@1610 Parameters
PDEVICE_OBJECT DeviceObject
struct _IO_STACK_LOCATION::@4103::@4104 Create
SECTION_OBJECT_POINTERS SectionObjectPointers
BOOLEAN NTAPI KeCancelTimer(IN OUT PKTIMER Timer)
BOOLEAN NTAPI FsRtlFindInTunnelCache(IN PTUNNEL Cache, IN ULONGLONG DirectoryKey, IN PUNICODE_STRING Name, OUT PUNICODE_STRING ShortName, OUT PUNICODE_STRING LongName, IN OUT PULONG DataLength, OUT PVOID Data)
union _LARGE_INTEGER LARGE_INTEGER
#define RtlCopyMemory(Destination, Source, Length)
#define RtlMoveMemory(Destination, Source, Length)
#define STATUS_FILE_IS_A_DIRECTORY
#define STATUS_NOT_A_DIRECTORY
#define STATUS_MEDIA_WRITE_PROTECTED
#define STATUS_ACCESS_DENIED
#define STATUS_OBJECT_PATH_NOT_FOUND
#define STATUS_INVALID_PARAMETER
#define STATUS_OBJECT_NAME_COLLISION
#define STATUS_VERIFY_REQUIRED
#define STATUS_SHARING_VIOLATION
#define STATUS_OBJECT_NAME_INVALID
#define STATUS_INSUFFICIENT_RESOURCES
#define STATUS_OBJECT_NAME_NOT_FOUND
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options
_Must_inspect_result_ _In_opt_ WDFKEY _In_ PCUNICODE_STRING _In_ ACCESS_MASK _In_ ULONG _Out_opt_ PULONG CreateDisposition
_In_ ACCESS_MASK _In_ POBJECT_ATTRIBUTES _Out_ PIO_STATUS_BLOCK _In_opt_ PLARGE_INTEGER _In_ ULONG _In_ ULONG _In_ ULONG _In_ ULONG _In_opt_ PVOID EaBuffer
#define FILE_OPBATCH_BREAK_UNDERWAY
#define SL_OPEN_PAGING_FILE
#define FILE_NOTIFY_CHANGE_SIZE
#define FILE_ACTION_MODIFIED
#define SL_FORCE_ACCESS_CHECK
#define FO_FILE_FAST_IO_READ
#define FILE_NOTIFY_CHANGE_ATTRIBUTES
#define FILE_NOTIFY_CHANGE_FILE_NAME
#define IO_DISK_INCREMENT
#define FO_NO_INTERMEDIATE_BUFFERING
#define FO_CACHE_SUPPORTED
#define FILE_NOTIFY_CHANGE_LAST_WRITE
#define FILE_NOTIFY_CHANGE_EA
#define SL_OPEN_TARGET_DIRECTORY
#define FILE_ACTION_ADDED
#define FILE_NOTIFY_CHANGE_DIR_NAME
#define ObDereferenceObject
_In_ __drv_aliasesMem PSTRING Prefix
_In_opt_ PVOID _In_opt_ PUNICODE_STRING _In_ PSECURITY_DESCRIPTOR _In_ PACCESS_STATE AccessState
_In_opt_ HANDLE _In_opt_ PIO_APC_ROUTINE _In_opt_ PVOID _Out_ PIO_STATUS_BLOCK _In_ ULONG NotifyFilter