diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /public/sdk/inc/ntldr.h | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to '')
-rw-r--r-- | public/sdk/inc/ntldr.h | 302 |
1 files changed, 302 insertions, 0 deletions
diff --git a/public/sdk/inc/ntldr.h b/public/sdk/inc/ntldr.h new file mode 100644 index 000000000..709d29565 --- /dev/null +++ b/public/sdk/inc/ntldr.h @@ -0,0 +1,302 @@ +/*++ BUILD Version: 0004 // Increment this if a change has global effects + +Copyright (c) 1989-1993 Microsoft Corporation + +Module Name: + + ntldr.h + +Abstract: + + This module implements the public interfaces of the Loader (Ldr) + subsystem. Ldr is coupled with the session manager. It is not + a seperate process. + +Author: + + Mike O'Leary (mikeol) 22-Mar-1990 + +[Environment:] + + optional-environment-info (e.g. kernel mode only...) + +[Notes:] + + optional-notes + +Revision History: + +--*/ + + + +#ifndef _NTLDRAPI_ +#define _NTLDRAPI_ + +// +// Private flags for loader data table entries +// + +#define LDRP_STATIC_LINK 0x00000002 +#define LDRP_IMAGE_DLL 0x00000004 +#define LDRP_LOAD_IN_PROGRESS 0x00001000 +#define LDRP_UNLOAD_IN_PROGRESS 0x00002000 +#define LDRP_ENTRY_PROCESSED 0x00004000 +#define LDRP_ENTRY_INSERTED 0x00008000 +#define LDRP_CURRENT_LOAD 0x00010000 +#define LDRP_FAILED_BUILTIN_LOAD 0x00020000 +#define LDRP_DONT_CALL_FOR_THREADS 0x00040000 +#define LDRP_PROCESS_ATTACH_CALLED 0x00080000 +#define LDRP_DEBUG_SYMBOLS_LOADED 0x00100000 +#define LDRP_IMAGE_NOT_AT_BASE 0x00200000 +#define LDRP_WX86_IGNORE_MACHINETYPE 0x00400000 + + +// +// Loader Data Table. Used to track DLLs loaded into an +// image. +// + +typedef struct _LDR_DATA_TABLE_ENTRY { + LIST_ENTRY InLoadOrderLinks; + LIST_ENTRY InMemoryOrderLinks; + LIST_ENTRY InInitializationOrderLinks; + PVOID DllBase; + PVOID EntryPoint; + ULONG SizeOfImage; + UNICODE_STRING FullDllName; + UNICODE_STRING BaseDllName; + ULONG Flags; + USHORT LoadCount; + USHORT TlsIndex; + union { + LIST_ENTRY HashLinks; + struct { + PVOID SectionPointer; + ULONG CheckSum; + }; + }; + ULONG TimeDateStamp; +} LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY; + +#define DLL_PROCESS_ATTACH 1 // winnt +#define DLL_THREAD_ATTACH 2 // winnt +#define DLL_THREAD_DETACH 3 // winnt +#define DLL_PROCESS_DETACH 0 // winnt + +typedef +BOOLEAN +(*PDLL_INIT_ROUTINE) ( + IN PVOID DllHandle, + IN ULONG Reason, + IN PCONTEXT Context OPTIONAL + ); + +typedef +BOOLEAN +(*PPROCESS_STARTER_ROUTINE) ( + IN PVOID RealStartAddress + ); + +VOID +LdrProcessStarterHelper( + IN PPROCESS_STARTER_ROUTINE ProcessStarter, + IN PVOID RealStartAddress + ); + +VOID +NTAPI +LdrShutdownProcess( + VOID + ); + +VOID +NTAPI +LdrShutdownThread( + VOID + ); + +NTSTATUS +NTAPI +LdrLoadDll( + IN PWSTR DllPath OPTIONAL, + IN PULONG DllCharacteristics OPTIONAL, + IN PUNICODE_STRING DllName, + OUT PVOID *DllHandle + ); + +NTSTATUS +NTAPI +LdrGetDllHandle( + IN PWSTR DllPath OPTIONAL, + IN PULONG DllCharacteristics OPTIONAL, + IN PUNICODE_STRING DllName, + OUT PVOID *DllHandle + ); + +NTSTATUS +NTAPI +LdrUnloadDll( + IN PVOID DllHandle + ); + +ULONG +NTAPI +LdrRelocateImage ( + IN PVOID NewBase, + IN PUCHAR LoaderName, + IN ULONG Success, + IN ULONG Conflict, + IN ULONG Invalid + ); + +PIMAGE_BASE_RELOCATION +NTAPI +LdrProcessRelocationBlock( + IN ULONG VA, + IN ULONG SizeOfBlock, + IN PUSHORT NextOffset, + IN LONG Diff + ); + +BOOLEAN +NTAPI +LdrVerifyMappedImageMatchesChecksum ( + IN PVOID BaseAddress, + IN ULONG FileLength + ); + +typedef +VOID +(*PLDR_IMPORT_MODULE_CALLBACK)( + IN PVOID Parameter, + PCHAR ModuleName + ); + +NTSTATUS +NTAPI +LdrVerifyImageMatchesChecksum ( + IN HANDLE ImageFileHandle, + IN PLDR_IMPORT_MODULE_CALLBACK ImportCallbackRoutine OPTIONAL, + IN PVOID ImportCallbackParameter, + OUT PUSHORT ImageCharacteristics OPTIONAL + ); + +NTSTATUS +NTAPI +LdrGetProcedureAddress( + IN PVOID DllHandle, + IN PANSI_STRING ProcedureName OPTIONAL, + IN ULONG ProcedureNumber OPTIONAL, + OUT PVOID *ProcedureAddress + ); + +#define LDR_RESOURCE_ID_NAME_MASK 0xFFFF0000 + +NTSTATUS +NTAPI +LdrFindResourceDirectory_U( + IN PVOID DllHandle, + IN PULONG ResourceIdPath, + IN ULONG ResourceIdPathLength, + OUT PIMAGE_RESOURCE_DIRECTORY *ResourceDirectory + ); + +NTSTATUS +NTAPI +LdrFindResource_U( + IN PVOID DllHandle, + IN PULONG ResourceIdPath, + IN ULONG ResourceIdPathLength, + OUT PIMAGE_RESOURCE_DATA_ENTRY *ResourceDataEntry + ); + +#define LDR_MAXIMUM_RESOURCE_PATH_DEPTH 3 + +typedef struct _LDR_ENUM_RESOURCE_ENTRY { + union { + ULONG NameOrId; + PIMAGE_RESOURCE_DIRECTORY_STRING Name; + struct { + USHORT Id; + USHORT NameIsPresent; + }; + } Path[ LDR_MAXIMUM_RESOURCE_PATH_DEPTH ]; + PVOID Data; + ULONG Size; + ULONG Reserved; +} LDR_ENUM_RESOURCE_ENTRY, *PLDR_ENUM_RESOURCE_ENTRY; + +NTSTATUS +NTAPI +LdrEnumResources( + IN PVOID DllHandle, + IN PULONG ResourceIdPath, + IN ULONG ResourceIdPathLength, + IN OUT PULONG NumberOfResources, + OUT PLDR_ENUM_RESOURCE_ENTRY Resources OPTIONAL + ); + +NTSTATUS +NTAPI +LdrAccessResource( + IN PVOID DllHandle, + IN PIMAGE_RESOURCE_DATA_ENTRY ResourceDataEntry, + OUT PVOID *Address OPTIONAL, + OUT PULONG Size OPTIONAL + ); + + +NTSTATUS +NTAPI +LdrFindEntryForAddress( + IN PVOID Address, + OUT PLDR_DATA_TABLE_ENTRY *TableEntry + ); + + +NTSTATUS +NTAPI +LdrDisableThreadCalloutsForDll ( + IN PVOID DllHandle + ); + + +typedef struct _RTL_PROCESS_MODULE_INFORMATION { + HANDLE Section; // Not filled in + PVOID MappedBase; + PVOID ImageBase; + ULONG ImageSize; + ULONG Flags; + USHORT LoadOrderIndex; + USHORT InitOrderIndex; + USHORT LoadCount; + USHORT OffsetToFileName; + UCHAR FullPathName[ 256 ]; +} RTL_PROCESS_MODULE_INFORMATION, *PRTL_PROCESS_MODULE_INFORMATION; + +typedef struct _RTL_PROCESS_MODULES { + ULONG NumberOfModules; + RTL_PROCESS_MODULE_INFORMATION Modules[ 1 ]; +} RTL_PROCESS_MODULES, *PRTL_PROCESS_MODULES; + +NTSTATUS +NTAPI +LdrQueryProcessModuleInformation( + OUT PRTL_PROCESS_MODULES ModuleInformation, + IN ULONG ModuleInformationLength, + OUT PULONG ReturnLength OPTIONAL + ); + +NTSTATUS +NTAPI +LdrQueryImageFileExecutionOptions( + IN PUNICODE_STRING ImagePathName, + IN PWSTR OptionName, + IN ULONG Type, + OUT PVOID Buffer, + IN ULONG BufferSize, + OUT PULONG ResultSize OPTIONAL + ); + +#endif // _NTLDR_ |