Modified LdrLoadModule() to return NTSTATUS.

Added missing definitions.

svn path=/trunk/; revision=2955
This commit is contained in:
Eric Kohl 2002-05-16 06:41:30 +00:00
parent 2d27974602
commit cca52d053b
4 changed files with 81 additions and 62 deletions

View file

@ -1,4 +1,4 @@
/* $Id: kd.h,v 1.8 2002/05/14 21:19:17 dwelch Exp $ /* $Id: kd.h,v 1.9 2002/05/16 06:39:30 ekohl Exp $
* *
* kernel debugger prototypes * kernel debugger prototypes
*/ */
@ -8,18 +8,18 @@
#include <internal/ke.h> #include <internal/ke.h>
typedef enum #define KD_DEBUG_DISABLED 0x00
{ #define KD_DEBUG_GDB 0x01
NoDebug = 0, #define KD_DEBUG_PICE 0x02
GdbDebug, #define KD_DEBUG_SCREEN 0x04
PiceDebug, #define KD_DEBUG_SERIAL 0x08
ScreenDebug, #define KD_DEBUG_BOCHS 0x10
SerialDebug, #define KD_DEBUG_FILELOG 0x20
BochsDebug,
FileLogDebug
} DEBUG_TYPE;
extern DEBUG_TYPE KdDebugType; extern ULONG KdDebugState;
KD_PORT_INFORMATION GdbPortInfo;
KD_PORT_INFORMATION LogPortInfo;
typedef enum _KD_CONTINUE_TYPE typedef enum _KD_CONTINUE_TYPE
{ {

View file

@ -13,6 +13,11 @@
#include <ntdll/ldr.h> #include <ntdll/ldr.h>
#include <internal/module.h> #include <internal/module.h>
#define KERNEL_MODULE_NAME L"ntoskrnl.exe"
#define HAL_MODULE_NAME L"hal.dll"
#define MODULE_ROOT_NAME L"\\Modules\\"
#define FILESYSTEM_ROOT_NAME L"\\FileSystem\\"
NTSTATUS NTSTATUS
LdrLoadDriver ( LdrLoadDriver (
PUNICODE_STRING Filename, PUNICODE_STRING Filename,
@ -52,7 +57,7 @@ PVOID
LdrpGetSystemDllCallbackDispatcher(VOID); LdrpGetSystemDllCallbackDispatcher(VOID);
NTSTATUS NTSTATUS
LdrpMapImage ( LdrpMapImage (
HANDLE ProcessHandle, HANDLE ProcessHandle,
HANDLE SectionHandle, HANDLE SectionHandle,
PVOID * ImageBase PVOID * ImageBase
); );
@ -93,12 +98,13 @@ PVOID LdrSafePEProcessModule(
PVOID ImportModuleBase, PVOID ImportModuleBase,
PULONG DriverSize); PULONG DriverSize);
PMODULE_OBJECT NTSTATUS
LdrLoadModule(PUNICODE_STRING Filename); LdrLoadModule(PUNICODE_STRING Filename,
PMODULE_OBJECT *ModuleObject);
NTSTATUS LdrFindModuleObject( NTSTATUS
PUNICODE_STRING ModuleName, LdrFindModuleObject(PUNICODE_STRING ModuleName,
PMODULE_OBJECT *ModuleObject); PMODULE_OBJECT *ModuleObject);
NTSTATUS LdrpOpenModuleDirectory(PHANDLE Handle); NTSTATUS LdrpOpenModuleDirectory(PHANDLE Handle);

View file

@ -1,4 +1,4 @@
/* $Id: device.c,v 1.40 2002/05/05 14:57:43 chorns Exp $ /* $Id: device.c,v 1.41 2002/05/16 06:40:29 ekohl Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -432,20 +432,20 @@ IopInitializeService(
{ {
/* The module is currently not loaded, so load it now */ /* The module is currently not loaded, so load it now */
ModuleObject = LdrLoadModule(ImagePath); Status = LdrLoadModule(ImagePath, &ModuleObject);
if (!ModuleObject) if (!NT_SUCCESS(Status))
{ {
/* FIXME: Log the error */ /* FIXME: Log the error */
CPRINT("Driver load failed\n"); CPRINT("Driver load failed\n");
return STATUS_UNSUCCESSFUL; return(Status);
} }
Status = IopInitializeDriver(ModuleObject->EntryPoint, DeviceNode); Status = IopInitializeDriver(ModuleObject->EntryPoint, DeviceNode);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
/* FIXME: Log the error */ /* FIXME: Log the error */
CPRINT("A driver failed to initialize\n"); CPRINT("A driver failed to initialize\n");
return Status; return(Status);
} }
} }
@ -453,7 +453,7 @@ IopInitializeService(
Status = IopInitializeDevice(DeviceNode, TRUE); Status = IopInitializeDevice(DeviceNode, TRUE);
return Status; return(Status);
} }
NTSTATUS NTSTATUS

View file

@ -1,4 +1,4 @@
/* $Id: loader.c,v 1.103 2002/05/08 17:05:32 chorns Exp $ /* $Id: loader.c,v 1.104 2002/05/16 06:41:30 ekohl Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -58,7 +58,6 @@ ULONG_PTR LdrHalBase;
/* FORWARD DECLARATIONS ******************************************************/ /* FORWARD DECLARATIONS ******************************************************/
PMODULE_OBJECT LdrLoadModule(PUNICODE_STRING Filename);
NTSTATUS LdrProcessModule(PVOID ModuleLoadBase, NTSTATUS LdrProcessModule(PVOID ModuleLoadBase,
PUNICODE_STRING ModuleName, PUNICODE_STRING ModuleName,
PMODULE_OBJECT *ModuleObject); PMODULE_OBJECT *ModuleObject);
@ -1020,9 +1019,10 @@ LdrCreateModule(PVOID ObjectBody,
* RETURNS: Status * RETURNS: Status
*/ */
NTSTATUS LdrLoadDriver(PUNICODE_STRING Filename, NTSTATUS
PDEVICE_NODE DeviceNode, LdrLoadDriver(PUNICODE_STRING Filename,
BOOLEAN BootDriversOnly) PDEVICE_NODE DeviceNode,
BOOLEAN BootDriversOnly)
{ {
PMODULE_OBJECT ModuleObject; PMODULE_OBJECT ModuleObject;
WCHAR Buffer[MAX_PATH]; WCHAR Buffer[MAX_PATH];
@ -1031,10 +1031,11 @@ NTSTATUS LdrLoadDriver(PUNICODE_STRING Filename,
LPWSTR Start; LPWSTR Start;
LPWSTR Ext; LPWSTR Ext;
ModuleObject = LdrLoadModule(Filename); Status = LdrLoadModule(Filename, &ModuleObject);
if (!ModuleObject) if (!NT_SUCCESS(Status))
{ {
return STATUS_UNSUCCESSFUL; DPRINT1("LdrLoadModule() failed\n");
return(Status);
} }
/* Set a service name for the device node */ /* Set a service name for the device node */
@ -1062,21 +1063,23 @@ NTSTATUS LdrLoadDriver(PUNICODE_STRING Filename,
ObDereferenceObject(ModuleObject); ObDereferenceObject(ModuleObject);
} }
return Status; return(Status);
} }
NTSTATUS LdrLoadGdiDriver (PUNICODE_STRING DriverName, NTSTATUS
PVOID *ImageAddress, LdrLoadGdiDriver(PUNICODE_STRING DriverName,
PVOID *SectionPointer, PVOID *ImageAddress,
PVOID *EntryPoint, PVOID *SectionPointer,
PVOID *ExportSectionPointer) PVOID *EntryPoint,
PVOID *ExportSectionPointer)
{ {
PMODULE_OBJECT ModuleObject; PMODULE_OBJECT ModuleObject;
NTSTATUS Status;
ModuleObject = LdrLoadModule(DriverName); Status = LdrLoadModule(DriverName, &ModuleObject);
if (ModuleObject == 0) if (!NT_SUCCESS(Status))
{ {
return STATUS_UNSUCCESSFUL; return(Status);
} }
if (ImageAddress) if (ImageAddress)
@ -1091,25 +1094,30 @@ NTSTATUS LdrLoadGdiDriver (PUNICODE_STRING DriverName,
// if (ExportSectionPointer) // if (ExportSectionPointer)
// *ExportSectionPointer = ModuleObject-> // *ExportSectionPointer = ModuleObject->
return STATUS_SUCCESS; return(STATUS_SUCCESS);
} }
PMODULE_OBJECT NTSTATUS
LdrLoadModule(PUNICODE_STRING Filename) LdrLoadModule(PUNICODE_STRING Filename,
PMODULE_OBJECT *ModuleObject)
{ {
PVOID ModuleLoadBase; PVOID ModuleLoadBase;
NTSTATUS Status; NTSTATUS Status;
HANDLE FileHandle; HANDLE FileHandle;
OBJECT_ATTRIBUTES ObjectAttributes; OBJECT_ATTRIBUTES ObjectAttributes;
PMODULE_OBJECT ModuleObject; PMODULE_OBJECT Module;
FILE_STANDARD_INFORMATION FileStdInfo; FILE_STANDARD_INFORMATION FileStdInfo;
IO_STATUS_BLOCK IoStatusBlock; IO_STATUS_BLOCK IoStatusBlock;
*ModuleObject = NULL;
/* Check for module already loaded */ /* Check for module already loaded */
if ((ModuleObject = LdrOpenModule(Filename)) != NULL) Module = LdrOpenModule(Filename);
if (Module != NULL)
{ {
return ModuleObject; *ModuleObject = Module;
return(STATUS_SUCCESS);
} }
DPRINT("Loading Module %wZ...\n", Filename); DPRINT("Loading Module %wZ...\n", Filename);
@ -1131,7 +1139,7 @@ LdrLoadModule(PUNICODE_STRING Filename)
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
CPRINT("Could not open module file: %wZ\n", Filename); CPRINT("Could not open module file: %wZ\n", Filename);
return NULL; return(Status);
} }
CHECKPOINT; CHECKPOINT;
@ -1144,7 +1152,8 @@ LdrLoadModule(PUNICODE_STRING Filename)
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
CPRINT("Could not get file size\n"); CPRINT("Could not get file size\n");
return NULL; NtClose(FileHandle);
return(Status);
} }
CHECKPOINT; CHECKPOINT;
@ -1156,7 +1165,8 @@ LdrLoadModule(PUNICODE_STRING Filename)
if (ModuleLoadBase == NULL) if (ModuleLoadBase == NULL)
{ {
CPRINT("Could not allocate memory for module"); CPRINT("Could not allocate memory for module");
return NULL; NtClose(FileHandle);
return(Status);
} }
CHECKPOINT; CHECKPOINT;
@ -1171,7 +1181,8 @@ LdrLoadModule(PUNICODE_STRING Filename)
{ {
CPRINT("Could not read module file into memory"); CPRINT("Could not read module file into memory");
ExFreePool(ModuleLoadBase); ExFreePool(ModuleLoadBase);
return NULL; NtClose(FileHandle);
return(Status);
} }
CHECKPOINT; CHECKPOINT;
@ -1179,12 +1190,12 @@ LdrLoadModule(PUNICODE_STRING Filename)
Status = LdrProcessModule(ModuleLoadBase, Status = LdrProcessModule(ModuleLoadBase,
Filename, Filename,
&ModuleObject); &Module);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
CPRINT("Could not process module"); CPRINT("Could not process module");
ExFreePool(ModuleLoadBase); ExFreePool(ModuleLoadBase);
return NULL; return(Status);
} }
/* Cleanup */ /* Cleanup */
@ -1192,12 +1203,14 @@ LdrLoadModule(PUNICODE_STRING Filename)
#ifdef KDBG #ifdef KDBG
/* Load symbols for module if available */ /* Load symbols for module if available */
LdrpLoadModuleSymbols(ModuleObject); LdrpLoadModuleSymbols(Module);
#endif /* KDBG */ #endif /* KDBG */
return ModuleObject; *ModuleObject = Module;
return(STATUS_SUCCESS);
} }
NTSTATUS NTSTATUS
@ -1720,10 +1733,10 @@ LdrPEProcessModule(PVOID ModuleLoadBase,
RtlInitUnicodeString (&ModuleName, NameBuffer); RtlInitUnicodeString (&ModuleName, NameBuffer);
DPRINT("Import module: %wZ\n", &ModuleName); DPRINT("Import module: %wZ\n", &ModuleName);
LibraryModuleObject = LdrLoadModule(&ModuleName); Status = LdrLoadModule(&ModuleName, &LibraryModuleObject);
if (LibraryModuleObject == 0) if (!NT_SUCCESS(Status))
{ {
CPRINT("Unknown import module: %wZ\n", &ModuleName); CPRINT("Unknown import module: %wZ (Status %lx)\n", &ModuleName, Status);
} }
/* Get the import address list */ /* Get the import address list */
ImportAddressList = (PVOID *) ((DWORD)DriverBase + ImportAddressList = (PVOID *) ((DWORD)DriverBase +