From f637e66227f25cf209e209dc6f4b20332a407463 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 7 Oct 2009 12:21:13 +0000 Subject: [PATCH] [fastfat_new] - Implement FatiQueryNameInformation. It doesn't work right now due to missing file names in the FCB record. - Make a stub for FatSetFcbNames. svn path=/trunk/; revision=43324 --- .../drivers/filesystems/fastfat_new/fastfat.h | 4 ++ reactos/drivers/filesystems/fastfat_new/fcb.c | 12 +++++ .../drivers/filesystems/fastfat_new/finfo.c | 45 ++++++++++++++++++- 3 files changed, 59 insertions(+), 2 deletions(-) diff --git a/reactos/drivers/filesystems/fastfat_new/fastfat.h b/reactos/drivers/filesystems/fastfat_new/fastfat.h index e60b9d667fb..cd1751c652b 100644 --- a/reactos/drivers/filesystems/fastfat_new/fastfat.h +++ b/reactos/drivers/filesystems/fastfat_new/fastfat.h @@ -304,6 +304,10 @@ VOID NTAPI FatSetFullNameInFcb(PFCB Fcb, PUNICODE_STRING Name); +VOID NTAPI +FatSetFcbNames(IN PFAT_IRP_CONTEXT IrpContext, + IN PFCB Fcb); + /* ------------------------------------------------------------ rw.c */ NTSTATUS NTAPI diff --git a/reactos/drivers/filesystems/fastfat_new/fcb.c b/reactos/drivers/filesystems/fastfat_new/fcb.c index eee209787e8..d2961b783f7 100644 --- a/reactos/drivers/filesystems/fastfat_new/fcb.c +++ b/reactos/drivers/filesystems/fastfat_new/fcb.c @@ -149,6 +149,9 @@ FatCreateFcb(IN PFAT_IRP_CONTEXT IrpContext, Fcb->Header.ValidDataLength.LowPart = FileHandle->Filesize; Fcb->FatHandle = FileHandle; + /* Set names */ + FatSetFcbNames(IrpContext, Fcb); + return Fcb; } @@ -241,4 +244,13 @@ FatSetFullNameInFcb(PFCB Fcb, } } +VOID +NTAPI +FatSetFcbNames(IN PFAT_IRP_CONTEXT IrpContext, + IN PFCB Fcb) +{ + // Set the short name first + UNIMPLEMENTED; +} + /* EOF */ diff --git a/reactos/drivers/filesystems/fastfat_new/finfo.c b/reactos/drivers/filesystems/fastfat_new/finfo.c index a8005eac1c8..ead084273a4 100644 --- a/reactos/drivers/filesystems/fastfat_new/finfo.c +++ b/reactos/drivers/filesystems/fastfat_new/finfo.c @@ -61,10 +61,51 @@ NTAPI FatiQueryNameInformation(IN PFAT_IRP_CONTEXT IrpContext, IN PFCB Fcb, IN PFILE_OBJECT FileObject, - IN OUT PFILE_INTERNAL_INFORMATION Buffer, + IN OUT PFILE_NAME_INFORMATION Buffer, IN OUT PLONG Length) { - UNIMPLEMENTED; + ULONG ByteSize; + ULONG Trim = 0; + BOOLEAN Overflow = FALSE; + + /* Deduct the minimum written length */ + *Length -= FIELD_OFFSET(FILE_NAME_INFORMATION, FileName[0]); + + // Build full name if needed + //if (!Fcb->FullFileName.Buffer) + + DPRINT1("FullFileName %wZ\n", &Fcb->FullFileName); + + if (*Length < Fcb->FullFileName.Length - Trim) + { + /* Buffer can't fit all data */ + ByteSize = *Length; + Overflow = TRUE; + } + else + { + /* Deduct the amount of bytes we are going to write */ + ByteSize = Fcb->FullFileName.Length - Trim; + *Length -= ByteSize; + } + + /* Copy the name */ + RtlCopyMemory(Buffer->FileName, + Fcb->FullFileName.Buffer, + ByteSize); + + /* Set the length */ + Buffer->FileNameLength = Fcb->FullFileName.Length - Trim; + + /* Is this a shortname query? */ + if (Trim) + { + /* Yes, not supported atm */ + ASSERT(FALSE); + } + + /* Indicate overflow by passing -1 as the length */ + if (Overflow) *Length = -1; } NTSTATUS