171 for (
i = 0;
i <
l;
i++)
225 ULONG DeviceId, ReadSize, DirLen;
232 EtfsFile = DirectoryEntry->FsSpecificData;
245 ReadSize = 2048 - RemainderOffset;
246 NeedRead = AlignedOffset == EtfsDevice->
Offset ? 0 : 1;
249 if (DirectoryOffset >= EtfsFile->Size)
256 DirectoryOffset += ReadSize;
257 AlignedOffset += 2048;
261 if (DirectoryOffset >= EtfsFile->Size)
281 EtfsDevice->
Offset = AlignedOffset;
284 if (!*(MemoryBlock + RemainderOffset))
286 AlignedOffset += 2048;
290 DirectoryOffset += ReadSize;
297 if (DirLen > ReadSize)
299 EfiPrintf(
L"Dir won't fit %lx %lx\r\n", DirLen, ReadSize);
323 RemainderOffset += DirLen;
324 DirectoryOffset += DirLen;
350 NextOffset = NextOffset + DirEnt->
DirLen)
385 EtfsFile = DirectoryEntry->FsSpecificData;
451 EtfsFile = FileEntry->FsSpecificData;
452 if ((
Size + EtfsFile->Offset) > EtfsFile->Size)
468 EtfsFile->Offset +=
Size;
498 LocalFileInfo.
Offset = EtfsFile->Offset;
504 EfiPrintf(
L"Incorrect information change\r\n");
509 if (
FileInfo->Offset >= EtfsFile->Size)
517 EtfsFile->Offset =
FileInfo->Offset;
640 EtfsFile->FsName =
L"cdfs";
644 *FileEntry = NewFile;
705 EtfsDevice->MemoryBlock,
750 EtfsDevice->MemoryBlock,
779 *VolumeDescriptor = IsoVd;
780 *VolumeIsIso = IsIso;
789 if (EtfsDevice->MemoryBlock)
829 EfiPrintf(
L"Drive not EDFS. Checking for CDFS: %lx\r\n");
835 EfiPrintf(
L"Drive not CDFS. Failing: %lx\r\n");
935 RootEntry->
Flags |= 0x10000;
940 EtfsFile->Flags |= 1;
944 EtfsFile->FsName =
L"cdfs";
945 *FileEntry = RootEntry;
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 * u
NTSTATUS EtfsSetInformation(_In_ PBL_FILE_ENTRY FileEntry, _In_ PBL_FILE_INFORMATION FileInfo)
_In_ ULONG _In_ ULONG _In_ ULONG Length
NTSTATUS EtfsRead(_In_ PBL_FILE_ENTRY FileEntry, _In_ PVOID Buffer, _In_ ULONG Size, _Out_opt_ PULONG BytesReturned)
LONG EtfspCompareNames(__in PSTRING Name1, __in PUNICODE_STRING Name2)
#define STATUS_INVALID_PARAMETER
BOOLEAN EtfspFileMatch(_In_ PRAW_DIR_REC DirEntry, _In_ PUNICODE_STRING FileName)
NTSTATUS EtfspCachedSearchForDirent(_In_ PBL_FILE_ENTRY DirectoryEntry, _In_ PWCHAR FileName, _Out_ PRAW_DIR_REC *DirEntry, _Out_ PULONG DirOffset, _In_ BOOLEAN KeepOffset)
NTSTATUS TblDoNotPurgeEntry(_In_ PVOID Entry)
BL_FILE_CALLBACKS EtfsFunctionTable
IN PVOID IN PVOID IN USHORT IN USHORT Size
VOID EtfspGetDirectoryInfo(_In_ PBL_ETFS_DEVICE EtfsDevice, _In_ PRAW_DIR_REC DirEntry, _Out_ PULONG FileOffset, _Out_ PULONG FileSize, _Out_opt_ PBOOLEAN IsDirectory)
NTSTATUS EtfsMount(_In_ ULONG DeviceId, _In_ ULONG Unknown, _Out_ PBL_FILE_ENTRY *FileEntry)
DWORD FormatString(DWORD dwFlags, HINSTANCE hInstance, DWORD dwStringId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, va_list *Arguments)
NTSTATUS BlDeviceGetInformation(_In_ ULONG DeviceId, _Out_ PBL_DEVICE_INFORMATION DeviceInformation)
NTSYSAPI BOOLEAN NTAPI RtlEqualString(PSTRING String1, PSTRING String2, BOOLEAN CaseInSensitive)
NTSTATUS BlMmFreeHeap(_In_ PVOID Buffer)
#define RVD_VOL_SIZE(r, i)
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_ ULONG _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesReturned
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesRead
return STATUS_NOT_IMPLEMENTED
BL_FILE_CALLBACKS Callbacks
#define BL_FILE_ENTRY_DIRECTORY
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
#define DE_FILE_FLAGS(iso, de)
NTSTATUS EtfspDeviceTableDestroyEntry(_In_ PBL_ETFS_DEVICE EtfsDevice, _In_ ULONG Index)
struct _BL_ETFS_FILE BL_ETFS_FILE
int _snwprintf(wchar_t *buffer, size_t count, const wchar_t *format,...)
PVOID BlMmAllocateHeap(_In_ SIZE_T Size)
_Reserved_ PVOID Reserved
ULONG EtfsDeviceTableEntries
struct _BL_ETFS_FILE * PBL_ETFS_FILE
UCHAR FileId[MAX_FILE_ID_LENGTH]
#define RVD_LB_SIZE(r, i)
NTSTATUS BlDeviceReadAtOffset(_In_ ULONG DeviceId, _In_ ULONG Size, _In_ ULONGLONG Offset, _In_ PVOID Buffer, _Out_ PULONG BytesRead)
_Must_inspect_result_ _In_ ULONG Flags
NTSYSAPI ULONG NTAPI RtlEqualMemory(CONST VOID *Source1, CONST VOID *Source2, ULONG Length)
#define NT_SUCCESS(StatCode)
_In_ WDFCOLLECTION _In_ ULONG Index
NTSTATUS EtfspDeviceContextDestroy(_In_ PBL_ETFS_DEVICE EtfsDevice)
#define ISO_ATTR_DIRECTORY
#define BL_ETFS_FILE_ENTRY_DIRECTORY
NTSTATUS EtfspSearchForDirent(_In_ PBL_FILE_ENTRY DirectoryEntry, _In_ PWCHAR FileName, _Out_ PRAW_DIR_REC *DirEntry, _Out_ PULONG DirentOffset)
#define STATUS_UNSUCCESSFUL
_Must_inspect_result_ _In_ PFLT_INSTANCE _Out_ PBOOLEAN IsDirectory
NTSTATUS EtfspCheckCdfs(_In_ PBL_ETFS_DEVICE EtfsDevice, _In_ ULONG DeviceId, _Out_ PRAW_ISO_VD *VolumeDescriptor, _Out_ PBOOLEAN VolumeIsIso)
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
NTSTATUS EtfspGetDirent(_In_ PBL_FILE_ENTRY DirectoryEntry, _Out_ PRAW_DIR_REC *DirEntry, _Inout_ PULONG DirentOffset)
NTSYSAPI VOID NTAPI RtlInitString(PSTRING DestinationString, PCSZ SourceString)
NTSTATUS EtfsGetInformation(_In_ PBL_FILE_ENTRY FileEntry, _Out_ PBL_FILE_INFORMATION FileInfo)
#define ALIGN_DOWN_BY(size, align)
NTSTATUS EtfsOpen(_In_ PBL_FILE_ENTRY Directory, _In_ PWCHAR FileName, _In_ ULONG Flags, _Out_ PBL_FILE_ENTRY *FileEntry)
struct _RAW_ET_VD * PRAW_ET_VD
_CRTIMP wchar_t *__cdecl wcsncpy(wchar_t *_Dest, const wchar_t *_Source, size_t _Count)
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
#define STATUS_NO_SUCH_FILE
USHORT EtfspGetDirentNameLength(_In_ PRAW_DIR_REC DirEntry)
struct _BL_ETFS_DEVICE * PBL_ETFS_DEVICE
VOID EfiPrintf(_In_ PWCHAR Format,...)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
NTSTATUS EtfsInitialize(VOID)
struct _RAW_ET_VD RAW_ET_VD
NTSTATUS BlTblSetEntry(_Inout_ PVOID **Table, _Inout_ PULONG Count, _In_ PVOID Entry, _Out_ PULONG EntryIndex, _In_ PBL_TBL_SET_ROUTINE Callback)
_In_ FLT_SET_CONTEXT_OPERATION _In_ PFLT_CONTEXT NewContext
struct _BL_ETFS_DEVICE BL_ETFS_DEVICE
#define RVD_ROOT_DE(r, i)
NTSTATUS EtfspCheckEtfs(_In_ PBL_ETFS_DEVICE EtfsDevice, _In_ ULONG DeviceId, _Out_ PRAW_ISO_VD *VolumeDescriptor, _Out_ PBOOLEAN VolumeIsIso)
_In_ PFCB _In_ PDIRENT_ENUM_CONTEXT _Inout_ PDIRENT Dirent
base for all directory entries
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
_In_ PFCB _In_ PCD_NAME DirName
#define ALIGN_UP_BY(size, align)
#define RtlCopyMemory(Destination, Source, Length)
NTSTATUS BlDeviceSetInformation(_In_ ULONG DeviceId, _In_ PBL_DEVICE_INFORMATION DeviceInformation)
_Must_inspect_result_ _In_ PCUNICODE_STRING Name2
NTSTATUS EtfspCreateContext(_In_ ULONG DeviceId, _Out_ PBL_ETFS_DEVICE *EtfsDevice)
RAW_DIRENT * PRAW_DIR_REC