mirror of
https://github.com/reactos/reactos.git
synced 2025-08-02 06:05:48 +00:00
Modified LdrLoadModule() to return NTSTATUS.
Added missing definitions. svn path=/trunk/; revision=2955
This commit is contained in:
parent
2d27974602
commit
cca52d053b
4 changed files with 81 additions and 62 deletions
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 +
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue