430 ULONG RequestedDisposition, RequestedOptions;
445 RequestedDisposition = ((
Stack->Parameters.Create.Options >> 24) & 0xff);
481 FileObject->RelatedFileObject->FsContext == DeviceExt->VolumeFcb))
483 DPRINT(
"Volume opening\n");
509 pFcb = DeviceExt->VolumeFcb;
514 Stack->Parameters.Create.ShareAccess,
521 Stack->Parameters.Create.ShareAccess,
533 DeviceExt->OpenHandleCount++;
542 FileObject->RelatedFileObject->FsContext == DeviceExt->VolumeFcb)
556 if (*
c ==
L'\\' ||
c == PathNameU.
Buffer)
558 if (Dots &&
last >
c)
562 if (*
c ==
L'\\' && (
c - 1) > PathNameU.
Buffer &&
594 TrailingBackslash =
FALSE;
598 TrailingBackslash =
TRUE;
697 Stack->Parameters.Create.ShareAccess,
704 Stack->Parameters.Create.ShareAccess,
723 DeviceExt->OpenHandleCount++;
762 DPRINT1(
"VfatOpenFile failed for '%wZ', status %x\n", &PathNameU,
Status);
783 if (TrailingBackslash)
816 &
Irp->Overlay.AllocationSize);
818 Irp->AssociatedIrp.SystemBuffer,
819 Stack->Parameters.Create.EaLength);
821 if (PagingFileCreate)
866 Stack->Parameters.Create.ShareAccess,
901 #ifndef USE_ROS_CC_AND_FS 922 if (PagingFileCreate)
1004 &
Irp->Overlay.AllocationSize);
1032 Stack->Parameters.Create.ShareAccess,
1066 DeviceExt->OpenHandleCount++;
#define KeQuerySystemTime(t)
unsigned short UpdateTime
#define STATUS_OBJECT_NAME_COLLISION
NTSTATUS VfatSetAllocationSizeInformation(PFILE_OBJECT FileObject, PVFATFCB Fcb, PDEVICE_EXTENSION DeviceExt, PLARGE_INTEGER AllocationSize)
#define STATUS_DELETE_PENDING
SECTION_OBJECT_POINTERS SectionObjectPointers
#define STATUS_FILE_IS_A_DIRECTORY
NTSTATUS VfatCloseFile(PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject)
unsigned short UpdateDate
#define CCB_DELETE_ON_CLOSE
#define SL_OPEN_PAGING_FILE
#define STATUS_INVALID_PARAMETER
#define FILE_ATTRIBUTE_SYSTEM
#define BooleanFlagOn(F, SF)
if(OpenRequiringOplock &&(Iosb.Status==STATUS_SUCCESS))
#define FILE_DIRECTORY_FILE
NTSTATUS vfatAttachFCBToFileObject(PDEVICE_EXTENSION vcb, PVFATFCB fcb, PFILE_OBJECT fileObject)
FORCEINLINE BOOLEAN vfatFCBIsDirectory(PVFATFCB FCB)
#define FILE_NOTIFY_CHANGE_SIZE
#define FILE_NOTIFY_CHANGE_LAST_WRITE
#define vfatAddToStat(Vcb, Stat, Inc)
#define FILE_NOTIFY_CHANGE_FILE_NAME
VOID NTAPI IoSetShareAccess(IN ACCESS_MASK DesiredAccess, IN ULONG DesiredShareAccess, IN PFILE_OBJECT FileObject, OUT PSHARE_ACCESS ShareAccess)
NTSTATUS VfatSetExtendedAttributes(PFILE_OBJECT FileObject, PVOID Ea, ULONG EaLength)
#define FILE_NOTIFY_CHANGE_DIR_NAME
#define FILE_VALID_OPTION_FLAGS
#define FILE_OPEN_BY_FILE_ID
#define RtlMoveMemory(Destination, Source, Length)
BOOLEAN NTAPI ExAcquireResourceExclusiveLite(IN PERESOURCE Resource, IN BOOLEAN Wait)
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
_In_ PDEVICE_OBJECT DeviceObject
return STATUS_NOT_IMPLEMENTED
#define STATUS_NOT_A_DIRECTORY
BOOLEAN FsdSystemTimeToDosDateTime(PDEVICE_EXTENSION DeviceExt, PLARGE_INTEGER SystemTime, PUSHORT pDosDate, PUSHORT pDosTime)
#define STATUS_SHARING_VIOLATION
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT FileObject
#define FILE_ACTION_MODIFIED
SHARE_ACCESS FCBShareAccess
#define FILE_OVERWRITE_IF
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
#define FILE_ATTRIBUTE_DIRECTORY
FORCEINLINE BOOLEAN vfatVolumeIsFatX(PDEVICE_EXTENSION DeviceExt)
#define FILE_DELETE_ON_CLOSE
#define NT_SUCCESS(StatCode)
BOOLEAN NTAPI MmFlushImageSection(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN MMFLUSH_TYPE FlushType)
FORCEINLINE NTSTATUS VfatAddEntry(PDEVICE_EXTENSION DeviceExt, PUNICODE_STRING NameU, struct _VFATFCB **Fcb, struct _VFATFCB *ParentFcb, ULONG RequestedOptions, UCHAR ReqAttr, struct _VFAT_MOVE_CONTEXT *MoveContext)
#define FILE_ATTRIBUTE_READONLY
#define STATUS_OBJECT_PATH_NOT_FOUND
#define STATUS_ACCESS_DENIED
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
#define FILE_ATTRIBUTE_ARCHIVE
#define FILE_DOES_NOT_EXIST
#define STATUS_CANNOT_DELETE
#define FILE_NON_DIRECTORY_FILE
BOOLEAN IsDotOrDotDot(PCUNICODE_STRING Name)
NTSTATUS NTAPI IoCheckShareAccess(IN ACCESS_MASK DesiredAccess, IN ULONG DesiredShareAccess, IN PFILE_OBJECT FileObject, IN PSHARE_ACCESS ShareAccess, IN BOOLEAN Update)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
#define SL_OPEN_TARGET_DIRECTORY
FORCEINLINE VOID vfatReportChange(IN PDEVICE_EXTENSION DeviceExt, IN PVFATFCB Fcb, IN ULONG FilterMatch, IN ULONG Action)
#define FILE_NOTIFY_CHANGE_ATTRIBUTES
#define STATUS_OBJECT_NAME_INVALID
#define VCB_IS_SYS_OR_HAS_PAGE
#define FILE_ATTRIBUTE_HIDDEN
#define VCB_VOLUME_LOCKED
#define FILE_ACTION_ADDED
BOOLEAN vfatIsLongIllegal(WCHAR c)
NTSTATUS VfatUpdateEntry(IN PDEVICE_EXTENSION DeviceExt, IN PVFATFCB pFcb)
VOID vfatGrabFCB(PDEVICE_EXTENSION pVCB, PVFATFCB pFCB)
static NTSTATUS VfatOpenFile(PDEVICE_EXTENSION DeviceExt, PUNICODE_STRING PathNameU, PFILE_OBJECT FileObject, ULONG RequestedDisposition, ULONG RequestedOptions, PVFATFCB *ParentFcb)
unsigned short UpdateDate
VOID vfatReleaseFCB(PDEVICE_EXTENSION pVCB, PVFATFCB pFCB)
NTSTATUS vfatGetFCBForFile(PDEVICE_EXTENSION pVCB, PVFATFCB *pParentFCB, PVFATFCB *pFCB, PUNICODE_STRING pFileNameU)
unsigned short UpdateTime
VOID vfatSplitPathName(PUNICODE_STRING PathNameU, PUNICODE_STRING DirNameU, PUNICODE_STRING FileNameU)
VOID NTAPI IoUpdateShareAccess(IN PFILE_OBJECT FileObject, OUT PSHARE_ACCESS ShareAccess)
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes