Author: hpoussin Date: Sun Sep 6 22:00:23 2009 New Revision: 43006
URL: http://svn.reactos.org/svn/reactos?rev=43006&view=rev Log: Implement GetFileInformation() on disks for i386 architecture
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/hardware.c
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/hardware.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/i... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/arch/i386/hardware.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/arch/i386/hardware.c [iso-8859-1] Sun Sep 6 22:00:23 2009 @@ -402,6 +402,7 @@ ULONG DriveNumber; ULONG SectorSize; ULONGLONG SectorOffset; + ULONGLONG SectorCount; ULONGLONG SectorNumber; } DISKCONTEXT;
@@ -415,7 +416,13 @@
static LONG DiskGetFileInformation(ULONG FileId, FILEINFORMATION* Information) { - return EINVAL; + DISKCONTEXT* Context = FsGetDeviceSpecific(FileId); + + RtlZeroMemory(Information, sizeof(FILEINFORMATION)); + Information->EndingAddress.QuadPart = (Context->SectorOffset + Context->SectorCount) * Context->SectorSize; + Information->CurrentAddress.LowPart = (Context->SectorOffset + Context->SectorNumber) * Context->SectorSize; + + return ESUCCESS; }
static LONG DiskOpen(CHAR* Path, OPENMODE OpenMode, ULONG* FileId) @@ -423,6 +430,7 @@ DISKCONTEXT* Context; ULONG DriveNumber, DrivePartition, SectorSize; ULONGLONG SectorOffset = 0; + ULONGLONG SectorCount = 0; PARTITION_TABLE_ENTRY PartitionTableEntry; CHAR FileName[1];
@@ -434,6 +442,11 @@ if (!MachDiskGetPartitionEntry(DriveNumber, DrivePartition, &PartitionTableEntry)) return EINVAL; SectorOffset = PartitionTableEntry.SectorCountBeforePartition; + SectorCount = PartitionTableEntry.PartitionSectorCount; + } + else + { + SectorCount = 0; /* FIXME */ }
Context = MmHeapAlloc(sizeof(DISKCONTEXT)); @@ -442,6 +455,7 @@ Context->DriveNumber = DriveNumber; Context->SectorSize = SectorSize; Context->SectorOffset = SectorOffset; + Context->SectorCount = SectorCount; Context->SectorNumber = 0; FsSetDeviceSpecific(*FileId, Context);