mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 10:04:49 +00:00
Fixed loading of symbol files.
Implemented automatic loading of PICE. svn path=/trunk/; revision=3102
This commit is contained in:
parent
56deabe577
commit
d783d4d686
7 changed files with 124 additions and 449 deletions
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: registry.c,v 1.71 2002/05/05 14:57:43 chorns Exp $
|
/* $Id: registry.c,v 1.72 2002/06/16 11:45:06 ekohl Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -463,6 +463,48 @@ CmInitializeRegistry(VOID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VOID
|
||||||
|
CmInit2(PCHAR CommandLine)
|
||||||
|
{
|
||||||
|
PCHAR p1, p2;
|
||||||
|
ULONG PiceStart;
|
||||||
|
|
||||||
|
/* FIXME: Store current command line */
|
||||||
|
|
||||||
|
/* FIXME: Create the 'CurrentControlSet' link. */
|
||||||
|
|
||||||
|
/* Set PICE 'Start' value to 1, if PICE debugging is enabled */
|
||||||
|
PiceStart = 4;
|
||||||
|
p1 = (PCHAR)CommandLine;
|
||||||
|
while (p1 && (p2 = strchr(p1, '/')))
|
||||||
|
{
|
||||||
|
p2++;
|
||||||
|
if (_strnicmp(p2, "DEBUGPORT", 9) == 0)
|
||||||
|
{
|
||||||
|
p2 += 9;
|
||||||
|
if (*p2 == '=')
|
||||||
|
{
|
||||||
|
p2++;
|
||||||
|
if (_strnicmp(p2, "PICE", 4) == 0)
|
||||||
|
{
|
||||||
|
p2 += 4;
|
||||||
|
PiceStart = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p1 = p2;
|
||||||
|
}
|
||||||
|
|
||||||
|
RtlWriteRegistryValue(RTL_REGISTRY_SERVICES,
|
||||||
|
L"\\Pice",
|
||||||
|
L"Start",
|
||||||
|
REG_DWORD,
|
||||||
|
&PiceStart,
|
||||||
|
sizeof(ULONG));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
CmiConnectHive(PWSTR FileName,
|
CmiConnectHive(PWSTR FileName,
|
||||||
PWSTR FullName,
|
PWSTR FullName,
|
||||||
|
|
|
@ -19,6 +19,9 @@
|
||||||
#define FILESYSTEM_ROOT_NAME L"\\FileSystem\\"
|
#define FILESYSTEM_ROOT_NAME L"\\FileSystem\\"
|
||||||
|
|
||||||
|
|
||||||
|
extern ULONG_PTR LdrHalBase;
|
||||||
|
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
LdrLoadInitialProcess (
|
LdrLoadInitialProcess (
|
||||||
VOID
|
VOID
|
||||||
|
@ -92,7 +95,6 @@ VOID
|
||||||
LdrInit1(VOID);
|
LdrInit1(VOID);
|
||||||
VOID
|
VOID
|
||||||
LdrInitDebug(PLOADER_MODULE Module, PWCH Name);
|
LdrInitDebug(PLOADER_MODULE Module, PWCH Name);
|
||||||
VOID LdrLoadUserModuleSymbols(PLDR_MODULE ModuleObject);
|
|
||||||
|
|
||||||
PVOID LdrSafePEProcessModule(
|
PVOID LdrSafePEProcessModule(
|
||||||
PVOID ModuleLoadBase,
|
PVOID ModuleLoadBase,
|
||||||
|
@ -110,6 +112,13 @@ LdrUnloadModule(PMODULE_OBJECT ModuleObject);
|
||||||
PMODULE_OBJECT
|
PMODULE_OBJECT
|
||||||
LdrGetModuleObject(PUNICODE_STRING ModuleName);
|
LdrGetModuleObject(PUNICODE_STRING ModuleName);
|
||||||
|
|
||||||
extern ULONG_PTR LdrHalBase;
|
|
||||||
|
#ifdef KDBG
|
||||||
|
VOID
|
||||||
|
LdrpLoadModuleSymbols(PMODULE_OBJECT ModuleObject);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
LdrLoadUserModuleSymbols(PLDR_MODULE ModuleObject);
|
||||||
|
#endif /* KDBG */
|
||||||
|
|
||||||
#endif /* __INCLUDE_INTERNAL_LDR_H */
|
#endif /* __INCLUDE_INTERNAL_LDR_H */
|
||||||
|
|
|
@ -43,6 +43,7 @@ VOID IoInit(VOID);
|
||||||
VOID ObInit(VOID);
|
VOID ObInit(VOID);
|
||||||
VOID PsInit(VOID);
|
VOID PsInit(VOID);
|
||||||
VOID CmInitializeRegistry(VOID);
|
VOID CmInitializeRegistry(VOID);
|
||||||
|
VOID CmInit2(PCHAR CommandLine);
|
||||||
VOID CmShutdownRegistry(VOID);
|
VOID CmShutdownRegistry(VOID);
|
||||||
VOID CmImportHive(PCHAR ChunkBase, ULONG ChunkSize);
|
VOID CmImportHive(PCHAR ChunkBase, ULONG ChunkSize);
|
||||||
VOID KdInitSystem(ULONG Reserved, PLOADER_PARAMETER_BLOCK LoaderBlock);
|
VOID KdInitSystem(ULONG Reserved, PLOADER_PARAMETER_BLOCK LoaderBlock);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: driver.c,v 1.5 2002/06/13 15:13:54 ekohl Exp $
|
/* $Id: driver.c,v 1.6 2002/06/16 11:44:13 ekohl Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -524,8 +524,34 @@ LdrLoadAutoConfigDrivers(VOID)
|
||||||
CHAR TextBuffer [256];
|
CHAR TextBuffer [256];
|
||||||
ULONG x, y, cx, cy;
|
ULONG x, y, cx, cy;
|
||||||
|
|
||||||
|
#ifdef KDBG
|
||||||
|
UNICODE_STRING ModuleName;
|
||||||
|
PMODULE_OBJECT ModuleObject;
|
||||||
|
#endif
|
||||||
|
|
||||||
DPRINT("LdrLoadAutoConfigDrivers() called\n");
|
DPRINT("LdrLoadAutoConfigDrivers() called\n");
|
||||||
|
|
||||||
|
#ifdef KDBG
|
||||||
|
/*
|
||||||
|
* Load symbols for ntoskrnl.exe and hal.dll because \SystemRoot
|
||||||
|
* is created after their module entries
|
||||||
|
*/
|
||||||
|
|
||||||
|
RtlInitUnicodeString(&ModuleName, KERNEL_MODULE_NAME);
|
||||||
|
ModuleObject = LdrGetModuleObject(&ModuleName);
|
||||||
|
if (ModuleObject != NULL)
|
||||||
|
{
|
||||||
|
LdrpLoadModuleSymbols(ModuleObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
RtlInitUnicodeString(&ModuleName, HAL_MODULE_NAME);
|
||||||
|
ModuleObject = LdrGetModuleObject(&ModuleName);
|
||||||
|
if (ModuleObject != NULL)
|
||||||
|
{
|
||||||
|
LdrpLoadModuleSymbols(ModuleObject);
|
||||||
|
}
|
||||||
|
#endif /* KDBG */
|
||||||
|
|
||||||
GroupEntry = GroupListHead.Flink;
|
GroupEntry = GroupListHead.Flink;
|
||||||
while (GroupEntry != &GroupListHead)
|
while (GroupEntry != &GroupListHead)
|
||||||
{
|
{
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
/* $Id: main.c,v 1.124 2002/06/12 23:30:08 ekohl Exp $
|
/* $Id: main.c,v 1.125 2002/06/16 11:44:53 ekohl Exp $
|
||||||
*
|
*
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
* FILE: ntoskrnl/ke/main.c
|
* FILE: ntoskrnl/ke/main.c
|
||||||
|
@ -75,305 +75,9 @@ volatile BOOLEAN Initialized = FALSE;
|
||||||
|
|
||||||
extern PVOID Ki386InitialStackArray[MAXIMUM_PROCESSORS];
|
extern PVOID Ki386InitialStackArray[MAXIMUM_PROCESSORS];
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
LPWSTR ServiceName;
|
|
||||||
LPWSTR DeviceDesc;
|
|
||||||
LPWSTR Group;
|
|
||||||
DWORD Start;
|
|
||||||
DWORD Type;
|
|
||||||
} SERVICE, *PSERVICE;
|
|
||||||
|
|
||||||
SERVICE Services[] = {
|
|
||||||
{L"pci", L"PCI Bus Driver", L"Boot Bus Extender", 0, 1},
|
|
||||||
{L"keyboard", L"Standard Keyboard Driver", L"Base", 0, 1},
|
|
||||||
{L"blue", L"Bluescreen Driver", L"Base", 0, 1},
|
|
||||||
{L"vidport", L"Video Port Driver", L"Base", 0, 1},
|
|
||||||
{L"vgamp", L"VGA Miniport", L"Base", 0, 1},
|
|
||||||
{L"minixfs", L"Minix File System", L"File system", 0, 1},
|
|
||||||
{L"msfs", L"Mail Slot File System", L"File system", 0, 1},
|
|
||||||
{L"npfs", L"Named Pipe File System", L"File system", 0, 1},
|
|
||||||
{L"psaux", L"PS/2 Auxillary Port Driver", L"", 0, 1},
|
|
||||||
{L"mouclass", L"Mouse Class Driver", L"Pointer Class", 0, 1},
|
|
||||||
{L"ndis", L"NDIS System Driver", L"NDIS Wrapper", 0, 1},
|
|
||||||
{L"ne2000", L"Novell Eagle 2000 Driver", L"NDIS", 0, 1},
|
|
||||||
{L"afd", L"AFD Networking Support Environment", L"TDI", 0, 1},
|
|
||||||
{NULL,}
|
|
||||||
};
|
|
||||||
|
|
||||||
/* FUNCTIONS ****************************************************************/
|
/* FUNCTIONS ****************************************************************/
|
||||||
|
|
||||||
#define FULLREG
|
|
||||||
|
|
||||||
VOID CreateDefaultRegistryForLegacyDriver(
|
|
||||||
PSERVICE Service)
|
|
||||||
{
|
|
||||||
#ifdef FULLREG
|
|
||||||
WCHAR LegacyDriver[] = L"LegacyDriver";
|
|
||||||
#endif
|
|
||||||
WCHAR InstancePath[MAX_PATH];
|
|
||||||
WCHAR KeyNameBuffer[MAX_PATH];
|
|
||||||
WCHAR Name[MAX_PATH];
|
|
||||||
UNICODE_STRING KeyName;
|
|
||||||
HANDLE KeyHandle;
|
|
||||||
#ifdef FULLREG
|
|
||||||
DWORD DwordData;
|
|
||||||
#endif
|
|
||||||
ULONG Length;
|
|
||||||
NTSTATUS Status;
|
|
||||||
WCHAR ImagePath[MAX_PATH];
|
|
||||||
|
|
||||||
/* Enum section */
|
|
||||||
wcscpy(Name, Service->ServiceName);
|
|
||||||
_wcsupr(Name);
|
|
||||||
wcscpy(InstancePath, L"Root\\LEGACY_");
|
|
||||||
wcscat(InstancePath, Name);
|
|
||||||
wcscat(InstancePath, L"\\0000");
|
|
||||||
|
|
||||||
wcscpy(KeyNameBuffer, L"\\Registry\\Machine\\System\\CurrentControlSet\\Enum\\");
|
|
||||||
wcscat(KeyNameBuffer, InstancePath);
|
|
||||||
|
|
||||||
RtlInitUnicodeString(&KeyName, KeyNameBuffer);
|
|
||||||
|
|
||||||
DPRINT("Key name is %S\n", KeyName.Buffer);
|
|
||||||
|
|
||||||
Status = RtlpCreateRegistryKeyPath(KeyName.Buffer);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
DPRINT1("RtlpCreateRegistryKeyPath() failed with status %x\n", Status);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Status = RtlpGetRegistryHandle(
|
|
||||||
RTL_REGISTRY_ENUM,
|
|
||||||
InstancePath,
|
|
||||||
TRUE,
|
|
||||||
&KeyHandle);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
DPRINT1("RtlpGetRegistryHandle() failed (Status %x)\n", Status);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#ifdef FULLREG
|
|
||||||
DwordData = 0;
|
|
||||||
Length = sizeof(DWORD);
|
|
||||||
Status = RtlWriteRegistryValue(
|
|
||||||
RTL_REGISTRY_HANDLE,
|
|
||||||
(PWSTR)KeyHandle,
|
|
||||||
L"Capabilities",
|
|
||||||
REG_DWORD,
|
|
||||||
(LPWSTR)&DwordData,
|
|
||||||
Length);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
DPRINT1("RtlWriteRegistryValue() failed (Status %x)\n", Status);
|
|
||||||
NtClose(KeyHandle);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Length = (wcslen(LegacyDriver) + 1) * sizeof(WCHAR);
|
|
||||||
Status = RtlWriteRegistryValue(
|
|
||||||
RTL_REGISTRY_HANDLE,
|
|
||||||
(PWSTR)KeyHandle,
|
|
||||||
L"Class",
|
|
||||||
REG_SZ,
|
|
||||||
LegacyDriver,
|
|
||||||
Length);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
DPRINT1("RtlWriteRegistryValue() failed (Status %x)\n", Status);
|
|
||||||
NtClose(KeyHandle);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
Length = (wcslen(Service->DeviceDesc) + 1) * sizeof(WCHAR);
|
|
||||||
Status = RtlWriteRegistryValue(
|
|
||||||
RTL_REGISTRY_HANDLE,
|
|
||||||
(PWSTR)KeyHandle,
|
|
||||||
L"DeviceDesc",
|
|
||||||
REG_SZ,
|
|
||||||
Service->DeviceDesc,
|
|
||||||
Length);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
DPRINT1("RtlWriteRegistryValue() failed (Status %x)\n", Status);
|
|
||||||
NtClose(KeyHandle);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#ifdef FULLREG
|
|
||||||
DwordData = 0;
|
|
||||||
Length = sizeof(DWORD);
|
|
||||||
Status = RtlWriteRegistryValue(
|
|
||||||
RTL_REGISTRY_HANDLE,
|
|
||||||
(PWSTR)KeyHandle,
|
|
||||||
L"Legacy",
|
|
||||||
REG_DWORD,
|
|
||||||
(LPWSTR)&DwordData,
|
|
||||||
sizeof(DWORD));
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
DPRINT1("RtlWriteRegistryValue() failed (Status %x)\n", Status);
|
|
||||||
NtClose(KeyHandle);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
Length = (wcslen(Service->ServiceName) + 1) * sizeof(WCHAR);
|
|
||||||
Status = RtlWriteRegistryValue(
|
|
||||||
RTL_REGISTRY_HANDLE,
|
|
||||||
(PWSTR)KeyHandle,
|
|
||||||
L"Service",
|
|
||||||
REG_SZ,
|
|
||||||
Service->ServiceName,
|
|
||||||
Length);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
DPRINT1("RtlWriteRegistryValue() failed (Status %x)\n", Status);
|
|
||||||
NtClose(KeyHandle);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
NtClose(KeyHandle);
|
|
||||||
|
|
||||||
|
|
||||||
/* Services section */
|
|
||||||
|
|
||||||
Status = RtlpGetRegistryHandle(
|
|
||||||
RTL_REGISTRY_SERVICES,
|
|
||||||
Service->ServiceName,
|
|
||||||
TRUE,
|
|
||||||
&KeyHandle);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
DPRINT1("RtlpGetRegistryHandle() failed (Status %x)\n", Status);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#ifdef FULLREG
|
|
||||||
Length = (wcslen(Service->DeviceDesc) + 1) * sizeof(WCHAR);
|
|
||||||
Status = RtlWriteRegistryValue(
|
|
||||||
RTL_REGISTRY_HANDLE,
|
|
||||||
(PWSTR)KeyHandle,
|
|
||||||
L"DisplayName",
|
|
||||||
REG_SZ,
|
|
||||||
Service->DeviceDesc,
|
|
||||||
Length);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
DPRINT1("RtlWriteRegistryValue() failed (Status %x)\n", Status);
|
|
||||||
NtClose(KeyHandle);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
DwordData = 1;
|
|
||||||
Length = sizeof(DWORD);
|
|
||||||
Status = RtlWriteRegistryValue(
|
|
||||||
RTL_REGISTRY_HANDLE,
|
|
||||||
(PWSTR)KeyHandle,
|
|
||||||
L"ErrorControl",
|
|
||||||
REG_DWORD,
|
|
||||||
(LPWSTR)&DwordData,
|
|
||||||
Length);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
DPRINT1("RtlWriteRegistryValue() failed (Status %x)\n", Status);
|
|
||||||
NtClose(KeyHandle);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Length = (wcslen(Service->Group) + 1) * sizeof(WCHAR);
|
|
||||||
Status = RtlWriteRegistryValue(
|
|
||||||
RTL_REGISTRY_HANDLE,
|
|
||||||
(PWSTR)KeyHandle,
|
|
||||||
L"Group",
|
|
||||||
REG_SZ,
|
|
||||||
Service->Group,
|
|
||||||
Length);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
DPRINT1("RtlWriteRegistryValue() failed (Status %x)\n", Status);
|
|
||||||
NtClose(KeyHandle);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
wcscpy(ImagePath, L"\\SystemRoot\\System32\\drivers\\");
|
|
||||||
wcscat(ImagePath, Service->ServiceName);
|
|
||||||
wcscat(ImagePath, L".sys");
|
|
||||||
|
|
||||||
Length = (wcslen(ImagePath) + 1) * sizeof(WCHAR);
|
|
||||||
Status = RtlWriteRegistryValue(
|
|
||||||
RTL_REGISTRY_HANDLE,
|
|
||||||
(PWSTR)KeyHandle,
|
|
||||||
L"ImagePath",
|
|
||||||
REG_SZ,
|
|
||||||
ImagePath,
|
|
||||||
Length);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
DPRINT1("RtlWriteRegistryValue() failed (Status %x)\n", Status);
|
|
||||||
NtClose(KeyHandle);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#ifdef FULLREG
|
|
||||||
DwordData = Service->Start;
|
|
||||||
Length = sizeof(DWORD);
|
|
||||||
Status = RtlWriteRegistryValue(
|
|
||||||
RTL_REGISTRY_HANDLE,
|
|
||||||
(PWSTR)KeyHandle,
|
|
||||||
L"Start",
|
|
||||||
REG_DWORD,
|
|
||||||
(LPWSTR)&DwordData,
|
|
||||||
Length);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
DPRINT1("RtlWriteRegistryValue() failed (Status %x)\n", Status);
|
|
||||||
NtClose(KeyHandle);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
DwordData = Service->Type;
|
|
||||||
Length = sizeof(DWORD);
|
|
||||||
Status = RtlWriteRegistryValue(
|
|
||||||
RTL_REGISTRY_HANDLE,
|
|
||||||
(PWSTR)KeyHandle,
|
|
||||||
L"Type",
|
|
||||||
REG_DWORD,
|
|
||||||
(LPWSTR)&DwordData,
|
|
||||||
Length);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
DPRINT1("RtlWriteRegistryValue() failed (Status %x)\n", Status);
|
|
||||||
NtClose(KeyHandle);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
NtClose(KeyHandle);
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID CreateDefaultRegistry()
|
|
||||||
{
|
|
||||||
NTSTATUS Status;
|
|
||||||
ULONG i;
|
|
||||||
|
|
||||||
Status = RtlpCreateRegistryKeyPath(L"\\Registry\\Machine\\System\\CurrentControlSet\\Enum\\");
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
CPRINT("RtlpCreateRegistryKeyPath() (Status %x)\n", Status);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Status = RtlpCreateRegistryKeyPath(L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\");
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
CPRINT("RtlpCreateRegistryKeyPath() (Status %x)\n", Status);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; Services[i].ServiceName != NULL; i++)
|
|
||||||
{
|
|
||||||
CreateDefaultRegistryForLegacyDriver(&Services[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static BOOLEAN
|
static BOOLEAN
|
||||||
RtlpCheckFileNameExtension(PCHAR FileName,
|
RtlpCheckFileNameExtension(PCHAR FileName,
|
||||||
PCHAR Extension)
|
PCHAR Extension)
|
||||||
|
@ -963,6 +667,9 @@ ExpInitializeExecutive(VOID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Initialize volatile registry settings */
|
||||||
|
CmInit2((PCHAR)KeLoaderBlock.CommandLine);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Enter the kernel debugger before starting up the boot drivers
|
* Enter the kernel debugger before starting up the boot drivers
|
||||||
*/
|
*/
|
||||||
|
@ -1010,10 +717,6 @@ ExpInitializeExecutive(VOID)
|
||||||
#endif /* DBGPRINT_FILE_LOG */
|
#endif /* DBGPRINT_FILE_LOG */
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
CreateDefaultRegistry();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
PiInitDefaultLocale();
|
PiInitDefaultLocale();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: loader.c,v 1.112 2002/06/14 07:46:02 ekohl Exp $
|
/* $Id: loader.c,v 1.113 2002/06/16 11:44:34 ekohl Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -244,38 +244,6 @@ LdrInitModuleManagement(VOID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* load the auto config drivers.
|
|
||||||
*/
|
|
||||||
#if 0
|
|
||||||
static VOID
|
|
||||||
LdrLoadAutoConfigDriver(LPWSTR RelativeDriverName)
|
|
||||||
{
|
|
||||||
WCHAR TmpFileName [MAX_PATH];
|
|
||||||
CHAR Buffer [256];
|
|
||||||
UNICODE_STRING DriverName;
|
|
||||||
ULONG x, y, cx, cy;
|
|
||||||
|
|
||||||
HalQueryDisplayParameters(&x, &y, &cx, &cy);
|
|
||||||
RtlFillMemory(Buffer, x, ' ');
|
|
||||||
Buffer[x] = '\0';
|
|
||||||
HalSetDisplayParameters(0, y-1);
|
|
||||||
HalDisplayString(Buffer);
|
|
||||||
|
|
||||||
sprintf(Buffer, "Loading %S...\n",RelativeDriverName);
|
|
||||||
HalSetDisplayParameters(0, y-1);
|
|
||||||
HalDisplayString(Buffer);
|
|
||||||
HalSetDisplayParameters(cx, cy);
|
|
||||||
//CPRINT("Loading %S\n",RelativeDriverName);
|
|
||||||
|
|
||||||
wcscpy(TmpFileName, L"\\SystemRoot\\system32\\drivers\\");
|
|
||||||
wcscat(TmpFileName, RelativeDriverName);
|
|
||||||
RtlInitUnicodeString (&DriverName, TmpFileName);
|
|
||||||
|
|
||||||
NtLoadDriver(&DriverName);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef KDBG
|
#ifdef KDBG
|
||||||
|
|
||||||
BOOLEAN LdrpReadLine(PCHAR Line,
|
BOOLEAN LdrpReadLine(PCHAR Line,
|
||||||
|
@ -426,10 +394,10 @@ PSYMBOL LdrpParseLine(PCHAR Line,
|
||||||
return Symbol;
|
return Symbol;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID LdrpLoadModuleSymbolsFromBuffer(
|
VOID
|
||||||
PMODULE_OBJECT ModuleObject,
|
LdrpLoadModuleSymbolsFromBuffer(PMODULE_OBJECT ModuleObject,
|
||||||
PVOID Buffer,
|
PVOID Buffer,
|
||||||
ULONG Length)
|
ULONG Length)
|
||||||
/*
|
/*
|
||||||
Symbols must be sorted by address, e.g.
|
Symbols must be sorted by address, e.g.
|
||||||
"nm --numeric-sort module.sys > module.sym"
|
"nm --numeric-sort module.sys > module.sym"
|
||||||
|
@ -486,10 +454,11 @@ VOID LdrpLoadModuleSymbolsFromBuffer(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID LdrpLoadUserModuleSymbolsFromBuffer(
|
|
||||||
PLDR_MODULE ModuleObject,
|
VOID
|
||||||
PVOID Buffer,
|
LdrpLoadUserModuleSymbolsFromBuffer(PLDR_MODULE ModuleObject,
|
||||||
ULONG Length)
|
PVOID Buffer,
|
||||||
|
ULONG Length)
|
||||||
/*
|
/*
|
||||||
Symbols must be sorted by address, e.g.
|
Symbols must be sorted by address, e.g.
|
||||||
"nm --numeric-sort module.dll > module.sym"
|
"nm --numeric-sort module.dll > module.sym"
|
||||||
|
@ -539,6 +508,7 @@ VOID LdrpLoadUserModuleSymbolsFromBuffer(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
LdrpLoadModuleSymbols(PMODULE_OBJECT ModuleObject)
|
LdrpLoadModuleSymbols(PMODULE_OBJECT ModuleObject)
|
||||||
{
|
{
|
||||||
|
@ -642,7 +612,9 @@ LdrpLoadModuleSymbols(PMODULE_OBJECT ModuleObject)
|
||||||
ExFreePool(FileBuffer);
|
ExFreePool(FileBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID LdrLoadUserModuleSymbols(PLDR_MODULE ModuleObject)
|
|
||||||
|
VOID
|
||||||
|
LdrLoadUserModuleSymbols(PLDR_MODULE ModuleObject)
|
||||||
{
|
{
|
||||||
FILE_STANDARD_INFORMATION FileStdInfo;
|
FILE_STANDARD_INFORMATION FileStdInfo;
|
||||||
OBJECT_ATTRIBUTES ObjectAttributes;
|
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||||
|
@ -743,100 +715,16 @@ VOID LdrLoadUserModuleSymbols(PLDR_MODULE ModuleObject)
|
||||||
|
|
||||||
ExFreePool(FileBuffer);
|
ExFreePool(FileBuffer);
|
||||||
}
|
}
|
||||||
#endif /* KDBG */
|
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
VOID
|
||||||
VOID LdrLoadAutoConfigDrivers (VOID)
|
LdrpUnloadModuleSymbols(PMODULE_OBJECT ModuleObject)
|
||||||
{
|
{
|
||||||
|
/* FIXME: implement me! */
|
||||||
#ifdef KDBG
|
}
|
||||||
NTSTATUS Status;
|
|
||||||
UNICODE_STRING ModuleName;
|
|
||||||
PMODULE_OBJECT ModuleObject;
|
|
||||||
|
|
||||||
/* Load symbols for ntoskrnl.exe and hal.dll because \SystemRoot
|
|
||||||
is created after their module entries */
|
|
||||||
|
|
||||||
RtlInitUnicodeString(&ModuleName, KERNEL_MODULE_NAME);
|
|
||||||
Status = LdrFindModuleObject(&ModuleName, &ModuleObject);
|
|
||||||
if (NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
LdrpLoadModuleSymbols(ModuleObject);
|
|
||||||
}
|
|
||||||
|
|
||||||
RtlInitUnicodeString(&ModuleName, HAL_MODULE_NAME);
|
|
||||||
Status = LdrFindModuleObject(&ModuleName, &ModuleObject);
|
|
||||||
if (NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
LdrpLoadModuleSymbols(ModuleObject);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* KDBG */
|
#endif /* KDBG */
|
||||||
|
|
||||||
/*
|
|
||||||
* PCI bus driver
|
|
||||||
*/
|
|
||||||
//LdrLoadAutoConfigDriver( L"pci.sys" );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Keyboard driver
|
|
||||||
*/
|
|
||||||
LdrLoadAutoConfigDriver( L"keyboard.sys" );
|
|
||||||
|
|
||||||
if ((KdDebuggerEnabled) && (KdDebugState & KD_DEBUG_PICE))
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Private ICE debugger
|
|
||||||
*/
|
|
||||||
LdrLoadAutoConfigDriver( L"pice.sys" );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Raw console driver
|
|
||||||
*/
|
|
||||||
LdrLoadAutoConfigDriver( L"blue.sys" );
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
LdrLoadAutoConfigDriver(L"vidport.sys");
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
/*
|
|
||||||
* Minix filesystem driver
|
|
||||||
*/
|
|
||||||
LdrLoadAutoConfigDriver(L"minixfs.sys");
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Mailslot filesystem driver
|
|
||||||
*/
|
|
||||||
LdrLoadAutoConfigDriver(L"msfs.sys");
|
|
||||||
#endif
|
|
||||||
/*
|
|
||||||
* Named pipe filesystem driver
|
|
||||||
*/
|
|
||||||
LdrLoadAutoConfigDriver(L"npfs.sys");
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Mouse drivers
|
|
||||||
*/
|
|
||||||
// LdrLoadAutoConfigDriver(L"l8042prt.sys");
|
|
||||||
LdrLoadAutoConfigDriver(L"psaux.sys");
|
|
||||||
LdrLoadAutoConfigDriver(L"mouclass.sys");
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Networking
|
|
||||||
*/
|
|
||||||
#if 1
|
|
||||||
/*
|
|
||||||
* NDIS library
|
|
||||||
*/
|
|
||||||
LdrLoadAutoConfigDriver(L"ndis.sys");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
LdrpLoadImage(PUNICODE_STRING DriverName,
|
LdrpLoadImage(PUNICODE_STRING DriverName,
|
||||||
|
@ -1029,7 +917,7 @@ LdrUnloadModule(PMODULE_OBJECT ModuleObject)
|
||||||
|
|
||||||
#ifdef KDBG
|
#ifdef KDBG
|
||||||
/* Unload symbols for module if available */
|
/* Unload symbols for module if available */
|
||||||
// LdrpUnloadModuleSymbols(Module);
|
LdrpUnloadModuleSymbols(ModuleObject);
|
||||||
#endif /* KDBG */
|
#endif /* KDBG */
|
||||||
|
|
||||||
/* Free text section */
|
/* Free text section */
|
||||||
|
@ -1072,8 +960,7 @@ LdrInitializeBootStartDriver(PVOID ModuleLoadBase,
|
||||||
CHAR TmpBaseName[MAX_PATH];
|
CHAR TmpBaseName[MAX_PATH];
|
||||||
CHAR TmpFileName[MAX_PATH];
|
CHAR TmpFileName[MAX_PATH];
|
||||||
ANSI_STRING AnsiString;
|
ANSI_STRING AnsiString;
|
||||||
ULONG Length;
|
PCHAR FileExt;
|
||||||
PCHAR Ext;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
HalQueryDisplayParameters(&x, &y, &cx, &cy);
|
HalQueryDisplayParameters(&x, &y, &cx, &cy);
|
||||||
|
@ -1089,13 +976,13 @@ LdrInitializeBootStartDriver(PVOID ModuleLoadBase,
|
||||||
|
|
||||||
#ifdef KDBG
|
#ifdef KDBG
|
||||||
/* Split the filename into base name and extension */
|
/* Split the filename into base name and extension */
|
||||||
Ext = strrchr(FileName, '.');
|
FileExt = strrchr(FileName, '.');
|
||||||
if (Ext != NULL)
|
if (FileExt != NULL)
|
||||||
Length = Ext - FileName;
|
Length = FileExt - FileName;
|
||||||
else
|
else
|
||||||
Length = strlen(FileName);
|
Length = strlen(FileName);
|
||||||
|
|
||||||
if ((Ext != NULL) && (strcmp(Ext, ".sym") == 0))
|
if ((FileExt != NULL) && (strcmp(FileExt, ".sym") == 0))
|
||||||
{
|
{
|
||||||
DPRINT("Module %s is a symbol file\n", FileName);
|
DPRINT("Module %s is a symbol file\n", FileName);
|
||||||
|
|
||||||
|
@ -1111,18 +998,18 @@ LdrInitializeBootStartDriver(PVOID ModuleLoadBase,
|
||||||
DPRINT("dasdsad: %s\n", TmpFileName);
|
DPRINT("dasdsad: %s\n", TmpFileName);
|
||||||
|
|
||||||
RtlAnsiStringToUnicodeString(&ModuleName, &AnsiString, TRUE);
|
RtlAnsiStringToUnicodeString(&ModuleName, &AnsiString, TRUE);
|
||||||
Status = LdrFindModuleObject(&ModuleName, &ModuleObject);
|
ModuleObject = LdrGetModuleObject(&ModuleName);
|
||||||
RtlFreeUnicodeString(&ModuleName);
|
RtlFreeUnicodeString(&ModuleName);
|
||||||
if (!NT_SUCCESS(Status))
|
if (ModuleObject == NULL)
|
||||||
{
|
{
|
||||||
strcpy(TmpFileName, TmpBaseName);
|
strcpy(TmpFileName, TmpBaseName);
|
||||||
strcat(TmpFileName, ".exe");
|
strcat(TmpFileName, ".exe");
|
||||||
RtlInitAnsiString(&AnsiString, TmpFileName);
|
RtlInitAnsiString(&AnsiString, TmpFileName);
|
||||||
RtlAnsiStringToUnicodeString(&ModuleName, &AnsiString, TRUE);
|
RtlAnsiStringToUnicodeString(&ModuleName, &AnsiString, TRUE);
|
||||||
Status = LdrFindModuleObject(&ModuleName, &ModuleObject);
|
ModuleObject = LdrGetModuleObject(&ModuleName);
|
||||||
RtlFreeUnicodeString(&ModuleName);
|
RtlFreeUnicodeString(&ModuleName);
|
||||||
}
|
}
|
||||||
if (NT_SUCCESS(Status))
|
if (ModuleObject != NULL)
|
||||||
{
|
{
|
||||||
LdrpLoadModuleSymbolsFromBuffer(ModuleObject,
|
LdrpLoadModuleSymbolsFromBuffer(ModuleObject,
|
||||||
ModuleLoadBase,
|
ModuleLoadBase,
|
||||||
|
|
|
@ -40,9 +40,9 @@ REGEDIT4
|
||||||
[\Registry\Machine\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder]
|
[\Registry\Machine\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder]
|
||||||
"List"=multi:"SCSI Port", "SCSI Miniport", "Primary Disk", "SCSI Class Helper", \
|
"List"=multi:"SCSI Port", "SCSI Miniport", "Primary Disk", "SCSI Class Helper", \
|
||||||
"SCSI Class", "Boot File System", "Base", "Pointer Port", \
|
"SCSI Class", "Boot File System", "Base", "Pointer Port", \
|
||||||
"Keyboard Port", "Pointer Class", "Keyboard Class", "Video Init", \
|
"Keyboard Port", "Pointer Class", "Keyboard Class", "Debug", \
|
||||||
"Video", "File System", "Event log", "NDIS", "PNP_TDI", "TDI", \
|
"Video Init", "Video", "File System", "Event log", "NDIS", \
|
||||||
"Extended Base"
|
"PNP_TDI", "TDI", "Extended Base"
|
||||||
|
|
||||||
[\Registry\Machine\SYSTEM\CurrentControlSet\Control\Session Manager]
|
[\Registry\Machine\SYSTEM\CurrentControlSet\Control\Session Manager]
|
||||||
"BootExecute"=multi:"autocheck autochk *"
|
"BootExecute"=multi:"autocheck autochk *"
|
||||||
|
@ -200,6 +200,13 @@ REGEDIT4
|
||||||
"Start"=dword:00000001
|
"Start"=dword:00000001
|
||||||
"Type"=dword:00000001
|
"Type"=dword:00000001
|
||||||
|
|
||||||
|
[\Registry\Machine\SYSTEM\CurrentControlSet\Services\Pice]
|
||||||
|
"ErrorControl"=dword:00000000
|
||||||
|
"Group"="Debug"
|
||||||
|
"ImagePath"="system32\drivers\pice.sys"
|
||||||
|
"Start"=dword:00000004
|
||||||
|
"Type"=dword:00000001
|
||||||
|
|
||||||
[\Registry\Machine\SYSTEM\CurrentControlSet\Services\Scsiport]
|
[\Registry\Machine\SYSTEM\CurrentControlSet\Services\Scsiport]
|
||||||
"ErrorControl"=dword:00000000
|
"ErrorControl"=dword:00000000
|
||||||
"Group"="SCSI Port"
|
"Group"="SCSI Port"
|
||||||
|
|
Loading…
Reference in a new issue