420 BOOLEAN BaseAllLower, BaseAllUpper;
421 BOOLEAN ExtensionAllLower, ExtensionAllUpper;
425 ULONG CurrentCluster;
438 WCHAR ShortNameBuffer[13];
440 DPRINT(
"addEntry: Name='%wZ', Dir='%wZ'\n", NameU, &
ParentFcb->PathNameU);
456 NameA.Buffer = aName;
458 NameA.MaximumLength =
sizeof(aName);
461 DirContext.ShortNameU.Buffer = ShortNameBuffer;
463 DirContext.ShortNameU.MaximumLength =
sizeof(ShortNameBuffer);
469 if (!IsNameLegal || SpacesFound)
473 WCHAR ShortSearchName[13];
483 for (
i = 0;
i < 100;
i++)
493 else if (MoveContext)
498 if (MoveContext->InPlace)
515 BaseAllLower = BaseAllUpper =
TRUE;
516 ExtensionAllLower = ExtensionAllUpper =
TRUE;
521 if (
c >=
L'A' &&
c <=
L'Z')
524 ExtensionAllLower =
FALSE;
526 BaseAllLower =
FALSE;
528 else if (
c >=
L'a' &&
c <=
L'z')
531 ExtensionAllUpper =
FALSE;
533 BaseAllUpper =
FALSE;
547 if ((!BaseAllLower && !BaseAllUpper) ||
548 (!ExtensionAllLower && !ExtensionAllUpper))
556 aName[NameA.Length] = 0;
557 DPRINT(
"'%s', '%wZ', needTilde=%u, needLong=%u\n",
558 aName, &
DirContext.LongNameU, needTilde, needLong);
560 for (
i = 0;
i < 8 && aName[
i] && aName[
i] !=
'.';
i++)
567 for (
j = 0;
j < 3 && aName[
i];
j++,
i++)
572 if (
DirContext.DirEntry.Fat.Filename[0] == 0xe5)
581 DirContext.LongNameU.MaximumLength =
sizeof(LongNameBuffer);
589 if (BaseAllLower && !BaseAllUpper)
593 if (ExtensionAllLower && !ExtensionAllUpper)
615 if (MoveContext !=
NULL)
617 DirContext.DirEntry.Fat.CreationDate = MoveContext->CreationDate;
619 DirContext.DirEntry.Fat.FileSize = MoveContext->FileSize;
625 for (pSlots[0].alias_checksum = 0,
i = 0;
i < 11;
i++)
628 | ((pSlots[0].alias_checksum & 0xfe) >> 1))
632 for (
i = nbSlots - 2;
i >= 0;
i--)
634 DPRINT(
"construct slot %d\n",
i);
635 pSlots[
i].
attr = 0xf;
638 pSlots[
i].
id = (
unsigned char)(nbSlots -
i - 1);
642 pSlots[
i].
id = (
unsigned char)(nbSlots -
i - 1 + 0x40);
660 if (MoveContext ==
NULL)
674 if (DeviceExt->FatInfo.FatType ==
FAT32)
681 CurrentCluster = MoveContext->FirstCluster;
684 if (DeviceExt->FatInfo.FatType ==
FAT32)
686 DirContext.DirEntry.Fat.FirstClusterHigh = (
unsigned short)(CurrentCluster >> 16);
690 else if (MoveContext !=
NULL)
692 CurrentCluster = MoveContext->FirstCluster;
694 if (DeviceExt->FatInfo.FatType ==
FAT32)
696 DirContext.DirEntry.Fat.FirstClusterHigh = (
unsigned short)(CurrentCluster >> 16);
730 size = DeviceExt->FatInfo.BytesPerCluster -
766 if (MoveContext !=
NULL)
781 DPRINT(
"new : entry=%11.11s\n", (*Fcb)->entry.Fat.Filename);
805 if (MoveContext ==
NULL)
807 RtlZeroMemory(pFatEntry, DeviceExt->FatInfo.BytesPerCluster);
#define KeQuerySystemTime(t)
IN PDCB IN POEM_STRING IN PUNICODE_STRING IN OUT POEM_STRING ShortName
BOOLEAN NTAPI RtlIsNameLegalDOS8Dot3(_In_ PUNICODE_STRING Name, _Inout_opt_ POEM_STRING OemName, _Inout_opt_ PBOOLEAN NameContainsSpaces)
struct _FATDirEntry FAT_DIR_ENTRY
NTSTATUS vfatUpdateFCB(PDEVICE_EXTENSION pVCB, PVFATFCB Fcb, PVFAT_DIRENTRY_CONTEXT DirContext, PVFATFCB ParentFcb)
NTSTATUS NextCluster(PDEVICE_EXTENSION DeviceExt, ULONG FirstCluster, PULONG CurrentCluster, BOOLEAN Extend)
#define STATUS_INSUFFICIENT_RESOURCES
NTSTATUS RtlUpcaseUnicodeString(PUNICODE_STRING dst, PUNICODE_STRING src, BOOLEAN Alloc)
unsigned char alias_checksum
IN BOOLEAN OUT PSTR Buffer
#define BooleanFlagOn(F, SF)
VOID NTAPI CcSetDirtyPinnedData(IN PVOID BcbVoid, IN OPTIONAL PLARGE_INTEGER Lsn)
#define FILE_DIRECTORY_FILE
NTSTATUS FAT32UpdateFreeClustersCount(PDEVICE_EXTENSION DeviceExt)
VOID NTAPI CcUnpinData(IN PVOID Bcb)
BOOLEAN vfatFCBIsRoot(PVFATFCB FCB)
NTSTATUS vfatMakeFCBFromDirEntry(PVCB vcb, PVFATFCB directoryFCB, PVFAT_DIRENTRY_CONTEXT DirContext, PVFATFCB *fileFCB)
unsigned char ShortName[11]
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
BOOLEAN FsdSystemTimeToDosDateTime(PDEVICE_EXTENSION DeviceExt, PLARGE_INTEGER SystemTime, PUSHORT pDosDate, PUSHORT pDosTime)
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 GLint GLint j
#define FILE_ATTRIBUTE_DIRECTORY
NTSTATUS vfatFCBInitializeCacheFromVolume(PVCB vcb, PVFATFCB fcb)
#define NT_SUCCESS(StatCode)
UNICODE_STRING ShortNameU
#define EXCEPTION_EXECUTE_HANDLER
_In_ PFCB _In_ PDIRENT_ENUM_CONTEXT DirContext
int strncmp(const char *String1, const char *String2, ACPI_SIZE Count)
BOOLEAN NTAPI CcPinRead(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, IN ULONG Flags, OUT PVOID *Bcb, OUT PVOID *Buffer)
#define VFAT_CASE_LOWER_BASE
#define STATUS_UNSUCCESSFUL
#define ExAllocatePoolWithTag(hernya, size, tag)
_Must_inspect_result_ _In_ PFLT_INSTANCE _Out_ PBOOLEAN IsDirectory
#define VFAT_CASE_LOWER_EXT
unsigned short FirstClusterHigh
#define FCB_CACHE_INITIALIZED
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
_In_ PFCB _In_ LONGLONG FileOffset
NTSYSAPI VOID NTAPI RtlGenerate8dot3Name(_In_ PCUNICODE_STRING Name, _In_ BOOLEAN AllowExtendedCharacters, _Inout_ PGENERATE_NAME_CONTEXT Context, _Inout_ PUNICODE_STRING Name8dot3)
unsigned short FirstCluster
#define LONGNAME_MAX_LENGTH
#define RtlZeroMemory(Destination, Length)
#define RtlCopyMemory(Destination, Source, Length)
#define _SEH2_EXCEPT(...)
#define _SEH2_GetExceptionCode()
#define _SEH2_YIELD(__stmt)
PDEVICE_EXTENSION DeviceExt
BOOLEAN vfatFindDirSpace(IN PDEVICE_EXTENSION DeviceExt, IN PVFATFCB pDirFcb, IN ULONG nbSlots, OUT PULONG start)
#define ExFreePoolWithTag(_P, _T)