// they will be arrays of objects containing disk information needed by
// the BIOS only.
static PDISK_IMAGE FloppyDrive[2] = {NULL};
-static PDISK_IMAGE HardDrive[1] = {NULL};
+static PDISK_IMAGE HardDrive[4] = {NULL};
#pragma pack(push, 1)
FloppyDrive[0] = RetrieveDisk(FLOPPY_DISK, 0);
FloppyDrive[1] = RetrieveDisk(FLOPPY_DISK, 1);
HardDrive[0] = RetrieveDisk(HARD_DISK, 0);
+ HardDrive[1] = RetrieveDisk(HARD_DISK, 1);
+ HardDrive[2] = RetrieveDisk(HARD_DISK, 2);
+ HardDrive[3] = RetrieveDisk(HARD_DISK, 3);
return TRUE;
}
return FALSE;
}
+ /* Mount the available floppy disks */
+ for (i = 0; i < ARRAYSIZE(GlobalSettings.FloppyDisks); ++i)
+ {
+ if (GlobalSettings.FloppyDisks[i].Length != 0 &&
+ GlobalSettings.FloppyDisks[i].Buffer &&
+ GlobalSettings.FloppyDisks[i].Buffer != '\0')
+ {
+ MountDisk(FLOPPY_DISK, i, GlobalSettings.FloppyDisks[i].Buffer, FALSE);
+ }
+ }
+
/* Mount the available hard disks */
for (i = 0; i < ARRAYSIZE(GlobalSettings.HardDisks); ++i)
{
return STATUS_SUCCESS;
}
+static NTSTATUS
+NTAPI
+NtVdmConfigureFloppy(IN PWSTR ValueName,
+ IN ULONG ValueType,
+ IN PVOID ValueData,
+ IN ULONG ValueLength,
+ IN PVOID Context,
+ IN PVOID EntryContext)
+{
+ PNTVDM_SETTINGS Settings = (PNTVDM_SETTINGS)Context;
+ UNICODE_STRING ValueString;
+ ULONG DiskNumber = (ULONG)EntryContext;
+
+ ASSERT(DiskNumber < ARRAYSIZE(Settings->FloppyDisks));
+
+ /* Check whether the Hard Disk entry was not already configured */
+ if (Settings->FloppyDisks[DiskNumber].Buffer != NULL)
+ {
+ DPRINT1("Floppy Disk %d -- '%Z' already configured\n", DiskNumber, &Settings->FloppyDisks[DiskNumber]);
+ return STATUS_SUCCESS;
+ }
+
+ /* Check for the type of the value */
+ if (ValueType != REG_SZ)
+ {
+ RtlInitEmptyAnsiString(&Settings->FloppyDisks[DiskNumber], NULL, 0);
+ return STATUS_SUCCESS;
+ }
+
+ /* Convert the UNICODE string to ANSI and store it */
+ RtlInitEmptyUnicodeString(&ValueString, (PWCHAR)ValueData, ValueLength);
+ ValueString.Length = ValueString.MaximumLength;
+ RtlUnicodeStringToAnsiString(&Settings->FloppyDisks[DiskNumber], &ValueString, TRUE);
+
+ return STATUS_SUCCESS;
+}
+
static NTSTATUS
NTAPI
NtVdmConfigureHDD(IN PWSTR ValueName,
0
},
+ {
+ NtVdmConfigureFloppy,
+ 0,
+ L"FloppyDisk0",
+ (PVOID)0,
+ REG_NONE,
+ NULL,
+ 0
+ },
+
+ {
+ NtVdmConfigureFloppy,
+ 0,
+ L"FloppyDisk1",
+ (PVOID)1,
+ REG_NONE,
+ NULL,
+ 0
+ },
+
{
NtVdmConfigureHDD,
0,
if (Settings->RomFiles.Buffer)
RtlFreeAnsiString(&Settings->RomFiles);
+ for (i = 0; i < ARRAYSIZE(Settings->FloppyDisks); ++i)
+ {
+ if (Settings->FloppyDisks[i].Buffer)
+ RtlFreeAnsiString(&Settings->FloppyDisks[i]);
+ }
+
for (i = 0; i < ARRAYSIZE(Settings->HardDisks); ++i)
{
if (Settings->HardDisks[i].Buffer)