Files
2021-06-16 03:00:19 +02:00

103 lines
2.6 KiB
C++

#include "ntdll_undoc.h"
NTSTATUS (NTAPI *NtCreateProcessEx)
(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN HANDLE ParentProcess,
IN ULONG Flags,
IN HANDLE SectionHandle OPTIONAL,
IN HANDLE DebugPort OPTIONAL,
IN HANDLE ExceptionPort OPTIONAL,
IN BOOLEAN InJob
) = NULL;
NTSTATUS (NTAPI *RtlCreateProcessParametersEx)(
_Out_ PRTL_USER_PROCESS_PARAMETERS *pProcessParameters,
_In_ PUNICODE_STRING ImagePathName,
_In_opt_ PUNICODE_STRING DllPath,
_In_opt_ PUNICODE_STRING CurrentDirectory,
_In_opt_ PUNICODE_STRING CommandLine,
_In_opt_ PVOID Environment,
_In_opt_ PUNICODE_STRING WindowTitle,
_In_opt_ PUNICODE_STRING DesktopInfo,
_In_opt_ PUNICODE_STRING ShellInfo,
_In_opt_ PUNICODE_STRING RuntimeData,
_In_ ULONG Flags // pass RTL_USER_PROC_PARAMS_NORMALIZED to keep parameters normalized
) = NULL;
NTSTATUS (NTAPI *NtCreateThreadEx) (
OUT PHANDLE ThreadHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN HANDLE ProcessHandle,
IN PVOID StartRoutine,
IN PVOID Argument OPTIONAL,
IN ULONG CreateFlags,
IN ULONG_PTR ZeroBits,
IN SIZE_T StackSize OPTIONAL,
IN SIZE_T MaximumStackSize OPTIONAL,
IN PVOID AttributeList OPTIONAL
) = NULL;
bool init_ntdll_func()
{
HMODULE lib = LoadLibraryA("ntdll.dll");
if (lib == nullptr) {
return false;
}
FARPROC proc = GetProcAddress(lib, "NtCreateProcessEx");
if (proc == nullptr) {
return false;
}
NtCreateProcessEx = (NTSTATUS (NTAPI *)(
PHANDLE,
ACCESS_MASK,
POBJECT_ATTRIBUTES,
HANDLE,
ULONG,
HANDLE,
HANDLE,
HANDLE,
BOOLEAN
)) proc;
proc = GetProcAddress(lib, "RtlCreateProcessParametersEx");
if (proc == nullptr) {
return false;
}
RtlCreateProcessParametersEx = (NTSTATUS (NTAPI *)(
PRTL_USER_PROCESS_PARAMETERS*,
PUNICODE_STRING,
PUNICODE_STRING,
PUNICODE_STRING,
PUNICODE_STRING,
PVOID,
PUNICODE_STRING,
PUNICODE_STRING,
PUNICODE_STRING,
PUNICODE_STRING,
ULONG
)) proc;
proc = GetProcAddress(lib, "NtCreateThreadEx");
if (proc == nullptr) {
return false;
}
NtCreateThreadEx = (NTSTATUS (NTAPI *)(
PHANDLE,
ACCESS_MASK,
POBJECT_ATTRIBUTES,
HANDLE,
PVOID,
PVOID,
ULONG,
ULONG_PTR,
SIZE_T,
SIZE_T,
PVOID
)) proc;
return true;
}