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; }
2642 RootDcb =
Vcb->RootDcb;
2649 (
VOID)FatAcquireExclusiveFcb( IrpContext, RootDcb );
2650 RootDcbAcquired =
TRUE;
2697 UnwindShareAccess =
TRUE;
2711 Vcb->OpenFileCount += 1;
2713 UnwindCounts =
TRUE;
2736 Vcb->OpenFileCount -= 1;
2743 if (RootDcbAcquired) {
2821#if (NTDDI_VERSION <= NTDDI_WIN7)
2836 (
VOID)FatAcquireExclusiveFcb( IrpContext,
Dcb );
2842 *OplockPostIrp =
FALSE;
2856#if (NTDDI_VERSION >= NTDDI_WIN8)
2864 IrpContext->OriginatingIrp,
2893 FatGetDirentFromFcbOrDcb( IrpContext,
2899 FatGetNeedEaCount( IrpContext,
2925 Dcb->DirentFatFlags,
2937 if (
Dcb->OpenCount > 0) {
2944#if (NTDDI_VERSION >= NTDDI_WIN8)
2959 IrpContext->OriginatingIrp,
2973 *OplockPostIrp =
TRUE;
2980 }
else if (!
NT_SUCCESS( OplockBreakStatus )) {
2982 Iosb.Status = OplockBreakStatus;
3016#if (NTDDI_VERSION >= NTDDI_WIN8)
3024 if (
Dcb->UncleanCount != 0) {
3027 IrpContext->OriginatingIrp,
3040 *OplockPostIrp =
TRUE;
3054 IrpContext->OriginatingIrp,
3055 (
Dcb->UncleanCount + 1) );
3080 if (
Dcb->OpenCount > 0) {
3092 UnwindShareAccess =
TRUE;
3104 Dcb->UncleanCount += 1;
3105 Dcb->OpenCount += 1;
3106 Vcb->OpenFileCount += 1;
3168 DebugTrace(-1,
Dbg,
"FatOpenExistingDcb -> Iosb.Status = %08lx\n",
Iosb.Status);
3278 (
VOID)FatAcquireExclusiveFcb( IrpContext,
Fcb );
3284 *OplockPostIrp =
FALSE;
3286#if (NTDDI_VERSION >= NTDDI_WIN7)
3294 IrpContext->OriginatingIrp,
3321 IrpContext->OriginatingIrp,
3333 *OplockPostIrp =
TRUE;
3413 DebugTrace(0,
Dbg,
"The hidden and/or system bits do not match\n", 0);
3433 Vcb->Vpb->RealDevice );
3452#if (NTDDI_VERSION >= NTDDI_WIN7)
3467 IrpContext->OriginatingIrp,
3481 *OplockPostIrp =
TRUE;
3488 }
else if (!
NT_SUCCESS( OplockBreakStatus )) {
3490 Iosb.Status = OplockBreakStatus;
3538 IrpContext->OriginatingIrp,
3551 *OplockPostIrp =
TRUE;
3565 IrpContext->OriginatingIrp,
3601 DecrementFcbOpenCount =
TRUE;
3604 MmFlushForWrite )) {
3672 FatGetDirentFromFcbOrDcb( IrpContext,
3678 FatGetNeedEaCount( IrpContext,
3725 DebugTrace(0,
Dbg,
"Doing supersede/overwrite operation\n", 0);
3732 OldStatus =
Iosb.Status;
3747 Iosb = FatSupersedeOrOverwriteFile( IrpContext,
3759 Iosb.Status = OldStatus;
3770#pragma prefast( suppress:28159, "things are seriously wrong if we get here" )
3797#pragma prefast( suppress:28931, "it needs to be there for debug assert" );
3817 UnwindShareAccess =
TRUE;
3830 Vcb->OpenFileCount += 1;
3864 IrpContext->OriginatingIrp->RequestorMode ))) {
3893 if (DecrementFcbOpenCount) {
3902 FcbAcquired =
FALSE;
3911 DebugTrace(-1,
Dbg,
"FatOpenExistingFcb -> Iosb.Status = %08lx\n",
Iosb.Status);
3923FatOpenTargetDirectory (
3980 (
VOID)FatAcquireExclusiveFcb( IrpContext,
Dcb );
3992 if (
Dcb->OpenCount > 0) {
4011 UnwindShareAccess =
TRUE;
4023 Dcb->UncleanCount += 1;
4024 Dcb->OpenCount += 1;
4025 Dcb->Vcb->OpenFileCount += 1;
4118 DebugTrace(-1,
Dbg,
"FatOpenTargetDirectory -> Iosb.Status = %08lx\n",
Iosb.Status);
4133#pragma warning(suppress:6101)
4135FatOpenExistingDirectory (
4217#if (NTDDI_VERSION <= NTDDI_WIN7)
4237 FatGetNeedEaCount( IrpContext,
4280#if (NTDDI_VERSION >= NTDDI_WIN8)
4288 IrpContext->OriginatingIrp,
4304 IrpContext->OriginatingIrp,
4305 ((*Dcb)->UncleanCount + 1) );
4340 (*Dcb)->UncleanCount += 1;
4341 (*Dcb)->OpenCount += 1;
4383 (*Dcb)->UncleanCount -= 1;
4384 (*Dcb)->OpenCount -= 1;
4385 Vcb->OpenFileCount -= 1;
4412FatOpenExistingFile (
4516#if (NTDDI_VERSION < NTDDI_WIN7)
4590 DebugTrace(0,
Dbg,
"The hidden and/or system bits do not match\n", 0);
4592 if ( !IsPagingFile ) {
4613 Vcb->Vpb->RealDevice );
4638 (*Fcb)->Header.ValidDataLength.LowPart = (*Fcb)->Header.FileSize.LowPart;
4647 FatLookupFileAllocationSize( IrpContext, *
Fcb );
4650#if (NTDDI_VERSION >= NTDDI_WIN7)
4658 IrpContext->OriginatingIrp,
4674 IrpContext->OriginatingIrp,
4675 ((*Fcb)->UncleanCount + 1) );
4712 FatGetNeedEaCount( IrpContext,
4732 FileObject->SectionObjectPointer = &(*Fcb)->NonPaged->SectionObjectPointers;
4742 DebugTrace(0,
Dbg,
"Doing supersede/overwrite operation\n", 0);
4753 Iosb = FatSupersedeOrOverwriteFile( IrpContext,
4769#pragma prefast( suppress:28159, "things are seriously wrong if we get here" )
4795 (*Fcb)->UncleanCount += 1;
4796 (*Fcb)->OpenCount += 1;
4798 (*Fcb)->NonCachedUncleanCount += 1;
4800 Vcb->OpenFileCount += 1;
4839 IrpContext->OriginatingIrp->RequestorMode ))) {
4859 (*Fcb)->UncleanCount -= 1;
4860 (*Fcb)->OpenCount -= 1;
4862 (*Fcb)->NonCachedUncleanCount -= 1;
4864 Vcb->OpenFileCount -= 1;
4868 if (UnwindFcb !=
NULL) {
4879 DebugTrace(-1,
Dbg,
"FatOpenExistingFile -> Iosb.Status = %08lx\n",
Iosb.Status);
4892FatCreateNewDirectory (
4969 ULONG ShortDirentByteOffset;
4977 ULONG BytesInFirstPage = 0;
4978 ULONG DirentsInFirstPage = 0;
4982 ULONG SecondPageOffset;
4989 UCHAR ShortNameBuffer[12];
4991#if (NTDDI_VERSION <= NTDDI_WIN7)
5016 DebugTrace(-1,
Dbg,
"FatCreateNewDirectory -> Iosb.Status = %08lx\n",
Iosb.Status);
5033 FatSelectNames( IrpContext,
5066 FatPrepareWriteDirectoryFile( IrpContext,
5098 DirentsInFirstPage = BytesInFirstPage /
sizeof(
DIRENT);
5100 FatPrepareWriteDirectoryFile( IrpContext,
5108 (
PVOID *)&SecondPageDirent,
5116 FirstPageDirent =
Dirent;
5122 DirentFromPool =
TRUE;
5154 if (DirentFromPool) {
5159 Dirent + DirentsInFirstPage,
5162 ShortDirent = SecondPageDirent + (
DirentsNeeded - DirentsInFirstPage) - 1;
5173 ShortDirentByteOffset,
5177#if (NTDDI_VERSION >= NTDDI_WIN8)
5191 IrpContext->OriginatingIrp,
5207 IrpContext->OriginatingIrp,
5208 (
Dcb->UncleanCount + 1) );
5221 IrpContext->OriginatingIrp,
5222 OPLOCK_FLAG_PARENT_OBJECT,
5249 FatCreateEa( IrpContext,
5253 &
Dcb->ShortName.Name.Oem,
5259 ShortDirent->ExtendedAttributes =
EaHandle;
5273 FatInitializeDirectoryDirent( IrpContext,
Dcb, ShortDirent );
5323 Dcb->UncleanCount += 1;
5324 Dcb->OpenCount += 1;
5325 Vcb->OpenFileCount += 1;
5346 Iosb.Status = IrpContext->ExceptionStatus;
5365#pragma prefast( suppress: 28924, "prefast thinks this test is redundant, but DCB can be NULL depending on where we raise" )
5394 if (DirentFromPool ==
FALSE) {
5409 if ((SecondPageBcb ==
NULL) &&
5410 (
i == DirentsInFirstPage)) {
5419 if (
i < DirentsInFirstPage) {
5451 if (DirentFromPool) {
5459#pragma prefast( suppress: 28924, "prefast thinks this test is redundant, but DCB can be NULL depending on where we raise" )
5471 DirectoryFileObject =
Dcb->Specific.Dcb.DirectoryFile;
5501 if (
Dcb->FirstClusterOfFile != 0) {
5505 Dcb->Header.FileSize.LowPart = 0;
5514 FatTruncateFileAllocation( IrpContext,
Dcb, 0 );
5525 if (DirectoryFileObject !=
NULL) {
5528 DirectoryFileObject );
5559 if (DirectoryFileObject !=
NULL) {
5566 Dcb->Specific.Dcb.DirectoryFile =
NULL;
5579#pragma prefast( suppress: 28924, "prefast thinks this test is redundant, but FileObject can be NULL depending on where we raise" )
5588 DebugTrace(-1,
Dbg,
"FatCreateNewDirectory -> Iosb.Status = %08lx\n",
Iosb.Status);
5696 ULONG ShortDirentByteOffset;
5704 ULONG BytesInFirstPage = 0;
5705 ULONG DirentsInFirstPage = 0;
5709 ULONG SecondPageOffset;
5715 UCHAR ShortNameBuffer[12];
5718 WCHAR UniTunneledShortNameBuffer[12];
5720 WCHAR UniTunneledLongNameBuffer[26];
5722 ULONG TunneledDataSize;
5723 BOOLEAN HaveTunneledInformation;
5741#if (NTDDI_VERSION < NTDDI_WIN7)
5750 ShortName.MaximumLength =
sizeof(ShortNameBuffer);
5753 UniTunneledShortName.
Length = 0;
5754 UniTunneledShortName.
MaximumLength =
sizeof(UniTunneledShortNameBuffer);
5755 UniTunneledShortName.
Buffer = &UniTunneledShortNameBuffer[0];
5757 UniTunneledLongName.
Length = 0;
5758 UniTunneledLongName.
MaximumLength =
sizeof(UniTunneledLongNameBuffer);
5759 UniTunneledLongName.
Buffer = &UniTunneledLongNameBuffer[0];
5794 &UniTunneledShortName,
5795 &UniTunneledLongName,
5797 &TunneledCreationTime );
5804 FatSelectNames( IrpContext,
5809 (HaveTunneledInformation? &UniTunneledShortName :
NULL),
5835 UniTunneledLongName.
Length &&
5836 !FatLfnDirentExists(IrpContext,
ParentDcb, &UniTunneledLongName, LfnBuffer)) {
5838 UsingTunneledLfn =
TRUE;
5841 RealUnicodeName = &UniTunneledLongName;
5866 FatPrepareWriteDirectoryFile( IrpContext,
5900 DirentsInFirstPage = BytesInFirstPage /
sizeof(
DIRENT);
5902 FatPrepareWriteDirectoryFile( IrpContext,
5910 (
PVOID *)&SecondPageDirent,
5918 FirstPageDirent =
Dirent;
5924 DirentFromPool =
TRUE;
5950 (HaveTunneledInformation ? &TunneledCreationTime :
NULL) );
5956 if (DirentFromPool) {
5961 Dirent + DirentsInFirstPage,
5964 ShortDirent = SecondPageDirent + (
DirentsNeeded - DirentsInFirstPage) - 1;
5977 ShortDirentByteOffset,
5983 UnwindDirent =
NULL;
5985#if (NTDDI_VERSION >= NTDDI_WIN7)
5999 IrpContext->OriginatingIrp,
6015 IrpContext->OriginatingIrp,
6020#if (NTDDI_VERSION >= NTDDI_WIN8)
6031 IrpContext->OriginatingIrp,
6032 OPLOCK_FLAG_PARENT_OBJECT,
6054 if (TemporaryFile) {
6068 UnwindAllocation =
TRUE;
6078 FatCreateEa( IrpContext,
6088 ShortDirent->ExtendedAttributes =
EaHandle;
6139 Vcb->OpenFileCount += 1;
6172 if ( !
CreateLfn && !UsingTunneledLfn ) {
6185 IrpContext->OriginatingIrp->RequestorMode ))) {
6197 if (UniTunneledLongName.
Buffer != UniTunneledLongNameBuffer) {
6216 if (LocalAbnormalTermination) {
6224 Vcb->OpenFileCount -= 1;
6228 if (UnwindFcb ==
NULL) {
6245 if (UnwindDirent !=
NULL) {
6251 if (DirentFromPool ==
FALSE) {
6266 if ((SecondPageBcb ==
NULL) &&
6267 (
i == DirentsInFirstPage)) {
6276 if (
i < DirentsInFirstPage) {
6298 if (LocalAbnormalTermination) {
6299 if (UnwindAllocation) {
6300 FatTruncateFileAllocation( IrpContext,
Fcb, 0 );
6308 if (LocalAbnormalTermination) {
6309 if (UnwindFcb !=
NULL) {
6310 FatDeleteDirent( IrpContext, UnwindFcb,
NULL,
TRUE );
6316 if (LocalAbnormalTermination) {
6317 if (UnwindFcb !=
NULL) {
6333 if (DirentFromPool) {
6354FatSupersedeOrOverwriteFile (
6411 ULONG HeaderSize = 0;
6436 DebugTrace(-1,
Dbg,
"FatSupersedeOrOverwriteFile -> Iosb.Status = %08lx\n",
Iosb.Status);
6481 FatCreateEa( IrpContext,
6492#if (NTDDI_VERSION >= NTDDI_WIN8)
6501 IrpContext->OriginatingIrp,
6502 OPLOCK_FLAG_PARENT_OBJECT,
6520 ReleasePaging =
TRUE;
6523 Fcb->
Header.ValidDataLength.LowPart = 0;
6551 ReleasePaging =
FALSE;
6564 FatGetDirentFromFcbOrDcb( IrpContext,
6594 (
VOID)FatNtTimeToFatTime( IrpContext,
6625 FatDeleteEa( IrpContext,
6627 Dirent->ExtendedAttributes,
6654 FatSetDirtyBcb( IrpContext, DirentBcb,
Fcb->
Vcb,
TRUE );
6710 DebugTrace(-1,
Dbg,
"FatSupersedeOrOverwriteFile -> Iosb.Status = %08lx\n",
Iosb.Status);
6787 &FinalName->Buffer[0],
6788 FinalName->Length );
6820 &FinalName->Buffer[0],
6821 FinalName->Length );
6904#if (NTDDI_VERSION >= NTDDI_VISTA)
ULONG NTAPI MmDoesFileHaveUserWritableReferences(IN PSECTION_OBJECT_POINTERS SectionPointer)
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 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 EXCEPTION_EXECUTE_HANDLER
#define EXCEPTION_CONTINUE_SEARCH
#define FILE_OPEN_REQUIRING_OPLOCK
NTSYSAPI NTSTATUS WINAPI RtlDowncaseUnicodeString(UNICODE_STRING *, const UNICODE_STRING *, BOOLEAN)
NTSYSAPI NTSTATUS WINAPI RtlUpcaseUnicodeStringToCountedOemString(STRING *, const UNICODE_STRING *, BOOLEAN)
NTSYSAPI void WINAPI RtlClearBits(PRTL_BITMAP, ULONG, ULONG)
NTSYSAPI BOOLEAN WINAPI RtlAreBitsSet(PCRTL_BITMAP, ULONG, ULONG)
HRESULT Create([out]ITransactionReceiver **ppReceiver)
#define InterlockedCompareExchangePointer
BOOLEAN NTAPI CcIsThereDirtyData(IN PVPB Vpb)
#define SE_SECURITY_PRIVILEGE
#define _Function_class_(x)
#define _Outptr_result_maybenull_
DRIVER_DISPATCH(nfs41_FsdDispatch)
#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_NOT_IMPLEMENTED
#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 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 AbnormalTermination()
#define GetExceptionInformation()
#define GetExceptionCode()
#define STATUS_CANNOT_DELETE
#define STATUS_MORE_PROCESSING_REQUIRED
UNICODE_STRING UnicodeQueryTemplate
union _CCB::@723::@725::@727 OemQueryTemplate
BOOLEAN ContainsWildCards
struct _FAT_CALLOUT_PARAMETERS::@730::@732 Create
LIST_ENTRY AsyncCloseList
LIST_ENTRY DelayedCloseList
union _FCB::@719 Specific
UNICODE_STRING ExactCaseLongName
UNICODE_STRING FullFileName
ULONG EaModificationCount
FCB_CONDITION FcbCondition
LARGE_INTEGER LastWriteTime
FSRTL_ADVANCED_FCB_HEADER Header
struct _FCB::@719::@721 Dcb
CLONG NonCachedUncleanCount
union _FILE_NAME_NODE::@718 Name
PDEVICE_OBJECT DeviceObject
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
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
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
#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