mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 17:34:57 +00:00
- Finalize ARC Boot changes:
* Rename IoCreateArcNames to IopCreateArcNames and set it to NTAPI, as well as pass the loader block as a parameter. * Reduce buffers to 128 bytes, since ARC Paths don't get longer then that. * Optimize stack usage by using a single ANSI_STRING instead of 3 or 4. * Optimize stack usage by using a single ansi buffer, not 2 or more. svn path=/trunk/; revision=24458
This commit is contained in:
parent
b5f79593de
commit
d4b5fef3d6
3 changed files with 53 additions and 32 deletions
|
@ -563,8 +563,9 @@ IopInitializePnpServices(
|
|||
// Initialization Routines
|
||||
//
|
||||
NTSTATUS
|
||||
IoCreateArcNames(
|
||||
VOID
|
||||
NTAPI
|
||||
IopCreateArcNames(
|
||||
IN PLOADER_PARAMETER_BLOCK LoaderBlock
|
||||
);
|
||||
|
||||
NTSTATUS
|
||||
|
|
|
@ -30,7 +30,7 @@ IopApplyRosCdromArcHack(IN ULONG i)
|
|||
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||
ANSI_STRING InstallName;
|
||||
UNICODE_STRING DeviceName;
|
||||
CHAR Buffer[MAX_PATH];
|
||||
CHAR Buffer[128];
|
||||
FILE_BASIC_INFORMATION FileInfo;
|
||||
NTSTATUS Status;
|
||||
PCHAR p, q;
|
||||
|
@ -117,7 +117,7 @@ IopGetDiskInformation(IN ULONG i,
|
|||
{
|
||||
ULONG j, Checksum;
|
||||
ANSI_STRING TempString;
|
||||
CHAR Buffer[256];
|
||||
CHAR Buffer[128];
|
||||
UNICODE_STRING DeviceName;
|
||||
NTSTATUS Status;
|
||||
PDEVICE_OBJECT DeviceObject;
|
||||
|
@ -257,8 +257,8 @@ NTAPI
|
|||
IopAssignArcNamesToCdrom(IN PULONG Buffer,
|
||||
IN ULONG DiskNumber)
|
||||
{
|
||||
CHAR ArcBuffer[256];
|
||||
ANSI_STRING TempString, ArcNameString;
|
||||
CHAR ArcBuffer[128];
|
||||
ANSI_STRING TempString;
|
||||
UNICODE_STRING DeviceName, ArcName;
|
||||
NTSTATUS Status;
|
||||
LARGE_INTEGER PartitionOffset;
|
||||
|
@ -345,8 +345,8 @@ IopAssignArcNamesToCdrom(IN PULONG Buffer,
|
|||
sprintf(ArcBuffer, "\\ArcName\\%s", KeLoaderBlock->ArcBootDeviceName);
|
||||
|
||||
/* Convert it to Unicode */
|
||||
RtlInitAnsiString(&ArcNameString, ArcBuffer);
|
||||
Status = RtlAnsiStringToUnicodeString(&ArcName, &ArcNameString, TRUE);
|
||||
RtlInitAnsiString(&TempString, ArcBuffer);
|
||||
Status = RtlAnsiStringToUnicodeString(&ArcName, &TempString, TRUE);
|
||||
if (!NT_SUCCESS(Status)) return FALSE;
|
||||
|
||||
/* Create the symbolic link and free the strings */
|
||||
|
@ -364,13 +364,13 @@ IopAssignArcNamesToCdrom(IN PULONG Buffer,
|
|||
|
||||
NTSTATUS
|
||||
INIT_FUNCTION
|
||||
IoCreateArcNames(VOID)
|
||||
NTAPI
|
||||
IopCreateArcNames(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
|
||||
{
|
||||
PLOADER_PARAMETER_BLOCK LoaderBlock = KeLoaderBlock;
|
||||
PCONFIGURATION_INFORMATION ConfigInfo = IoGetConfigurationInformation();
|
||||
PARC_DISK_INFORMATION ArcDiskInfo = LoaderBlock->ArcDiskInformation;
|
||||
CHAR ArcBuffer[256], Buffer[256];
|
||||
ANSI_STRING ArcBootString, ArcSystemString, ArcString, TempString, BootString;
|
||||
CHAR Buffer[128];
|
||||
ANSI_STRING ArcBootString, ArcSystemString, ArcString;
|
||||
UNICODE_STRING ArcName, BootPath, DeviceName;
|
||||
BOOLEAN SingleDisk;
|
||||
ULONG i, j, Length;
|
||||
|
@ -387,13 +387,13 @@ IoCreateArcNames(VOID)
|
|||
(&ArcDiskInfo->DiskSignatureListHead);
|
||||
|
||||
/* Create the global HAL partition name */
|
||||
sprintf(ArcBuffer, "\\ArcName\\%s", LoaderBlock->ArcHalDeviceName);
|
||||
RtlInitAnsiString(&ArcString, ArcBuffer);
|
||||
sprintf(Buffer, "\\ArcName\\%s", LoaderBlock->ArcHalDeviceName);
|
||||
RtlInitAnsiString(&ArcString, Buffer);
|
||||
RtlAnsiStringToUnicodeString(&IoArcHalDeviceName, &ArcString, TRUE);
|
||||
|
||||
/* Create the global system partition name */
|
||||
sprintf(ArcBuffer, "\\ArcName\\%s", LoaderBlock->ArcBootDeviceName);
|
||||
RtlInitAnsiString(&ArcString, ArcBuffer);
|
||||
sprintf(Buffer, "\\ArcName\\%s", LoaderBlock->ArcBootDeviceName);
|
||||
RtlInitAnsiString(&ArcString, Buffer);
|
||||
RtlAnsiStringToUnicodeString(&IoArcBootDeviceName, &ArcString, TRUE);
|
||||
|
||||
/* Allocate memory for the string */
|
||||
|
@ -457,16 +457,20 @@ IoCreateArcNames(VOID)
|
|||
sprintf(Buffer, "\\Device\\Harddisk%lu\\Partition0", i);
|
||||
|
||||
/* Convert it to Unicode */
|
||||
RtlInitAnsiString(&TempString, Buffer);
|
||||
Status = RtlAnsiStringToUnicodeString(&DeviceName, &TempString, TRUE);
|
||||
RtlInitAnsiString(&ArcString, Buffer);
|
||||
Status = RtlAnsiStringToUnicodeString(&DeviceName,
|
||||
&ArcString,
|
||||
TRUE);
|
||||
if (!NT_SUCCESS(Status)) continue;
|
||||
|
||||
/* Build the ARC Device Name */
|
||||
sprintf(ArcBuffer, "\\ArcName\\%s", ArcDiskEntry->ArcName);
|
||||
sprintf(Buffer, "\\ArcName\\%s", ArcDiskEntry->ArcName);
|
||||
|
||||
/* Convert it to Unicode */
|
||||
RtlInitAnsiString(&ArcString, ArcBuffer);
|
||||
Status = RtlAnsiStringToUnicodeString(&ArcName, &ArcString, TRUE);
|
||||
RtlInitAnsiString(&ArcString, Buffer);
|
||||
Status = RtlAnsiStringToUnicodeString(&ArcName,
|
||||
&ArcString,
|
||||
TRUE);
|
||||
if (!NT_SUCCESS(Status)) continue;
|
||||
|
||||
/* Create the symbolic link and free the strings */
|
||||
|
@ -478,16 +482,24 @@ IoCreateArcNames(VOID)
|
|||
for (j = 0; j < PartitionCount; j++)
|
||||
{
|
||||
/* Build the partition device name */
|
||||
sprintf(Buffer, "\\Device\\Harddisk%lu\\Partition%lu", i, j + 1);
|
||||
sprintf(Buffer,
|
||||
"\\Device\\Harddisk%lu\\Partition%lu",
|
||||
i,
|
||||
j + 1);
|
||||
|
||||
/* Convert it to Unicode */
|
||||
RtlInitAnsiString(&TempString, Buffer);
|
||||
Status = RtlAnsiStringToUnicodeString(&DeviceName, &TempString, TRUE);
|
||||
RtlInitAnsiString(&ArcString, Buffer);
|
||||
Status = RtlAnsiStringToUnicodeString(&DeviceName,
|
||||
&ArcString,
|
||||
TRUE);
|
||||
if (!NT_SUCCESS(Status)) continue;
|
||||
|
||||
/* Build the partial ARC name for this partition */
|
||||
sprintf(ArcBuffer, "%spartition(%lu)", ArcDiskEntry->ArcName, j + 1);
|
||||
RtlInitAnsiString(&ArcString, ArcBuffer);
|
||||
sprintf(Buffer,
|
||||
"%spartition(%lu)",
|
||||
ArcDiskEntry->ArcName,
|
||||
j + 1);
|
||||
RtlInitAnsiString(&ArcString, Buffer);
|
||||
|
||||
/* Check if this is the boot device */
|
||||
if (RtlEqualString(&ArcString, &ArcBootString, TRUE))
|
||||
|
@ -500,8 +512,11 @@ IoCreateArcNames(VOID)
|
|||
if (RtlEqualString(&ArcString, &ArcSystemString, TRUE))
|
||||
{
|
||||
/* It is, create a Unicode string for it */
|
||||
RtlInitAnsiString(&BootString, LoaderBlock->NtHalPathName);
|
||||
Status = RtlAnsiStringToUnicodeString(&BootPath, &BootString, TRUE);
|
||||
RtlInitAnsiString(&ArcString,
|
||||
LoaderBlock->NtHalPathName);
|
||||
Status = RtlAnsiStringToUnicodeString(&BootPath,
|
||||
&ArcString,
|
||||
TRUE);
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
/* FIXME: Save in registry */
|
||||
|
@ -512,11 +527,16 @@ IoCreateArcNames(VOID)
|
|||
}
|
||||
|
||||
/* Build the full ARC name */
|
||||
sprintf(Buffer, "\\ArcName\\%spartition(%lu)", ArcDiskEntry->ArcName, j + 1);
|
||||
sprintf(Buffer,
|
||||
"\\ArcName\\%spartition(%lu)",
|
||||
ArcDiskEntry->ArcName,
|
||||
j + 1);
|
||||
|
||||
/* Convert it to Unicode */
|
||||
RtlInitAnsiString(&ArcString, Buffer);
|
||||
Status = RtlAnsiStringToUnicodeString(&ArcName, &ArcString, TRUE);
|
||||
Status = RtlAnsiStringToUnicodeString(&ArcName,
|
||||
&ArcString,
|
||||
TRUE);
|
||||
if (!NT_SUCCESS(Status)) continue;
|
||||
|
||||
/* Create the symbolic link and free the strings */
|
||||
|
|
|
@ -472,14 +472,14 @@ IoInit2(BOOLEAN BootLog)
|
|||
}
|
||||
|
||||
VOID
|
||||
STDCALL
|
||||
NTAPI
|
||||
INIT_FUNCTION
|
||||
IoInit3(VOID)
|
||||
{
|
||||
ANSI_STRING NtBootPath;
|
||||
|
||||
/* Create ARC names for boot devices */
|
||||
IoCreateArcNames();
|
||||
IopCreateArcNames(KeLoaderBlock);
|
||||
|
||||
/* Read KDB Data */
|
||||
KdbInit();
|
||||
|
|
Loading…
Reference in a new issue