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;
#define ALIGN_DOWN_BY(size, align)
#define ALIGN_UP_BY(size, align)
NTSTATUS BlDeviceGetInformation(_In_ ULONG DeviceId, _Out_ PBL_DEVICE_INFORMATION DeviceInformation)
NTSTATUS BlDeviceReadAtOffset(_In_ ULONG DeviceId, _In_ ULONG Size, _In_ ULONGLONG Offset, _In_ PVOID Buffer, _Out_ PULONG BytesRead)
VOID EfiPrintf(_In_ PWCHAR Format,...)
PVOID BlMmAllocateHeap(_In_ SIZE_T Size)
#define BL_FILE_ENTRY_DIRECTORY
NTSTATUS TblDoNotPurgeEntry(_In_ PVOID Entry)
NTSTATUS BlTblSetEntry(_Inout_ PVOID **Table, _Inout_ PULONG Count, _In_ PVOID Entry, _Out_ PULONG EntryIndex, _In_ PBL_TBL_SET_ROUTINE Callback)
NTSTATUS BlDeviceSetInformation(_In_ ULONG DeviceId, _In_ PBL_DEVICE_INFORMATION DeviceInformation)
NTSTATUS BlMmFreeHeap(_In_ PVOID Buffer)
#define BL_ETFS_FILE_ENTRY_DIRECTORY
#define ISO_ATTR_DIRECTORY
#define RVD_ROOT_DE(r, i)
RAW_DIRENT * PRAW_DIR_REC
#define RVD_LB_SIZE(r, i)
#define DE_FILE_FLAGS(iso, de)
#define RVD_VOL_SIZE(r, i)
_In_ PFCB _In_ LONGLONG FileOffset
_In_ PFCB _In_ PDIRENT_ENUM_CONTEXT _Inout_ PDIRENT Dirent
_In_ PFCB _In_ PCD_NAME DirName
#define STATUS_NOT_IMPLEMENTED
#define NT_SUCCESS(StatCode)
NTSTATUS EtfsGetInformation(_In_ PBL_FILE_ENTRY FileEntry, _Out_ PBL_FILE_INFORMATION FileInfo)
NTSTATUS EtfspCachedSearchForDirent(_In_ PBL_FILE_ENTRY DirectoryEntry, _In_ PWCHAR FileName, _Out_ PRAW_DIR_REC *DirEntry, _Out_ PULONG DirOffset, _In_ BOOLEAN KeepOffset)
NTSTATUS EtfspCreateContext(_In_ ULONG DeviceId, _Out_ PBL_ETFS_DEVICE *EtfsDevice)
NTSTATUS EtfspGetDirent(_In_ PBL_FILE_ENTRY DirectoryEntry, _Out_ PRAW_DIR_REC *DirEntry, _Inout_ PULONG DirentOffset)
NTSTATUS EtfspSearchForDirent(_In_ PBL_FILE_ENTRY DirectoryEntry, _In_ PWCHAR FileName, _Out_ PRAW_DIR_REC *DirEntry, _Out_ PULONG DirentOffset)
struct _BL_ETFS_FILE BL_ETFS_FILE
NTSTATUS EtfspCheckEtfs(_In_ PBL_ETFS_DEVICE EtfsDevice, _In_ ULONG DeviceId, _Out_ PRAW_ISO_VD *VolumeDescriptor, _Out_ PBOOLEAN VolumeIsIso)
USHORT EtfspGetDirentNameLength(_In_ PRAW_DIR_REC DirEntry)
struct _RAW_ET_VD * PRAW_ET_VD
BOOLEAN EtfspFileMatch(_In_ PRAW_DIR_REC DirEntry, _In_ PUNICODE_STRING FileName)
NTSTATUS EtfsRead(_In_ PBL_FILE_ENTRY FileEntry, _In_ PVOID Buffer, _In_ ULONG Size, _Out_opt_ PULONG BytesReturned)
struct _BL_ETFS_DEVICE BL_ETFS_DEVICE
struct _BL_ETFS_FILE * PBL_ETFS_FILE
NTSTATUS EtfsSetInformation(_In_ PBL_FILE_ENTRY FileEntry, _In_ PBL_FILE_INFORMATION FileInfo)
struct _BL_ETFS_DEVICE * PBL_ETFS_DEVICE
NTSTATUS EtfspDeviceTableDestroyEntry(_In_ PBL_ETFS_DEVICE EtfsDevice, _In_ ULONG Index)
LONG EtfspCompareNames(__in PSTRING Name1, __in PUNICODE_STRING Name2)
ULONG EtfsDeviceTableEntries
NTSTATUS EtfspCheckCdfs(_In_ PBL_ETFS_DEVICE EtfsDevice, _In_ ULONG DeviceId, _Out_ PRAW_ISO_VD *VolumeDescriptor, _Out_ PBOOLEAN VolumeIsIso)
NTSTATUS EtfspDeviceContextDestroy(_In_ PBL_ETFS_DEVICE EtfsDevice)
NTSTATUS EtfsInitialize(VOID)
NTSTATUS EtfsMount(_In_ ULONG DeviceId, _In_ ULONG Unknown, _Out_ PBL_FILE_ENTRY *FileEntry)
BL_FILE_CALLBACKS EtfsFunctionTable
NTSTATUS EtfsOpen(_In_ PBL_FILE_ENTRY Directory, _In_ PWCHAR FileName, _In_ ULONG Flags, _Out_ PBL_FILE_ENTRY *FileEntry)
struct _RAW_ET_VD RAW_ET_VD
VOID EtfspGetDirectoryInfo(_In_ PBL_ETFS_DEVICE EtfsDevice, _In_ PRAW_DIR_REC DirEntry, _Out_ PULONG FileOffset, _Out_ PULONG FileSize, _Out_opt_ PBOOLEAN IsDirectory)
_In_ FLT_SET_CONTEXT_OPERATION _In_ PFLT_CONTEXT NewContext
DWORD FormatString(DWORD dwFlags, HINSTANCE hInstance, DWORD dwStringId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, va_list *Arguments)
_Must_inspect_result_ _In_ PCUNICODE_STRING Name2
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
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
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define RtlEqualMemory(dst, src, len)
int _snwprintf(wchar_t *buffer, size_t count, const wchar_t *format,...)
NTSYSAPI VOID NTAPI RtlInitString(PSTRING DestinationString, PCSZ SourceString)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSYSAPI BOOLEAN NTAPI RtlEqualString(PSTRING String1, PSTRING String2, BOOLEAN CaseInSensitive)
_In_ ULONG _In_ ULONG _In_ ULONG Length
base for all directory entries
BL_FILE_CALLBACKS Callbacks
UCHAR FileId[MAX_FILE_ID_LENGTH]
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define STATUS_INVALID_PARAMETER
#define STATUS_UNSUCCESSFUL
#define STATUS_NO_SUCH_FILE
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
_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
_Reserved_ PVOID Reserved
_Must_inspect_result_ _In_ ULONG Flags