687 USHORT ExtendedAttributes;
690 ULONG UserBufferLength;
735 DebugTrace( 0,
Dbg,
" ->SystemBuffer = %p\n",
Irp->AssociatedIrp.SystemBuffer );
739 Irp->IoStatus.Information = 0;
760 "FatCommonSetEa -> %08lx\n",
775 "FatCommonSetEa -> %08lx\n",
810 "FatCommonSetEa -> %08lx\n",
829 DebugTrace(0,
Dbg,
"FatCommonSetEa: Set Ea must be waitable\n", 0);
848 ULONG PackedEasLength;
850 ULONG AllocationLength;
851 ULONG BytesPerCluster;
870 AcquiredParentDcb =
TRUE;
874 AcquiredRootDcb =
TRUE;
901 ExtendedAttributes =
Dirent->ExtendedAttributes;
905 if (ExtendedAttributes == 0) {
910 "FatCommonSetEa: File has no current Eas\n", 0 );
916 DebugTrace(0,
Dbg,
"FatCommonSetEa: File has previous Eas\n", 0 );
925 AcquiredEaFcb =
TRUE;
932 if (
Vcb->VirtualEaFile ==
NULL) {
969 PackedEasLength =
GetcbList( PrevEaSetHeader ) - 4;
980 BytesPerCluster = 1 <<
Vcb->AllocationSupport.LogOfBytesPerCluster;
982 AllocationLength = (PackedEasLength
984 + BytesPerCluster - 1)
985 & ~(BytesPerCluster - 1);
997 RtlCopyMemory( EaSetHeader, PrevEaSetHeader, AllocationLength );
1013 DebugTrace(0,
Dbg,
"FatCommonSetEa: Initial Ea set -> %p\n",
1026 &
Buffer[UserBufferLength] :
1027 (
PUCHAR) FullEa + FullEa->NextEntryOffset)) {
1032 EaName.MaximumLength = EaName.Length = FullEa->EaNameLength;
1033 EaName.Buffer = &FullEa->EaName[0];
1058 if (FullEa->Flags != 0
1089 if (FullEa->EaValueLength != 0) {
1105 if (PackedEasLength != 0) {
1118 DebugTrace( 0,
Dbg,
"Ea length is greater than maximum\n", 0 );
1136 AcquiredEaFcb =
TRUE;
1153 DebugTrace(0,
Dbg,
"FatCommonSetEa: Adding an ea set\n", 0);
1160 PackedEasLength += 4;
1202 if (PackedEasLength != 0 ) {
1226 Irp->IoStatus.Information = 0;
1265 if (AcquiredEaFcb) {
1273 if (AcquiredParentDcb) {
1277 if (AcquiredRootDcb) {
1289 if (EaSetHeader !=
NULL) {
#define STATUS_EAS_NOT_SUPPORTED
#define IRP_CONTEXT_FLAG_WAIT
IN PVCB IN VBO IN ULONG OUT PBCB * Bcb
PVOID NTAPI FsRtlAllocatePoolWithTag(IN POOL_TYPE PoolType, IN ULONG NumberOfBytes, IN ULONG Tag)
VOID NTAPI CcFlushCache(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN OPTIONAL PLARGE_INTEGER FileOffset, IN ULONG Length, OUT OPTIONAL PIO_STATUS_BLOCK IoStatus)
struct _FILE_FULL_EA_INFORMATION * PFILE_FULL_EA_INFORMATION
#define FatCompleteRequest(IRPCONTEXT, IRP, STATUS)
IN BOOLEAN OUT PSTR Buffer
#define STATUS_INVALID_PARAMETER
#define IRP_CONTEXT_FLAG_WRITE_THROUGH
VOID FatUnpinRepinnedBcbs(IN PIRP_CONTEXT IrpContext)
BOOLEAN FatIsEaNameValid(IN PIRP_CONTEXT IrpContext, IN OEM_STRING Name)
#define FatNotifyReportChange(I, V, F, FL, A)
VOID FatMarkEaRangeDirty(IN PIRP_CONTEXT IrpContext, IN PFILE_OBJECT EaFileObject, IN OUT PEA_RANGE EaRange)
#define DebugTrace(INDENT, LEVEL, X, Y)
#define STATUS_NO_EAS_ON_FILE
PEXT2_IRP_CONTEXT IrpContext
VOID FatUnpinEaRange(IN PIRP_CONTEXT IrpContext, IN OUT PEA_RANGE EaRange)
#define STATUS_INVALID_DEVICE_REQUEST
IN PVCB IN PUCHAR IN ULONG IN POEM_STRING OUT PUSHORT EaHandle
#define CopyU4char(Dst, Src)
PVOID FatBufferUserBuffer(IN PIRP_CONTEXT IrpContext, IN OUT PIRP Irp, IN ULONG BufferLength)
ULONG EaModificationCount
NTSTATUS FatCommonSetEa(IN PIRP_CONTEXT IrpContext, IN PIRP Irp)
#define STATUS_EA_TOO_LARGE
IN OUT PVCB OUT PDIRENT * EaDirent
VOID FatReadEaSet(IN PIRP_CONTEXT IrpContext, IN PVCB Vcb, IN USHORT EaHandle, IN POEM_STRING FileName, IN BOOLEAN ReturnEntireSet, OUT PEA_RANGE EaSetRange)
#define FILE_ACTION_MODIFIED
#define FatUnpinBcb(IRPCONTEXT, BCB)
NTSTATUS NTAPI IoCheckEaBufferValidity(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
#define FatReleaseFcb(IRPCONTEXT, Fcb)
union _FILE_NAME_NODE::@701 Name
#define NT_SUCCESS(StatCode)
IN PVCB IN ULONG IN PBCB OUT PDIRENT OUT PUSHORT OUT PEA_RANGE EaSetRange
VOID FatAppendPackedEa(IN PIRP_CONTEXT IrpContext, IN OUT PEA_SET_HEADER *EaSetHeader, IN OUT PULONG PackedEasLength, IN OUT PULONG AllocationLength, IN PFILE_FULL_EA_INFORMATION FullEa, IN ULONG BytesPerCluster)
EA_SET_HEADER * PEA_SET_HEADER
enum _TYPE_OF_OPEN TYPE_OF_OPEN
_Inout_ PFILE_OBJECT _In_ TYPE_OF_OPEN PFCB _In_opt_ PCCB Ccb
#define STATUS_INVALID_EA_NAME
BOOLEAN FatLocateEaByName(IN PIRP_CONTEXT IrpContext, IN PPACKED_EA FirstPackedEa, IN ULONG PackedEasLength, IN POEM_STRING EaName, OUT PULONG Offset)
_In_ ULONG _In_ ULONG Offset
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
#define AbnormalTermination()
#define FILE_NOTIFY_CHANGE_EA
_In_ PIO_STACK_LOCATION IrpSp
#define FatReleaseVcb(IRPCONTEXT, Vcb)
NTSTATUS FatFsdPostRequest(IN PIRP_CONTEXT IrpContext, IN PIRP Irp)
_In_ PFCB _In_ PDIRENT_ENUM_CONTEXT _Inout_ PDIRENT Dirent
#define RtlZeroMemory(Destination, Length)
#define RtlCopyMemory(Destination, Source, Length)
#define TAG_EA_SET_HEADER
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
IN OUT PVCB OUT PDIRENT OUT PBCB * EaBcb
#define SIZE_OF_EA_SET_HEADER
TYPE_OF_OPEN FatDecodeFileObject(_In_ PFILE_OBJECT FileObject, _Outptr_ PVCB *Vcb, _Outptr_ PFCB *FcbOrDcb, _Outptr_ PCCB *Ccb)
VOID FatDeletePackedEa(IN PIRP_CONTEXT IrpContext, IN OUT PEA_SET_HEADER EaSetHeader, IN OUT PULONG PackedEasLength, IN ULONG Offset)