mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 17:34:57 +00:00
Add a function table to access filesystems
svn path=/trunk/; revision=31503
This commit is contained in:
parent
6e9a640854
commit
8d7a4e27b7
10 changed files with 148 additions and 154 deletions
|
@ -35,7 +35,7 @@ ULONG Ext2GroupCount = 0; // Number of groups in this file system
|
|||
ULONG Ext2InodesPerBlock = 0; // Number of inodes in one block
|
||||
ULONG Ext2GroupDescPerBlock = 0; // Number of group descriptors in one block
|
||||
|
||||
BOOLEAN Ext2OpenVolume(UCHAR DriveNumber, ULONGLONG VolumeStartSector)
|
||||
BOOLEAN Ext2OpenVolume(UCHAR DriveNumber, ULONGLONG VolumeStartSector, ULONGLONG PartitionSectorCount)
|
||||
{
|
||||
|
||||
DbgPrint((DPRINT_FILESYSTEM, "Ext2OpenVolume() DriveNumber = 0x%x VolumeStartSector = %d\n", DriveNumber, VolumeStartSector));
|
||||
|
@ -102,7 +102,7 @@ FILE* Ext2OpenFile(PCSTR FileName)
|
|||
DbgPrint((DPRINT_FILESYSTEM, "File is a symbolic link\n"));
|
||||
|
||||
// Now read in the symbolic link path
|
||||
if (!Ext2ReadFile(&TempExt2FileInfo, TempExt2FileInfo.FileSize, NULL, SymLinkPath))
|
||||
if (!Ext2ReadFileBig(&TempExt2FileInfo, TempExt2FileInfo.FileSize, NULL, SymLinkPath))
|
||||
{
|
||||
if (TempExt2FileInfo.FileBlockList != NULL)
|
||||
{
|
||||
|
@ -331,11 +331,11 @@ BOOLEAN Ext2SearchDirectoryBufferForFile(PVOID DirectoryBuffer, ULONG DirectoryS
|
|||
}
|
||||
|
||||
/*
|
||||
* Ext2ReadFile()
|
||||
* Ext2ReadFileBig()
|
||||
* Reads BytesToRead from open file and
|
||||
* returns the number of bytes read in BytesRead
|
||||
*/
|
||||
BOOLEAN Ext2ReadFile(FILE *FileHandle, ULONGLONG BytesToRead, ULONGLONG* BytesRead, PVOID Buffer)
|
||||
BOOLEAN Ext2ReadFileBig(FILE *FileHandle, ULONGLONG BytesToRead, ULONGLONG* BytesRead, PVOID Buffer)
|
||||
{
|
||||
PEXT2_FILE_INFO Ext2FileInfo = (PEXT2_FILE_INFO)FileHandle;
|
||||
ULONG BlockNumber;
|
||||
|
@ -344,7 +344,7 @@ BOOLEAN Ext2ReadFile(FILE *FileHandle, ULONGLONG BytesToRead, ULONGLONG* BytesRe
|
|||
ULONG LengthInBlock;
|
||||
ULONG NumberOfBlocks;
|
||||
|
||||
DbgPrint((DPRINT_FILESYSTEM, "Ext2ReadFile() BytesToRead = %d Buffer = 0x%x\n", (ULONG)BytesToRead, Buffer));
|
||||
DbgPrint((DPRINT_FILESYSTEM, "Ext2ReadFileBig() BytesToRead = %d Buffer = 0x%x\n", (ULONG)BytesToRead, Buffer));
|
||||
|
||||
if (BytesRead != NULL)
|
||||
{
|
||||
|
@ -519,7 +519,17 @@ BOOLEAN Ext2ReadFile(FILE *FileHandle, ULONGLONG BytesToRead, ULONGLONG* BytesRe
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
ULONGLONG Ext2GetFileSize(FILE *FileHandle)
|
||||
BOOLEAN Ext2ReadFile(FILE *FileHandle, ULONG BytesToRead, ULONG* BytesRead, PVOID Buffer)
|
||||
{
|
||||
BOOLEAN Success;
|
||||
ULONGLONG BytesReadBig;
|
||||
|
||||
Success = Ext2ReadFileBig(FileHandle, BytesToRead, &BytesReadBig, Buffer);
|
||||
*BytesRead = (ULONG)BytesReadBig;
|
||||
return Success;
|
||||
}
|
||||
|
||||
ULONG Ext2GetFileSize(FILE *FileHandle)
|
||||
{
|
||||
PEXT2_FILE_INFO Ext2FileHandle = (PEXT2_FILE_INFO)FileHandle;
|
||||
|
||||
|
@ -528,7 +538,7 @@ ULONGLONG Ext2GetFileSize(FILE *FileHandle)
|
|||
return Ext2FileHandle->FileSize;
|
||||
}
|
||||
|
||||
VOID Ext2SetFilePointer(FILE *FileHandle, ULONGLONG NewFilePointer)
|
||||
VOID Ext2SetFilePointer(FILE *FileHandle, ULONG NewFilePointer)
|
||||
{
|
||||
PEXT2_FILE_INFO Ext2FileHandle = (PEXT2_FILE_INFO)FileHandle;
|
||||
|
||||
|
@ -537,7 +547,7 @@ VOID Ext2SetFilePointer(FILE *FileHandle, ULONGLONG NewFilePointer)
|
|||
Ext2FileHandle->FilePointer = NewFilePointer;
|
||||
}
|
||||
|
||||
ULONGLONG Ext2GetFilePointer(FILE *FileHandle)
|
||||
ULONG Ext2GetFilePointer(FILE *FileHandle)
|
||||
{
|
||||
PEXT2_FILE_INFO Ext2FileHandle = (PEXT2_FILE_INFO)FileHandle;
|
||||
|
||||
|
@ -787,7 +797,7 @@ BOOLEAN Ext2ReadDirectory(ULONG Inode, PVOID* DirectoryBuffer, PEXT2_INODE Inode
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
// Fill in file info struct so we can call Ext2ReadFile()
|
||||
// Fill in file info struct so we can call Ext2ReadFileBig()
|
||||
RtlZeroMemory(&DirectoryFileInfo, sizeof(EXT2_FILE_INFO));
|
||||
DirectoryFileInfo.DriveNumber = Ext2DriveNumber;
|
||||
DirectoryFileInfo.FileBlockList = Ext2ReadBlockPointerList(InodePointer);
|
||||
|
@ -815,7 +825,7 @@ BOOLEAN Ext2ReadDirectory(ULONG Inode, PVOID* DirectoryBuffer, PEXT2_INODE Inode
|
|||
}
|
||||
|
||||
// Now read the root directory data
|
||||
if (!Ext2ReadFile(&DirectoryFileInfo, DirectoryFileInfo.FileSize, NULL, *DirectoryBuffer))
|
||||
if (!Ext2ReadFileBig(&DirectoryFileInfo, DirectoryFileInfo.FileSize, NULL, *DirectoryBuffer))
|
||||
{
|
||||
MmFreeMemory(*DirectoryBuffer);
|
||||
*DirectoryBuffer = NULL;
|
||||
|
@ -1167,3 +1177,13 @@ BOOLEAN Ext2CopyTripleIndirectBlockPointers(ULONG* BlockList, ULONG* CurrentBloc
|
|||
MmFreeMemory(BlockBuffer);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
const FS_VTBL Ext2Vtbl = {
|
||||
Ext2OpenVolume,
|
||||
Ext2OpenFile,
|
||||
NULL,
|
||||
Ext2ReadFile,
|
||||
Ext2GetFileSize,
|
||||
Ext2SetFilePointer,
|
||||
Ext2GetFilePointer,
|
||||
};
|
||||
|
|
|
@ -115,7 +115,7 @@ VOID FatSwapFatXDirEntry(PFATX_DIRENTRY Obj)
|
|||
SW(Obj, LastAccessDate);
|
||||
}
|
||||
|
||||
BOOLEAN FatOpenVolume(ULONG DriveNumber, ULONG VolumeStartSector, ULONG PartitionSectorCount)
|
||||
BOOLEAN FatOpenVolume(UCHAR DriveNumber, ULONGLONG VolumeStartSector, ULONGLONG PartitionSectorCount)
|
||||
{
|
||||
char ErrMsg[80];
|
||||
ULONG FatSize;
|
||||
|
@ -1407,3 +1407,13 @@ BOOLEAN FatReadVolumeSectors(ULONG DriveNumber, ULONG SectorNumber, ULONG Sector
|
|||
{
|
||||
return CacheReadDiskSectors(DriveNumber, SectorNumber + FatVolumeStartSector, SectorCount, Buffer);
|
||||
}
|
||||
|
||||
const FS_VTBL FatVtbl = {
|
||||
FatOpenVolume,
|
||||
FatOpenFile,
|
||||
NULL,
|
||||
FatReadFile,
|
||||
FatGetFileSize,
|
||||
FatSetFilePointer,
|
||||
FatGetFilePointer,
|
||||
};
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
// DATA
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
ULONG FsType = 0; // Type of filesystem on boot device, set by FsOpenVolume()
|
||||
const FS_VTBL* pFSVtbl = NULL; // Type of filesystem on boot device, set by FsOpenVolume()
|
||||
PVOID FsStaticBufferDisk = 0, FsStaticBufferData = 0;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -52,8 +52,6 @@ static BOOLEAN FsOpenVolume(ULONG DriveNumber, ULONGLONG StartSector, ULONGLONG
|
|||
{
|
||||
CHAR ErrorText[80];
|
||||
|
||||
FsType = Type;
|
||||
|
||||
if( !FsStaticBufferDisk )
|
||||
FsStaticBufferDisk = MmAllocateMemory( 0x20000 );
|
||||
if( !FsStaticBufferDisk )
|
||||
|
@ -63,18 +61,31 @@ static BOOLEAN FsOpenVolume(ULONG DriveNumber, ULONGLONG StartSector, ULONGLONG
|
|||
}
|
||||
FsStaticBufferData = ((PCHAR)FsStaticBufferDisk) + 0x10000;
|
||||
|
||||
switch (FsType)
|
||||
switch (Type)
|
||||
{
|
||||
case FS_FAT:
|
||||
return FatOpenVolume(DriveNumber, StartSector, SectorCount);
|
||||
case FS_EXT2:
|
||||
return Ext2OpenVolume(DriveNumber, StartSector);
|
||||
pFSVtbl = &FatVtbl;
|
||||
break;
|
||||
case FS_NTFS:
|
||||
return NtfsOpenVolume(DriveNumber, StartSector);
|
||||
pFSVtbl = &NtfsVtbl;
|
||||
break;
|
||||
case FS_EXT2:
|
||||
pFSVtbl = &Ext2Vtbl;
|
||||
break;
|
||||
case FS_ISO9660:
|
||||
return IsoOpenVolume(DriveNumber);
|
||||
pFSVtbl = &Iso9660Vtbl;
|
||||
break;
|
||||
default:
|
||||
FsType = 0;
|
||||
pFSVtbl = NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
if (pFSVtbl && pFSVtbl->OpenVolume)
|
||||
{
|
||||
return (*pFSVtbl->OpenVolume)(DriveNumber, StartSector, SectorCount);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(ErrorText, "Unsupported file system. Type: 0x%x", Type);
|
||||
FileSystemError(ErrorText);
|
||||
}
|
||||
|
@ -143,23 +154,13 @@ PFILE FsOpenFile(PCSTR FileName)
|
|||
//
|
||||
// Check file system type and pass off to appropriate handler
|
||||
//
|
||||
switch (FsType)
|
||||
if (pFSVtbl && pFSVtbl->OpenFile)
|
||||
{
|
||||
FileHandle = pFSVtbl->OpenFile(FileName);
|
||||
}
|
||||
else
|
||||
{
|
||||
case FS_FAT:
|
||||
FileHandle = FatOpenFile(FileName);
|
||||
break;
|
||||
case FS_ISO9660:
|
||||
FileHandle = IsoOpenFile(FileName);
|
||||
break;
|
||||
case FS_EXT2:
|
||||
FileHandle = Ext2OpenFile(FileName);
|
||||
break;
|
||||
case FS_NTFS:
|
||||
FileHandle = NtfsOpenFile(FileName);
|
||||
break;
|
||||
default:
|
||||
FileSystemError("Error: Unknown filesystem.");
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -179,18 +180,14 @@ PFILE FsOpenFile(PCSTR FileName)
|
|||
|
||||
VOID FsCloseFile(PFILE FileHandle)
|
||||
{
|
||||
switch (FsType)
|
||||
if (pFSVtbl)
|
||||
{
|
||||
if (pFSVtbl->CloseFile)
|
||||
(*pFSVtbl->CloseFile)(FileHandle);
|
||||
}
|
||||
else
|
||||
{
|
||||
case FS_FAT:
|
||||
case FS_ISO9660:
|
||||
case FS_EXT2:
|
||||
break;
|
||||
case FS_NTFS:
|
||||
NtfsCloseFile(FileHandle);
|
||||
break;
|
||||
default:
|
||||
FileSystemError("Error: Unknown filesystem.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -200,9 +197,6 @@ VOID FsCloseFile(PFILE FileHandle)
|
|||
*/
|
||||
BOOLEAN FsReadFile(PFILE FileHandle, ULONG BytesToRead, ULONG* BytesRead, PVOID Buffer)
|
||||
{
|
||||
ULONGLONG BytesReadBig;
|
||||
BOOLEAN Success;
|
||||
|
||||
//
|
||||
// Set the number of bytes read equal to zero
|
||||
//
|
||||
|
@ -211,124 +205,53 @@ BOOLEAN FsReadFile(PFILE FileHandle, ULONG BytesToRead, ULONG* BytesRead, PVOID
|
|||
*BytesRead = 0;
|
||||
}
|
||||
|
||||
switch (FsType)
|
||||
if (pFSVtbl && pFSVtbl->ReadFile)
|
||||
{
|
||||
return (*pFSVtbl->ReadFile)(FileHandle, BytesToRead, BytesRead, Buffer);
|
||||
}
|
||||
else
|
||||
{
|
||||
case FS_FAT:
|
||||
|
||||
return FatReadFile(FileHandle, BytesToRead, BytesRead, Buffer);
|
||||
|
||||
case FS_ISO9660:
|
||||
|
||||
return IsoReadFile(FileHandle, BytesToRead, BytesRead, Buffer);
|
||||
|
||||
case FS_EXT2:
|
||||
|
||||
//return Ext2ReadFile(FileHandle, BytesToRead, BytesRead, Buffer);
|
||||
Success = Ext2ReadFile(FileHandle, BytesToRead, &BytesReadBig, Buffer);
|
||||
*BytesRead = (ULONG)BytesReadBig;
|
||||
return Success;
|
||||
|
||||
case FS_NTFS:
|
||||
|
||||
return NtfsReadFile(FileHandle, BytesToRead, BytesRead, Buffer);
|
||||
|
||||
default:
|
||||
|
||||
FileSystemError("Unknown file system.");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
ULONG FsGetFileSize(PFILE FileHandle)
|
||||
{
|
||||
switch (FsType)
|
||||
if (pFSVtbl && pFSVtbl->GetFileSize)
|
||||
{
|
||||
case FS_FAT:
|
||||
|
||||
return FatGetFileSize(FileHandle);
|
||||
|
||||
case FS_ISO9660:
|
||||
|
||||
return IsoGetFileSize(FileHandle);
|
||||
|
||||
case FS_EXT2:
|
||||
|
||||
return Ext2GetFileSize(FileHandle);
|
||||
|
||||
case FS_NTFS:
|
||||
|
||||
return NtfsGetFileSize(FileHandle);
|
||||
|
||||
default:
|
||||
FileSystemError("Unknown file system.");
|
||||
break;
|
||||
return (*pFSVtbl->GetFileSize)(FileHandle);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
FileSystemError("Unknown file system.");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
VOID FsSetFilePointer(PFILE FileHandle, ULONG NewFilePointer)
|
||||
{
|
||||
switch (FsType)
|
||||
if (pFSVtbl && pFSVtbl->SetFilePointer)
|
||||
{
|
||||
(*pFSVtbl->SetFilePointer)(FileHandle, NewFilePointer);
|
||||
}
|
||||
else
|
||||
{
|
||||
case FS_FAT:
|
||||
|
||||
FatSetFilePointer(FileHandle, NewFilePointer);
|
||||
break;
|
||||
|
||||
case FS_ISO9660:
|
||||
|
||||
IsoSetFilePointer(FileHandle, NewFilePointer);
|
||||
break;
|
||||
|
||||
case FS_EXT2:
|
||||
|
||||
Ext2SetFilePointer(FileHandle, NewFilePointer);
|
||||
break;
|
||||
|
||||
case FS_NTFS:
|
||||
|
||||
NtfsSetFilePointer(FileHandle, NewFilePointer);
|
||||
break;
|
||||
|
||||
default:
|
||||
FileSystemError("Unknown file system.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ULONG FsGetFilePointer(PFILE FileHandle)
|
||||
{
|
||||
switch (FsType)
|
||||
if (pFSVtbl && pFSVtbl->SetFilePointer)
|
||||
{
|
||||
case FS_FAT:
|
||||
|
||||
return FatGetFilePointer(FileHandle);
|
||||
break;
|
||||
|
||||
case FS_ISO9660:
|
||||
|
||||
return IsoGetFilePointer(FileHandle);
|
||||
break;
|
||||
|
||||
case FS_EXT2:
|
||||
|
||||
return Ext2GetFilePointer(FileHandle);
|
||||
break;
|
||||
|
||||
case FS_NTFS:
|
||||
|
||||
return NtfsGetFilePointer(FileHandle);
|
||||
break;
|
||||
|
||||
default:
|
||||
FileSystemError("Unknown file system.");
|
||||
break;
|
||||
return (*pFSVtbl->GetFilePointer)(FileHandle);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
FileSystemError("Unknown file system.");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
BOOLEAN FsIsEndOfFile(PFILE FileHandle)
|
||||
|
|
|
@ -28,7 +28,7 @@ static ULONG IsoRootLength; // Length of the root directory
|
|||
ULONG IsoDriveNumber = 0;
|
||||
|
||||
|
||||
BOOLEAN IsoOpenVolume(ULONG DriveNumber)
|
||||
BOOLEAN IsoOpenVolume(UCHAR DriveNumber, ULONGLONG VolumeStartSector, ULONGLONG PartitionSectorCount)
|
||||
{
|
||||
PPVD Pvd = (PPVD)DISKREADBUFFER;
|
||||
|
||||
|
@ -467,3 +467,13 @@ ULONG IsoGetFilePointer(FILE *FileHandle)
|
|||
|
||||
return IsoFileHandle->FilePointer;
|
||||
}
|
||||
|
||||
const FS_VTBL Iso9660Vtbl = {
|
||||
IsoOpenVolume,
|
||||
IsoOpenFile,
|
||||
NULL,
|
||||
IsoReadFile,
|
||||
IsoGetFileSize,
|
||||
IsoSetFilePointer,
|
||||
IsoGetFilePointer,
|
||||
};
|
||||
|
|
|
@ -685,7 +685,7 @@ static BOOLEAN NtfsLookupFile(PCSTR FileName, PNTFS_MFT_RECORD MftRecord, PNTFS_
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
BOOLEAN NtfsOpenVolume(ULONG DriveNumber, ULONG VolumeStartSector)
|
||||
BOOLEAN NtfsOpenVolume(UCHAR DriveNumber, ULONGLONG VolumeStartSector, ULONGLONG PartitionSectorCount)
|
||||
{
|
||||
NtfsBootSector = (PNTFS_BOOTSECTOR)DISKREADBUFFER;
|
||||
|
||||
|
@ -821,3 +821,13 @@ ULONG NtfsGetFilePointer(FILE *File)
|
|||
PNTFS_FILE_HANDLE FileHandle = (PNTFS_FILE_HANDLE)File;
|
||||
return FileHandle->Offset;
|
||||
}
|
||||
|
||||
const FS_VTBL NtfsVtbl = {
|
||||
NtfsOpenVolume,
|
||||
NtfsOpenFile,
|
||||
NtfsCloseFile,
|
||||
NtfsReadFile,
|
||||
NtfsGetFileSize,
|
||||
NtfsSetFilePointer,
|
||||
NtfsGetFilePointer,
|
||||
};
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#define FS_EXT2 3
|
||||
#define FS_REISER 4
|
||||
#define FS_ISO9660 5
|
||||
#define FS_PXE 6
|
||||
|
||||
#define FILE VOID
|
||||
#define PFILE FILE *
|
||||
|
@ -45,4 +46,15 @@ BOOLEAN FsIsEndOfFile(PFILE FileHandle);
|
|||
ULONG FsGetNumPathParts(PCSTR Path);
|
||||
VOID FsGetFirstNameFromPath(PCHAR Buffer, PCSTR Path);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
BOOLEAN (*OpenVolume)(UCHAR DriveNumber, ULONGLONG StartSector, ULONGLONG SectorCount);
|
||||
PFILE (*OpenFile)(PCSTR FileName);
|
||||
VOID (*CloseFile)(PFILE FileHandle);
|
||||
BOOLEAN (*ReadFile)(PFILE FileHandle, ULONG BytesToRead, ULONG* BytesRead, PVOID Buffer);
|
||||
ULONG (*GetFileSize)(PFILE FileHandle);
|
||||
VOID (*SetFilePointer)(PFILE FileHandle, ULONG NewFilePointer);
|
||||
ULONG (*GetFilePointer)(PFILE FileHandle);
|
||||
} FS_VTBL;
|
||||
|
||||
#endif // #defined __FS_H
|
||||
|
|
|
@ -666,16 +666,17 @@ typedef struct
|
|||
|
||||
|
||||
|
||||
BOOLEAN Ext2OpenVolume(UCHAR DriveNumber, ULONGLONG VolumeStartSector);
|
||||
BOOLEAN Ext2OpenVolume(UCHAR DriveNumber, ULONGLONG VolumeStartSector, ULONGLONG PartitionSectorCount);
|
||||
FILE* Ext2OpenFile(PCSTR FileName);
|
||||
BOOLEAN Ext2LookupFile(PCSTR FileName, PEXT2_FILE_INFO Ext2FileInfoPointer);
|
||||
BOOLEAN Ext2SearchDirectoryBufferForFile(PVOID DirectoryBuffer, ULONG DirectorySize, PCHAR FileName, PEXT2_DIR_ENTRY DirectoryEntry);
|
||||
BOOLEAN Ext2ReadFile(FILE *FileHandle, ULONGLONG BytesToRead, ULONGLONG* BytesRead, PVOID Buffer);
|
||||
ULONGLONG Ext2GetFileSize(FILE *FileHandle);
|
||||
VOID Ext2SetFilePointer(FILE *FileHandle, ULONGLONG NewFilePointer);
|
||||
ULONGLONG Ext2GetFilePointer(FILE *FileHandle);
|
||||
BOOLEAN Ext2ReadFile(FILE *FileHandle, ULONG BytesToRead, ULONG* BytesRead, PVOID Buffer);
|
||||
ULONG Ext2GetFileSize(FILE *FileHandle);
|
||||
VOID Ext2SetFilePointer(FILE *FileHandle, ULONG NewFilePointer);
|
||||
ULONG Ext2GetFilePointer(FILE *FileHandle);
|
||||
BOOLEAN Ext2ReadVolumeSectors(UCHAR DriveNumber, ULONGLONG SectorNumber, ULONGLONG SectorCount, PVOID Buffer);
|
||||
|
||||
BOOLEAN Ext2ReadFileBig(FILE *FileHandle, ULONGLONG BytesToRead, ULONGLONG* BytesRead, PVOID Buffer);
|
||||
BOOLEAN Ext2ReadSuperBlock(VOID);
|
||||
BOOLEAN Ext2ReadGroupDescriptors(VOID);
|
||||
BOOLEAN Ext2ReadDirectory(ULONG Inode, PVOID* DirectoryBuffer, PEXT2_INODE InodePointer);
|
||||
|
@ -694,4 +695,6 @@ BOOLEAN Ext2CopyIndirectBlockPointers(ULONG* BlockList, ULONG* CurrentBlockInLis
|
|||
BOOLEAN Ext2CopyDoubleIndirectBlockPointers(ULONG* BlockList, ULONG* CurrentBlockInList, ULONG BlockCount, ULONG DoubleIndirectBlock);
|
||||
BOOLEAN Ext2CopyTripleIndirectBlockPointers(ULONG* BlockList, ULONG* CurrentBlockInList, ULONG BlockCount, ULONG TripleIndirectBlock);
|
||||
|
||||
extern const FS_VTBL Ext2Vtbl;
|
||||
|
||||
#endif // #defined __EXT2_H
|
||||
|
|
|
@ -152,7 +152,7 @@ typedef struct
|
|||
|
||||
|
||||
|
||||
BOOLEAN FatOpenVolume(ULONG DriveNumber, ULONG VolumeStartSector, ULONG PartitionSectorCount);
|
||||
BOOLEAN FatOpenVolume(UCHAR DriveNumber, ULONGLONG VolumeStartSector, ULONGLONG PartitionSectorCount);
|
||||
ULONG FatDetermineFatType(PFAT_BOOTSECTOR FatBootSector, ULONG PartitionSectorCount);
|
||||
PVOID FatBufferDirectory(ULONG DirectoryStartCluster, ULONG* EntryCountPointer, BOOLEAN RootDirectory);
|
||||
BOOLEAN FatSearchDirectoryBufferForFile(PVOID DirectoryBuffer, ULONG EntryCount, PCHAR FileName, PFAT_FILE_INFO FatFileInfoPointer);
|
||||
|
@ -189,4 +189,6 @@ BOOLEAN FatReadVolumeSectors(ULONG DriveNumber, ULONG SectorNumber, ULONG Sector
|
|||
|
||||
#define ISFATX(FT) ((FT) == FATX16 || (FT) == FATX32)
|
||||
|
||||
extern const FS_VTBL FatVtbl;
|
||||
|
||||
#endif // #defined __FAT_H
|
||||
|
|
|
@ -105,11 +105,13 @@ typedef struct
|
|||
} ISO_FILE_INFO, * PISO_FILE_INFO;
|
||||
|
||||
|
||||
BOOLEAN IsoOpenVolume(ULONG DriveNumber);
|
||||
BOOLEAN IsoOpenVolume(UCHAR DriveNumber, ULONGLONG VolumeStartSector, ULONGLONG PartitionSectorCount);
|
||||
FILE* IsoOpenFile(PCSTR FileName);
|
||||
BOOLEAN IsoReadFile(FILE *FileHandle, ULONG BytesToRead, ULONG* BytesRead, PVOID Buffer);
|
||||
ULONG IsoGetFileSize(FILE *FileHandle);
|
||||
VOID IsoSetFilePointer(FILE *FileHandle, ULONG NewFilePointer);
|
||||
ULONG IsoGetFilePointer(FILE *FileHandle);
|
||||
|
||||
extern const FS_VTBL Iso9660Vtbl;
|
||||
|
||||
#endif // #defined __FAT_H
|
||||
|
|
|
@ -218,7 +218,7 @@ typedef struct
|
|||
ULONGLONG Offset;
|
||||
} PACKED NTFS_FILE_HANDLE, *PNTFS_FILE_HANDLE;
|
||||
|
||||
BOOLEAN NtfsOpenVolume(ULONG DriveNumber, ULONG VolumeStartSector);
|
||||
BOOLEAN NtfsOpenVolume(UCHAR DriveNumber, ULONGLONG VolumeStartSector, ULONGLONG PartitionSectorCount);
|
||||
FILE* NtfsOpenFile(PCSTR FileName);
|
||||
VOID NtfsCloseFile(FILE *FileHandle);
|
||||
BOOLEAN NtfsReadFile(FILE *FileHandle, ULONG BytesToRead, ULONG* BytesRead, PVOID Buffer);
|
||||
|
@ -226,4 +226,6 @@ ULONG NtfsGetFileSize(FILE *FileHandle);
|
|||
VOID NtfsSetFilePointer(FILE *FileHandle, ULONG NewFilePointer);
|
||||
ULONG NtfsGetFilePointer(FILE *FileHandle);
|
||||
|
||||
extern const FS_VTBL NtfsVtbl;
|
||||
|
||||
#endif // #defined __NTFS_H
|
||||
|
|
Loading…
Reference in a new issue