mirror of
https://github.com/reactos/reactos.git
synced 2025-05-03 21:00:15 +00:00
- Implement boot drivers loading.
svn path=/trunk/; revision=40066
This commit is contained in:
parent
08c383c3de
commit
455369fa90
1 changed files with 55 additions and 2 deletions
|
@ -42,7 +42,11 @@ WinLdrLoadNLSData(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
|
||||||
IN LPCSTR AnsiFileName,
|
IN LPCSTR AnsiFileName,
|
||||||
IN LPCSTR OemFileName,
|
IN LPCSTR OemFileName,
|
||||||
IN LPCSTR LanguageFileName);
|
IN LPCSTR LanguageFileName);
|
||||||
|
BOOLEAN
|
||||||
|
WinLdrAddDriverToList(LIST_ENTRY *BootDriverListHead,
|
||||||
|
LPWSTR RegistryPath,
|
||||||
|
LPWSTR ImagePath,
|
||||||
|
LPWSTR ServiceName);
|
||||||
|
|
||||||
|
|
||||||
//FIXME: Do a better way to retrieve Arc disk information
|
//FIXME: Do a better way to retrieve Arc disk information
|
||||||
|
@ -100,6 +104,52 @@ SetupLdrLoadNlsData(PLOADER_PARAMETER_BLOCK LoaderBlock, HINF InfHandle, LPCSTR
|
||||||
DPRINTM(DPRINT_WINDOWS, "NLS data loaded with status %d\n", Status);
|
DPRINTM(DPRINT_WINDOWS, "NLS data loaded with status %d\n", Status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
SetupLdrScanBootDrivers(PLOADER_PARAMETER_BLOCK LoaderBlock, HINF InfHandle, LPCSTR SearchPath)
|
||||||
|
{
|
||||||
|
INFCONTEXT InfContext;
|
||||||
|
BOOLEAN Status;
|
||||||
|
LPCSTR Media, DriverName;
|
||||||
|
WCHAR ServiceName[256];
|
||||||
|
WCHAR ImagePath[256];
|
||||||
|
|
||||||
|
/* Open inf section */
|
||||||
|
if (!InfFindFirstLine(InfHandle, "SourceDisksFiles", NULL, &InfContext))
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* Load all listed boot drivers */
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (InfGetDataField(&InfContext, 7, &Media) &&
|
||||||
|
InfGetDataField(&InfContext, 0, &DriverName))
|
||||||
|
{
|
||||||
|
if (strcmp(Media, "x") == 0)
|
||||||
|
{
|
||||||
|
/* Convert name to widechar */
|
||||||
|
swprintf(ServiceName, L"%S", DriverName);
|
||||||
|
|
||||||
|
/* Remove .sys extension */
|
||||||
|
ServiceName[wcslen(ServiceName) - 4] = 0;
|
||||||
|
|
||||||
|
/* Prepare image path */
|
||||||
|
swprintf(ImagePath, L"%S", DriverName);
|
||||||
|
|
||||||
|
/* Add it to the list */
|
||||||
|
Status = WinLdrAddDriverToList(&LoaderBlock->BootDriverListHead,
|
||||||
|
L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\",
|
||||||
|
ImagePath,
|
||||||
|
ServiceName);
|
||||||
|
|
||||||
|
if (!Status)
|
||||||
|
{
|
||||||
|
DPRINTM(DPRINT_WINDOWS, "could not add boot driver %s, %s\n", SearchPath, DriverName);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (InfFindNextLine(&InfContext, &InfContext));
|
||||||
|
}
|
||||||
|
|
||||||
VOID LoadReactOSSetup2(VOID)
|
VOID LoadReactOSSetup2(VOID)
|
||||||
{
|
{
|
||||||
CHAR SystemPath[512], SearchPath[512];
|
CHAR SystemPath[512], SearchPath[512];
|
||||||
|
@ -239,8 +289,11 @@ VOID LoadReactOSSetup2(VOID)
|
||||||
/* Load NLS data */
|
/* Load NLS data */
|
||||||
SetupLdrLoadNlsData(LoaderBlock, InfHandle, BootPath);
|
SetupLdrLoadNlsData(LoaderBlock, InfHandle, BootPath);
|
||||||
|
|
||||||
|
/* Get a list of boot drivers */
|
||||||
|
SetupLdrScanBootDrivers(LoaderBlock, InfHandle, BootPath);
|
||||||
|
|
||||||
/* Load boot drivers */
|
/* Load boot drivers */
|
||||||
//Status = WinLdrLoadBootDrivers(LoaderBlock, BootPath);
|
Status = WinLdrLoadBootDrivers(LoaderBlock, BootPath);
|
||||||
DPRINTM(DPRINT_WINDOWS, "Boot drivers loaded with status %d\n", Status);
|
DPRINTM(DPRINT_WINDOWS, "Boot drivers loaded with status %d\n", Status);
|
||||||
|
|
||||||
/* Alloc PCR, TSS, do magic things with the GDT/IDT */
|
/* Alloc PCR, TSS, do magic things with the GDT/IDT */
|
||||||
|
|
Loading…
Reference in a new issue