mirror of
https://github.com/bb107/MemoryModulePP
synced 2026-06-08 13:15:33 +00:00
Removed some redundant definitions
This commit is contained in:
@@ -1,27 +1,5 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
HMEMORYMODULE WINAPI LoadLibraryMemory(_In_ PVOID BufferAddress) {
|
||||
HMEMORYMODULE hMemoryModule = nullptr;
|
||||
NTSTATUS status = LdrLoadDllMemory(&hMemoryModule, BufferAddress, 0);
|
||||
if (!NT_SUCCESS(status) || status == STATUS_IMAGE_MACHINE_TYPE_MISMATCH) {
|
||||
SetLastError(RtlNtStatusToDosError(status));
|
||||
}
|
||||
return hMemoryModule;
|
||||
}
|
||||
|
||||
HMEMORYMODULE WINAPI LoadLibraryMemoryExA(
|
||||
_In_ PVOID BufferAddress,
|
||||
_In_ size_t Reserved,
|
||||
_In_opt_ LPCSTR DllBaseName,
|
||||
_In_opt_ LPCSTR DllFullName,
|
||||
_In_ DWORD Flags) {
|
||||
HMEMORYMODULE hMemoryModule = nullptr;
|
||||
NTSTATUS status = LdrLoadDllMemoryExA(&hMemoryModule, nullptr, Flags, BufferAddress, Reserved, DllBaseName, DllFullName);
|
||||
if (!NT_SUCCESS(status) || status == STATUS_IMAGE_MACHINE_TYPE_MISMATCH) {
|
||||
SetLastError(RtlNtStatusToDosError(status));
|
||||
}
|
||||
return hMemoryModule;
|
||||
}
|
||||
#include <cstdlib>
|
||||
|
||||
HMEMORYMODULE WINAPI LoadLibraryMemoryExW(
|
||||
_In_ PVOID BufferAddress,
|
||||
@@ -37,6 +15,54 @@ HMEMORYMODULE WINAPI LoadLibraryMemoryExW(
|
||||
return hMemoryModule;
|
||||
}
|
||||
|
||||
HMEMORYMODULE WINAPI LoadLibraryMemoryExA(
|
||||
_In_ PVOID BufferAddress,
|
||||
_In_ size_t Reserved,
|
||||
_In_opt_ LPCSTR DllBaseName,
|
||||
_In_opt_ LPCSTR DllFullName,
|
||||
_In_ DWORD Flags) {
|
||||
LPWSTR _DllName = nullptr, _DllFullName = nullptr;
|
||||
size_t size;
|
||||
HMEMORYMODULE result = nullptr;
|
||||
HANDLE heap = NtCurrentPeb()->ProcessHeap;
|
||||
|
||||
do {
|
||||
if (DllBaseName) {
|
||||
size = strlen(DllBaseName) + 1;
|
||||
_DllName = (LPWSTR)RtlAllocateHeap(heap, 0, sizeof(WCHAR) * size);
|
||||
|
||||
if (!_DllName) {
|
||||
RtlNtStatusToDosError(STATUS_INSUFFICIENT_RESOURCES);
|
||||
break;
|
||||
}
|
||||
|
||||
mbstowcs_s(nullptr, _DllName, size, DllBaseName, size);
|
||||
}
|
||||
|
||||
if (DllFullName) {
|
||||
size = strlen(DllFullName) + 1;
|
||||
_DllFullName = (LPWSTR)RtlAllocateHeap(heap, 0, sizeof(WCHAR) * size);
|
||||
|
||||
if (!_DllFullName) {
|
||||
RtlNtStatusToDosError(STATUS_INSUFFICIENT_RESOURCES);
|
||||
break;
|
||||
}
|
||||
|
||||
mbstowcs_s(nullptr, _DllFullName, size, DllFullName, size);
|
||||
}
|
||||
|
||||
result = LoadLibraryMemoryExW(BufferAddress, 0, _DllName, _DllFullName, 0);
|
||||
} while (false);
|
||||
|
||||
RtlFreeHeap(heap, 0, _DllName);
|
||||
RtlFreeHeap(heap, 0, _DllFullName);
|
||||
return result;
|
||||
}
|
||||
|
||||
HMEMORYMODULE WINAPI LoadLibraryMemory(_In_ PVOID BufferAddress) {
|
||||
return LoadLibraryMemoryExW(BufferAddress, 0, nullptr, nullptr, 0);
|
||||
}
|
||||
|
||||
BOOL WINAPI FreeLibraryMemory(_In_ HMEMORYMODULE hMemoryModule) {
|
||||
NTSTATUS status = LdrUnloadDllMemory(hMemoryModule);
|
||||
if (!NT_SUCCESS(status)) {
|
||||
|
||||
+1
-36
@@ -1,5 +1,4 @@
|
||||
#include "stdafx.h"
|
||||
#include <cstdlib>
|
||||
|
||||
static NTSTATUS NTAPI LdrMapDllMemory(
|
||||
_In_ HMEMORYMODULE ViewBase,
|
||||
@@ -34,13 +33,6 @@ static NTSTATUS NTAPI LdrMapDllMemory(
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
NTSTATUS NTAPI LdrLoadDllMemory(
|
||||
_Out_ HMEMORYMODULE* BaseAddress,
|
||||
_In_ LPVOID BufferAddress,
|
||||
_In_ size_t Reserved) {
|
||||
return LdrLoadDllMemoryExW(BaseAddress, nullptr, 0, BufferAddress, Reserved, nullptr, nullptr);
|
||||
}
|
||||
|
||||
NTSTATUS NTAPI LdrLoadDllMemoryExW(
|
||||
_Out_ HMEMORYMODULE* BaseAddress,
|
||||
_Out_opt_ PVOID* LdrEntry,
|
||||
@@ -198,33 +190,6 @@ NTSTATUS NTAPI LdrLoadDllMemoryExW(
|
||||
return status;
|
||||
}
|
||||
|
||||
NTSTATUS NTAPI LdrLoadDllMemoryExA(
|
||||
_Out_ HMEMORYMODULE* BaseAddress,
|
||||
_Out_opt_ PVOID* LdrEntry,
|
||||
_In_ DWORD dwFlags,
|
||||
_In_ LPVOID BufferAddress,
|
||||
_In_ size_t BufferSize,
|
||||
_In_opt_ LPCSTR DllName,
|
||||
_In_opt_ LPCSTR DllFullName) {
|
||||
LPWSTR _DllName = nullptr, _DllFullName = nullptr;
|
||||
size_t size;
|
||||
NTSTATUS status;
|
||||
if (DllName) {
|
||||
size = strlen(DllName) + 1;
|
||||
_DllName = new wchar_t[size];
|
||||
mbstowcs_s(nullptr, _DllName, size, DllName, size);
|
||||
}
|
||||
if (DllFullName) {
|
||||
size = strlen(DllFullName) + 1;
|
||||
_DllFullName = new wchar_t[size];
|
||||
mbstowcs_s(nullptr, _DllFullName, size, DllFullName, size);
|
||||
}
|
||||
status = LdrLoadDllMemoryExW(BaseAddress, LdrEntry, dwFlags, BufferAddress, BufferSize, _DllName, _DllFullName);
|
||||
delete[]_DllName;
|
||||
delete[]_DllFullName;
|
||||
return status;
|
||||
}
|
||||
|
||||
NTSTATUS NTAPI LdrUnloadDllMemory(_In_ HMEMORYMODULE BaseAddress) {
|
||||
PLDR_DATA_TABLE_ENTRY CurEntry;
|
||||
ULONG count = 0;
|
||||
@@ -291,7 +256,7 @@ NTSTATUS NTAPI LdrUnloadDllMemory(_In_ HMEMORYMODULE BaseAddress) {
|
||||
return status;
|
||||
}
|
||||
|
||||
__declspec(noreturn)
|
||||
DECLSPEC_NORETURN
|
||||
VOID NTAPI LdrUnloadDllMemoryAndExitThread(_In_ HMEMORYMODULE BaseAddress, _In_ DWORD dwExitCode) {
|
||||
LdrUnloadDllMemory(BaseAddress);
|
||||
RtlExitUserThread(dwExitCode);
|
||||
|
||||
@@ -1,12 +1,5 @@
|
||||
#pragma once
|
||||
|
||||
//Load dll from the provided buffer.
|
||||
NTSTATUS NTAPI LdrLoadDllMemory(
|
||||
_Out_ HMEMORYMODULE* BaseAddress, // Output module base address
|
||||
_In_ LPVOID BufferAddress, // Pointer to the dll file data buffer
|
||||
_In_ size_t Reserved // Reserved parameter, must be 0
|
||||
);
|
||||
|
||||
#define MEMORY_FEATURE_SUPPORT_VERSION 0x00000001
|
||||
#define MEMORY_FEATURE_MODULE_BASEADDRESS_INDEX 0x00000002 /* Windows8 and greater */
|
||||
#define MEMORY_FEATURE_LDRP_HEAP 0x00000004
|
||||
@@ -65,16 +58,6 @@ NTSTATUS NTAPI LdrLoadDllMemoryExW(
|
||||
_In_opt_ LPCWSTR DllFullName // Module file full path
|
||||
);
|
||||
|
||||
NTSTATUS NTAPI LdrLoadDllMemoryExA(
|
||||
_Out_ HMEMORYMODULE* BaseAddress,
|
||||
_Out_opt_ PVOID* LdrEntry,
|
||||
_In_ DWORD dwFlags,
|
||||
_In_ LPVOID BufferAddress,
|
||||
_In_ size_t Reserved,
|
||||
_In_opt_ LPCSTR DllName,
|
||||
_In_opt_ LPCSTR DllFullName
|
||||
);
|
||||
|
||||
//Unload modules previously loaded from memory
|
||||
NTSTATUS NTAPI LdrUnloadDllMemory(_In_ HMEMORYMODULE BaseAddress);
|
||||
|
||||
|
||||
@@ -5,8 +5,6 @@ LoadLibraryMemoryExA
|
||||
LoadLibraryMemoryExW
|
||||
FreeLibraryMemory
|
||||
|
||||
LdrLoadDllMemory
|
||||
LdrLoadDllMemoryExA
|
||||
LdrLoadDllMemoryExW
|
||||
LdrUnloadDllMemory
|
||||
LdrUnloadDllMemoryAndExitThread
|
||||
|
||||
Reference in New Issue
Block a user