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/…
==============================================================================
--- 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);