mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 06:02:59 +00:00
[NTDLL:LDR] Little fixes about SAL annotation and behavior (#5793)
- Uniform function declarations in .c and .h with fixes and SAL2 improvements. - Use LDR_[UN]LOCK_LOADER_LOCK_FLAG_XXX correctly. - Fix incorrect UsedSize calculation in LdrQueryProcessModuleInformationEx (caught by ThFabba). - Whatever the callback request stop the enumeration or not in LdrEnumerateLoadedModules, the following operations should be the same. - Fix 2 incorrect DPRINT1 that printed incorrect parameter. - Return error if RtlAllocateHeap failed in LdrpGetProcedureAddress, and add comments about NT6.2 new changes.
This commit is contained in:
parent
bd9e2d6beb
commit
bd0a5498b0
9 changed files with 120 additions and 103 deletions
|
@ -309,10 +309,11 @@ LdrLockLoaderLock(
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
DECLSPEC_HOTPATCH
|
DECLSPEC_HOTPATCH
|
||||||
LdrLoadDll(IN PWSTR SearchPath OPTIONAL,
|
LdrLoadDll(
|
||||||
IN PULONG DllCharacteristics OPTIONAL,
|
_In_opt_ PWSTR SearchPath,
|
||||||
IN PUNICODE_STRING DllName,
|
_In_opt_ PULONG DllCharacteristics,
|
||||||
OUT PVOID *BaseAddress)
|
_In_ PUNICODE_STRING DllName,
|
||||||
|
_Out_ PVOID *BaseAddress)
|
||||||
{
|
{
|
||||||
WCHAR StringBuffer[MAX_PATH];
|
WCHAR StringBuffer[MAX_PATH];
|
||||||
UNICODE_STRING DllString1, DllString2;
|
UNICODE_STRING DllString1, DllString2;
|
||||||
|
@ -426,7 +427,7 @@ LdrLoadDll(IN PWSTR SearchPath OPTIONAL,
|
||||||
LdrpTopLevelDllBeingLoaded = OldTldDll;
|
LdrpTopLevelDllBeingLoaded = OldTldDll;
|
||||||
|
|
||||||
/* Release the lock */
|
/* Release the lock */
|
||||||
LdrUnlockLoaderLock(LDR_LOCK_LOADER_LOCK_FLAG_RAISE_ON_ERRORS, Cookie);
|
LdrUnlockLoaderLock(LDR_UNLOCK_LOADER_LOCK_FLAG_RAISE_ON_ERRORS, Cookie);
|
||||||
}
|
}
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
|
|
||||||
|
@ -793,7 +794,7 @@ Quickie:
|
||||||
/* Release lock */
|
/* Release lock */
|
||||||
if (Locked)
|
if (Locked)
|
||||||
{
|
{
|
||||||
LdrUnlockLoaderLock(LDR_LOCK_LOADER_LOCK_FLAG_RAISE_ON_ERRORS,
|
LdrUnlockLoaderLock(LDR_UNLOCK_LOADER_LOCK_FLAG_RAISE_ON_ERRORS,
|
||||||
Cookie);
|
Cookie);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -840,10 +841,11 @@ LdrGetProcedureAddress(
|
||||||
*/
|
*/
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrVerifyImageMatchesChecksum(IN HANDLE FileHandle,
|
LdrVerifyImageMatchesChecksum(
|
||||||
IN PLDR_CALLBACK Callback,
|
_In_ HANDLE FileHandle,
|
||||||
IN PVOID CallbackContext,
|
_In_ PLDR_CALLBACK Callback,
|
||||||
OUT PUSHORT ImageCharacteristics)
|
_In_ PVOID CallbackContext,
|
||||||
|
_Out_ PUSHORT ImageCharacteristics)
|
||||||
{
|
{
|
||||||
FILE_STANDARD_INFORMATION FileStandardInfo;
|
FILE_STANDARD_INFORMATION FileStandardInfo;
|
||||||
PIMAGE_IMPORT_DESCRIPTOR ImportData;
|
PIMAGE_IMPORT_DESCRIPTOR ImportData;
|
||||||
|
@ -982,18 +984,19 @@ LdrVerifyImageMatchesChecksum(IN HANDLE FileHandle,
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrQueryProcessModuleInformationEx(IN ULONG ProcessId,
|
LdrQueryProcessModuleInformationEx(
|
||||||
IN ULONG Reserved,
|
_In_opt_ ULONG ProcessId,
|
||||||
OUT PRTL_PROCESS_MODULES ModuleInformation,
|
_Reserved_ ULONG Reserved,
|
||||||
IN ULONG Size,
|
_Out_writes_bytes_to_(Size, *ReturnedSize) PRTL_PROCESS_MODULES ModuleInformation,
|
||||||
OUT PULONG ReturnedSize OPTIONAL)
|
_In_ ULONG Size,
|
||||||
|
_Out_opt_ PULONG ReturnedSize)
|
||||||
{
|
{
|
||||||
PLIST_ENTRY ModuleListHead, InitListHead;
|
PLIST_ENTRY ModuleListHead, InitListHead;
|
||||||
PLIST_ENTRY Entry, InitEntry;
|
PLIST_ENTRY Entry, InitEntry;
|
||||||
PLDR_DATA_TABLE_ENTRY Module, InitModule;
|
PLDR_DATA_TABLE_ENTRY Module, InitModule;
|
||||||
PRTL_PROCESS_MODULE_INFORMATION ModulePtr = NULL;
|
PRTL_PROCESS_MODULE_INFORMATION ModulePtr = NULL;
|
||||||
NTSTATUS Status = STATUS_SUCCESS;
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
ULONG UsedSize = sizeof(ULONG);
|
ULONG UsedSize = FIELD_OFFSET(RTL_PROCESS_MODULES, Modules);
|
||||||
ANSI_STRING AnsiString;
|
ANSI_STRING AnsiString;
|
||||||
PCHAR p;
|
PCHAR p;
|
||||||
|
|
||||||
|
@ -1110,9 +1113,10 @@ LdrQueryProcessModuleInformationEx(IN ULONG ProcessId,
|
||||||
*/
|
*/
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrQueryProcessModuleInformation(IN PRTL_PROCESS_MODULES ModuleInformation,
|
LdrQueryProcessModuleInformation(
|
||||||
IN ULONG Size,
|
_Out_writes_bytes_to_(Size, *ReturnedSize) PRTL_PROCESS_MODULES ModuleInformation,
|
||||||
OUT PULONG ReturnedSize OPTIONAL)
|
_In_ ULONG Size,
|
||||||
|
_Out_opt_ PULONG ReturnedSize)
|
||||||
{
|
{
|
||||||
/* Call Ex version of the API */
|
/* Call Ex version of the API */
|
||||||
return LdrQueryProcessModuleInformationEx(0, 0, ModuleInformation, Size, ReturnedSize);
|
return LdrQueryProcessModuleInformationEx(0, 0, ModuleInformation, Size, ReturnedSize);
|
||||||
|
@ -1123,9 +1127,10 @@ LdrQueryProcessModuleInformation(IN PRTL_PROCESS_MODULES ModuleInformation,
|
||||||
*/
|
*/
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrEnumerateLoadedModules(IN BOOLEAN ReservedFlag,
|
LdrEnumerateLoadedModules(
|
||||||
IN PLDR_ENUM_CALLBACK EnumProc,
|
_Reserved_ ULONG ReservedFlag,
|
||||||
IN PVOID Context)
|
_In_ PLDR_ENUM_CALLBACK EnumProc,
|
||||||
|
_In_opt_ PVOID Context)
|
||||||
{
|
{
|
||||||
PLIST_ENTRY ListHead, ListEntry;
|
PLIST_ENTRY ListHead, ListEntry;
|
||||||
PLDR_DATA_TABLE_ENTRY LdrEntry;
|
PLDR_DATA_TABLE_ENTRY LdrEntry;
|
||||||
|
@ -1161,28 +1166,24 @@ LdrEnumerateLoadedModules(IN BOOLEAN ReservedFlag,
|
||||||
/* Break if we were asked to stop enumeration */
|
/* Break if we were asked to stop enumeration */
|
||||||
if (Stop)
|
if (Stop)
|
||||||
{
|
{
|
||||||
/* Release loader lock */
|
break;
|
||||||
Status = LdrUnlockLoaderLock(0, Cookie);
|
|
||||||
|
|
||||||
/* Reset any successful status to STATUS_SUCCESS, but leave
|
|
||||||
failure to the caller */
|
|
||||||
if (NT_SUCCESS(Status))
|
|
||||||
Status = STATUS_SUCCESS;
|
|
||||||
|
|
||||||
/* Return any possible failure status */
|
|
||||||
return Status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Advance to the next module */
|
/* Advance to the next module */
|
||||||
ListEntry = ListEntry->Flink;
|
ListEntry = ListEntry->Flink;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Release loader lock, it must succeed this time */
|
/* Release loader lock */
|
||||||
Status = LdrUnlockLoaderLock(0, Cookie);
|
Status = LdrUnlockLoaderLock(0, Cookie);
|
||||||
ASSERT(NT_SUCCESS(Status));
|
ASSERT(NT_SUCCESS(Status));
|
||||||
|
|
||||||
/* Return success */
|
/* Reset any successful status to STATUS_SUCCESS,
|
||||||
return STATUS_SUCCESS;
|
* but leave failure to the caller */
|
||||||
|
if (NT_SUCCESS(Status))
|
||||||
|
Status = STATUS_SUCCESS;
|
||||||
|
|
||||||
|
/* Return any possible failure status */
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1190,7 +1191,8 @@ LdrEnumerateLoadedModules(IN BOOLEAN ReservedFlag,
|
||||||
*/
|
*/
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrDisableThreadCalloutsForDll(IN PVOID BaseAddress)
|
LdrDisableThreadCalloutsForDll(
|
||||||
|
_In_ PVOID BaseAddress)
|
||||||
{
|
{
|
||||||
PLDR_DATA_TABLE_ENTRY LdrEntry;
|
PLDR_DATA_TABLE_ENTRY LdrEntry;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
@ -1240,8 +1242,9 @@ LdrDisableThreadCalloutsForDll(IN PVOID BaseAddress)
|
||||||
*/
|
*/
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrAddRefDll(IN ULONG Flags,
|
LdrAddRefDll(
|
||||||
IN PVOID BaseAddress)
|
_In_ ULONG Flags,
|
||||||
|
_In_ PVOID BaseAddress)
|
||||||
{
|
{
|
||||||
PLDR_DATA_TABLE_ENTRY LdrEntry;
|
PLDR_DATA_TABLE_ENTRY LdrEntry;
|
||||||
NTSTATUS Status = STATUS_SUCCESS;
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
|
@ -1316,7 +1319,7 @@ quickie:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Release the lock if needed */
|
/* Release the lock if needed */
|
||||||
if (Locked) LdrUnlockLoaderLock(LDR_LOCK_LOADER_LOCK_FLAG_RAISE_ON_ERRORS, Cookie);
|
if (Locked) LdrUnlockLoaderLock(LDR_UNLOCK_LOADER_LOCK_FLAG_RAISE_ON_ERRORS, Cookie);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1325,7 +1328,8 @@ quickie:
|
||||||
*/
|
*/
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrUnloadDll(IN PVOID BaseAddress)
|
LdrUnloadDll(
|
||||||
|
_In_ PVOID BaseAddress)
|
||||||
{
|
{
|
||||||
NTSTATUS Status = STATUS_SUCCESS;
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
PPEB Peb = NtCurrentPeb();
|
PPEB Peb = NtCurrentPeb();
|
||||||
|
@ -1601,10 +1605,11 @@ RtlDllShutdownInProgress(VOID)
|
||||||
*/
|
*/
|
||||||
PIMAGE_BASE_RELOCATION
|
PIMAGE_BASE_RELOCATION
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrProcessRelocationBlock(IN ULONG_PTR Address,
|
LdrProcessRelocationBlock(
|
||||||
IN ULONG Count,
|
_In_ ULONG_PTR Address,
|
||||||
IN PUSHORT TypeOffset,
|
_In_ ULONG Count,
|
||||||
IN LONG_PTR Delta)
|
_In_ PUSHORT TypeOffset,
|
||||||
|
_In_ LONG_PTR Delta)
|
||||||
{
|
{
|
||||||
return LdrProcessRelocationBlockLongLong(Address, Count, TypeOffset, Delta);
|
return LdrProcessRelocationBlockLongLong(Address, Count, TypeOffset, Delta);
|
||||||
}
|
}
|
||||||
|
@ -1617,8 +1622,9 @@ LdrProcessRelocationBlock(IN ULONG_PTR Address,
|
||||||
*/
|
*/
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrLoadAlternateResourceModule(IN PVOID Module,
|
LdrLoadAlternateResourceModule(
|
||||||
IN PWSTR Buffer)
|
_In_ PVOID Module,
|
||||||
|
_In_ PWSTR Buffer)
|
||||||
{
|
{
|
||||||
/* Is MUI Support enabled? */
|
/* Is MUI Support enabled? */
|
||||||
if (!LdrAlternateResourcesEnabled()) return STATUS_SUCCESS;
|
if (!LdrAlternateResourcesEnabled()) return STATUS_SUCCESS;
|
||||||
|
@ -1632,7 +1638,8 @@ LdrLoadAlternateResourceModule(IN PVOID Module,
|
||||||
*/
|
*/
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrUnloadAlternateResourceModule(IN PVOID BaseAddress)
|
LdrUnloadAlternateResourceModule(
|
||||||
|
_In_ PVOID BaseAddress)
|
||||||
{
|
{
|
||||||
ULONG_PTR Cookie;
|
ULONG_PTR Cookie;
|
||||||
|
|
||||||
|
@ -1646,7 +1653,7 @@ LdrUnloadAlternateResourceModule(IN PVOID BaseAddress)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Release the loader lock */
|
/* Release the loader lock */
|
||||||
LdrUnlockLoaderLock(1, Cookie);
|
LdrUnlockLoaderLock(LDR_UNLOCK_LOADER_LOCK_FLAG_RAISE_ON_ERRORS, Cookie);
|
||||||
|
|
||||||
/* All done */
|
/* All done */
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
|
@ -109,9 +109,10 @@ extern BOOLEAN RtlpUse16ByteSLists;
|
||||||
*/
|
*/
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrOpenImageFileOptionsKey(IN PUNICODE_STRING SubKey,
|
LdrOpenImageFileOptionsKey(
|
||||||
IN BOOLEAN Wow64,
|
_In_ PUNICODE_STRING SubKey,
|
||||||
OUT PHANDLE NewKeyHandle)
|
_In_ BOOLEAN Wow64,
|
||||||
|
_Out_ PHANDLE NewKeyHandle)
|
||||||
{
|
{
|
||||||
PHANDLE RootKeyLocation;
|
PHANDLE RootKeyLocation;
|
||||||
HANDLE RootKey;
|
HANDLE RootKey;
|
||||||
|
@ -181,12 +182,13 @@ LdrOpenImageFileOptionsKey(IN PUNICODE_STRING SubKey,
|
||||||
*/
|
*/
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrQueryImageFileKeyOption(IN HANDLE KeyHandle,
|
LdrQueryImageFileKeyOption(
|
||||||
IN PCWSTR ValueName,
|
_In_ HANDLE KeyHandle,
|
||||||
IN ULONG Type,
|
_In_ PCWSTR ValueName,
|
||||||
OUT PVOID Buffer,
|
_In_ ULONG Type,
|
||||||
IN ULONG BufferSize,
|
_Out_ PVOID Buffer,
|
||||||
OUT PULONG ReturnedLength OPTIONAL)
|
_In_ ULONG BufferSize,
|
||||||
|
_Out_opt_ PULONG ReturnedLength)
|
||||||
{
|
{
|
||||||
ULONG KeyInfo[256];
|
ULONG KeyInfo[256];
|
||||||
UNICODE_STRING ValueNameString, IntegerString;
|
UNICODE_STRING ValueNameString, IntegerString;
|
||||||
|
@ -345,13 +347,14 @@ LdrQueryImageFileKeyOption(IN HANDLE KeyHandle,
|
||||||
*/
|
*/
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrQueryImageFileExecutionOptionsEx(IN PUNICODE_STRING SubKey,
|
LdrQueryImageFileExecutionOptionsEx(
|
||||||
IN PCWSTR ValueName,
|
_In_ PUNICODE_STRING SubKey,
|
||||||
IN ULONG Type,
|
_In_ PCWSTR ValueName,
|
||||||
OUT PVOID Buffer,
|
_In_ ULONG Type,
|
||||||
IN ULONG BufferSize,
|
_Out_ PVOID Buffer,
|
||||||
OUT PULONG ReturnedLength OPTIONAL,
|
_In_ ULONG BufferSize,
|
||||||
IN BOOLEAN Wow64)
|
_Out_opt_ PULONG ReturnedLength,
|
||||||
|
_In_ BOOLEAN Wow64)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
HANDLE KeyHandle;
|
HANDLE KeyHandle;
|
||||||
|
@ -383,12 +386,13 @@ LdrQueryImageFileExecutionOptionsEx(IN PUNICODE_STRING SubKey,
|
||||||
*/
|
*/
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrQueryImageFileExecutionOptions(IN PUNICODE_STRING SubKey,
|
LdrQueryImageFileExecutionOptions(
|
||||||
IN PCWSTR ValueName,
|
_In_ PUNICODE_STRING SubKey,
|
||||||
IN ULONG Type,
|
_In_ PCWSTR ValueName,
|
||||||
OUT PVOID Buffer,
|
_In_ ULONG Type,
|
||||||
IN ULONG BufferSize,
|
_Out_ PVOID Buffer,
|
||||||
OUT PULONG ReturnedLength OPTIONAL)
|
_In_ ULONG BufferSize,
|
||||||
|
_Out_opt_ PULONG ReturnedLength)
|
||||||
{
|
{
|
||||||
/* Call the newer function */
|
/* Call the newer function */
|
||||||
return LdrQueryImageFileExecutionOptionsEx(SubKey,
|
return LdrQueryImageFileExecutionOptionsEx(SubKey,
|
||||||
|
@ -1879,7 +1883,7 @@ LdrpInitializeProcess(IN PCONTEXT Context,
|
||||||
HeapParameters.Length = sizeof(HeapParameters);
|
HeapParameters.Length = sizeof(HeapParameters);
|
||||||
|
|
||||||
/* Check if we have Configuration Data */
|
/* Check if we have Configuration Data */
|
||||||
#define VALID_CONFIG_FIELD(Name) (ConfigSize >= (FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, Name) + sizeof(LoadConfig->Name)))
|
#define VALID_CONFIG_FIELD(Name) (ConfigSize >= RTL_SIZEOF_THROUGH_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, Name))
|
||||||
/* The 'original' load config ends after SecurityCookie */
|
/* The 'original' load config ends after SecurityCookie */
|
||||||
if ((LoadConfig) && ConfigSize && (VALID_CONFIG_FIELD(SecurityCookie) || ConfigSize == LoadConfig->Size))
|
if ((LoadConfig) && ConfigSize && (VALID_CONFIG_FIELD(SecurityCookie) || ConfigSize == LoadConfig->Size))
|
||||||
{
|
{
|
||||||
|
@ -2327,7 +2331,7 @@ LdrpInitializeProcess(IN PCONTEXT Context,
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
if (ShowSnaps)
|
if (ShowSnaps)
|
||||||
DPRINT1("LDR: Unable to find post-import process init function, Status=0x%08lx\n", &Kernel32String, Status);
|
DPRINT1("LDR: Unable to find post-import process init function, Status=0x%08lx\n", Status);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
Kernel32ProcessInitPostImportFunction = FunctionAddress;
|
Kernel32ProcessInitPostImportFunction = FunctionAddress;
|
||||||
|
@ -2340,7 +2344,7 @@ LdrpInitializeProcess(IN PCONTEXT Context,
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
if (ShowSnaps)
|
if (ShowSnaps)
|
||||||
DPRINT1("LDR: Unable to find BaseQueryModuleData, Status=0x%08lx\n", &Kernel32String, Status);
|
DPRINT1("LDR: Unable to find BaseQueryModuleData, Status=0x%08lx\n", Status);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
Kernel32BaseQueryModuleData = FunctionAddress;
|
Kernel32BaseQueryModuleData = FunctionAddress;
|
||||||
|
|
|
@ -2257,7 +2257,7 @@ LdrpGetProcedureAddress(
|
||||||
_In_ BOOLEAN ExecuteInit)
|
_In_ BOOLEAN ExecuteInit)
|
||||||
{
|
{
|
||||||
NTSTATUS Status = STATUS_SUCCESS;
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
UCHAR ImportBuffer[64];
|
UCHAR ImportBuffer[64]; // 128 since NT6.2
|
||||||
PLDR_DATA_TABLE_ENTRY LdrEntry;
|
PLDR_DATA_TABLE_ENTRY LdrEntry;
|
||||||
IMAGE_THUNK_DATA Thunk;
|
IMAGE_THUNK_DATA Thunk;
|
||||||
PVOID ImageBase;
|
PVOID ImageBase;
|
||||||
|
@ -2292,6 +2292,11 @@ LdrpGetProcedureAddress(
|
||||||
ImportName = RtlAllocateHeap(RtlGetProcessHeap(),
|
ImportName = RtlAllocateHeap(RtlGetProcessHeap(),
|
||||||
0,
|
0,
|
||||||
Length);
|
Length);
|
||||||
|
if (!ImportName)
|
||||||
|
{
|
||||||
|
/* Return STATUS_INSUFFICIENT_RESOURCES since NT6.2 */
|
||||||
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -657,7 +657,7 @@ GetModuleFileNameW(HINSTANCE hModule,
|
||||||
} _SEH2_END
|
} _SEH2_END
|
||||||
|
|
||||||
/* Release the loader lock */
|
/* Release the loader lock */
|
||||||
LdrUnlockLoaderLock(LDR_LOCK_LOADER_LOCK_FLAG_RAISE_ON_ERRORS, Cookie);
|
LdrUnlockLoaderLock(LDR_UNLOCK_LOADER_LOCK_FLAG_RAISE_ON_ERRORS, Cookie);
|
||||||
|
|
||||||
return Length / sizeof(WCHAR);
|
return Length / sizeof(WCHAR);
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,8 +97,8 @@ LdrGetProcedureAddress(
|
||||||
ULONG
|
ULONG
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrRelocateImage(
|
LdrRelocateImage(
|
||||||
_In_ PVOID NewBase,
|
_In_ PVOID BaseAddress,
|
||||||
_In_ PCCH LoaderName,
|
_In_opt_ PCSTR LoaderName,
|
||||||
_In_ ULONG Success,
|
_In_ ULONG Success,
|
||||||
_In_ ULONG Conflict,
|
_In_ ULONG Conflict,
|
||||||
_In_ ULONG Invalid
|
_In_ ULONG Invalid
|
||||||
|
@ -139,9 +139,9 @@ LdrProcessRelocationBlockLongLong(
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrEnumerateLoadedModules(
|
LdrEnumerateLoadedModules(
|
||||||
_In_ BOOLEAN ReservedFlag,
|
_Reserved_ ULONG ReservedFlag,
|
||||||
_In_ PLDR_ENUM_CALLBACK EnumProc,
|
_In_ PLDR_ENUM_CALLBACK EnumProc,
|
||||||
_In_ PVOID Context
|
_In_opt_ PVOID Context
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -238,7 +238,7 @@ typedef struct _ALT_RESOURCE_MODULE
|
||||||
//
|
//
|
||||||
// Callback function for LdrEnumerateLoadedModules
|
// Callback function for LdrEnumerateLoadedModules
|
||||||
//
|
//
|
||||||
typedef VOID (NTAPI LDR_ENUM_CALLBACK)(_In_ PLDR_DATA_TABLE_ENTRY ModuleInformation, _In_ PVOID Parameter, _Out_ BOOLEAN *Stop);
|
typedef VOID (NTAPI LDR_ENUM_CALLBACK)(_In_ PLDR_DATA_TABLE_ENTRY ModuleInformation, _In_opt_ PVOID Context, _Out_ BOOLEAN *Stop);
|
||||||
typedef LDR_ENUM_CALLBACK *PLDR_ENUM_CALLBACK;
|
typedef LDR_ENUM_CALLBACK *PLDR_ENUM_CALLBACK;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -3975,13 +3975,12 @@ RtlImageRvaToSection(
|
||||||
_In_ ULONG Rva
|
_In_ ULONG Rva
|
||||||
);
|
);
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
ULONG
|
ULONG
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrRelocateImageWithBias(
|
LdrRelocateImageWithBias(
|
||||||
_In_ PVOID NewAddress,
|
_In_ PVOID BaseAddress,
|
||||||
_In_ LONGLONG AdditionalBias,
|
_In_ LONGLONG AdditionalBias,
|
||||||
_In_ PCCH LoaderName,
|
_In_opt_ PCSTR LoaderName,
|
||||||
_In_ ULONG Success,
|
_In_ ULONG Success,
|
||||||
_In_ ULONG Conflict,
|
_In_ ULONG Conflict,
|
||||||
_In_ ULONG Invalid
|
_In_ ULONG Invalid
|
||||||
|
|
|
@ -158,9 +158,9 @@ NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrLoadDll(
|
LdrLoadDll(
|
||||||
_In_opt_ PWSTR SearchPath,
|
_In_opt_ PWSTR SearchPath,
|
||||||
_In_opt_ PULONG LoadFlags,
|
_In_opt_ PULONG DllCharacteristics,
|
||||||
_In_ PUNICODE_STRING Name,
|
_In_ PUNICODE_STRING DllName,
|
||||||
_Out_opt_ PVOID *BaseAddress
|
_Out_ PVOID *BaseAddress
|
||||||
);
|
);
|
||||||
|
|
||||||
PIMAGE_BASE_RELOCATION
|
PIMAGE_BASE_RELOCATION
|
||||||
|
@ -177,18 +177,18 @@ NTAPI
|
||||||
LdrQueryImageFileExecutionOptions(
|
LdrQueryImageFileExecutionOptions(
|
||||||
_In_ PUNICODE_STRING SubKey,
|
_In_ PUNICODE_STRING SubKey,
|
||||||
_In_ PCWSTR ValueName,
|
_In_ PCWSTR ValueName,
|
||||||
_In_ ULONG ValueSize,
|
_In_ ULONG Type,
|
||||||
_Out_ PVOID Buffer,
|
_Out_ PVOID Buffer,
|
||||||
_In_ ULONG BufferSize,
|
_In_ ULONG BufferSize,
|
||||||
_Out_opt_ PULONG RetunedLength
|
_Out_opt_ PULONG ReturnedLength
|
||||||
);
|
);
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrQueryProcessModuleInformation(
|
LdrQueryProcessModuleInformation(
|
||||||
_In_opt_ PRTL_PROCESS_MODULES ModuleInformation,
|
_Out_writes_bytes_to_(Size, *ReturnedSize) PRTL_PROCESS_MODULES ModuleInformation,
|
||||||
_In_opt_ ULONG Size,
|
_In_ ULONG Size,
|
||||||
_Out_ PULONG ReturnedSize
|
_Out_opt_ PULONG ReturnedSize
|
||||||
);
|
);
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
|
@ -221,7 +221,7 @@ LdrVerifyImageMatchesChecksum(
|
||||||
_In_ HANDLE FileHandle,
|
_In_ HANDLE FileHandle,
|
||||||
_In_ PLDR_CALLBACK Callback,
|
_In_ PLDR_CALLBACK Callback,
|
||||||
_In_ PVOID CallbackContext,
|
_In_ PVOID CallbackContext,
|
||||||
_Out_ PUSHORT ImageCharacterstics
|
_Out_ PUSHORT ImageCharacteristics
|
||||||
);
|
);
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
|
|
@ -460,11 +460,11 @@ LdrProcessRelocationBlockLongLong(
|
||||||
ULONG
|
ULONG
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrRelocateImage(
|
LdrRelocateImage(
|
||||||
IN PVOID BaseAddress,
|
_In_ PVOID BaseAddress,
|
||||||
IN PCCH LoaderName,
|
_In_opt_ PCSTR LoaderName,
|
||||||
IN ULONG Success,
|
_In_ ULONG Success,
|
||||||
IN ULONG Conflict,
|
_In_ ULONG Conflict,
|
||||||
IN ULONG Invalid)
|
_In_ ULONG Invalid)
|
||||||
{
|
{
|
||||||
return LdrRelocateImageWithBias(BaseAddress, 0, LoaderName, Success, Conflict, Invalid);
|
return LdrRelocateImageWithBias(BaseAddress, 0, LoaderName, Success, Conflict, Invalid);
|
||||||
}
|
}
|
||||||
|
@ -472,12 +472,12 @@ LdrRelocateImage(
|
||||||
ULONG
|
ULONG
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrRelocateImageWithBias(
|
LdrRelocateImageWithBias(
|
||||||
IN PVOID BaseAddress,
|
_In_ PVOID BaseAddress,
|
||||||
IN LONGLONG AdditionalBias,
|
_In_ LONGLONG AdditionalBias,
|
||||||
IN PCCH LoaderName,
|
_In_opt_ PCSTR LoaderName,
|
||||||
IN ULONG Success,
|
_In_ ULONG Success,
|
||||||
IN ULONG Conflict,
|
_In_ ULONG Conflict,
|
||||||
IN ULONG Invalid)
|
_In_ ULONG Invalid)
|
||||||
{
|
{
|
||||||
PIMAGE_NT_HEADERS NtHeaders;
|
PIMAGE_NT_HEADERS NtHeaders;
|
||||||
PIMAGE_DATA_DIRECTORY RelocationDDir;
|
PIMAGE_DATA_DIRECTORY RelocationDDir;
|
||||||
|
@ -487,6 +487,8 @@ LdrRelocateImageWithBias(
|
||||||
PUSHORT TypeOffset;
|
PUSHORT TypeOffset;
|
||||||
LONGLONG Delta;
|
LONGLONG Delta;
|
||||||
|
|
||||||
|
UNREFERENCED_PARAMETER(LoaderName);
|
||||||
|
|
||||||
NtHeaders = RtlImageNtHeader(BaseAddress);
|
NtHeaders = RtlImageNtHeader(BaseAddress);
|
||||||
|
|
||||||
if (NtHeaders == NULL)
|
if (NtHeaders == NULL)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue