32 IN size_t NumberOfBytes,
33 IN uint8_t AllocationType
87 switch (AllocationType) {
123 IN uint32_t ProcessId,
169 *ProcessHandle = OutHandleBefore;
209 gop_printf(
COLOR_RED,
"[PROCESS-TERMINATE] Process %p called upon to terminate itself from this existence of the virtual world. | Status: %p\n", (
void*)(uintptr_t)ProcessToTerminate, (
void*)(uintptr_t)ExitStatus);
217 (
void**)&ProcessToTerminate,
221 gop_printf(
COLOR_RED,
"[PROCESS-TERMINATE] Process %p called to be terminated. | Status: %p\n", (
void*)(uintptr_t)ProcessToTerminate, (
void*)(uintptr_t)ExitStatus);
234 IN uint64_t FileOffset,
236 IN size_t BufferSize,
278 Status =
ProbeForRead(Buffer, BufferSize, _Alignof(
char));
286 if (BytesRead && PreviousMode ==
UserMode) {
287 Status =
ProbeForRead(BytesRead,
sizeof(
size_t), _Alignof(
size_t));
302 size_t KernelBytesRead = 0;
315 if (
MT_FAILURE(Status) && KernelBytesRead == 0) {
323 kmemcpy(Buffer, KernelBuffer, KernelBytesRead);
337 *BytesRead = KernelBytesRead;
354 IN uint64_t FileOffset,
356 IN size_t BufferSize,
378 Status =
ProbeForRead(Buffer, BufferSize, _Alignof(
char));
386 if (BytesWritten && PreviousMode ==
UserMode) {
387 Status =
ProbeForRead(BytesWritten,
sizeof(
size_t), _Alignof(
size_t));
404 kmemcpy(KernelBuffer, Buffer, BufferSize);
413 size_t KernelBytesWritten = 0;
426 if (
MT_FAILURE(Status) && KernelBytesWritten == 0) {
438 *BytesWritten = KernelBytesWritten;
497 *FileHandleOut = KernelHandle;
PEPROCESS PsLookupProcessByProcessId(IN HANDLE ProcessId)
struct _FILE_OBJECT * PFILE_OBJECT
#define MT_FILE_READ_DATA
#define MT_FILE_WRITE_DATA
void gop_printf(uint32_t color, const char *fmt,...)
char * kstrncpy(char *dst, const char *src, size_t n)
MTSTATUS HtClose(IN HANDLE Handle)
FORCEINLINE IRQL MeGetCurrentIrql(void)
FORCEINLINE PRIVILEGE_MODE MeGetPreviousMode(void)
#define COLOR_RED
Colors definitions for easier access.
FORCEINLINE void * kmemcpy(void *dest, const void *src, size_t len)
enum _PRIVILEGE_MODE PRIVILEGE_MODE
enum _VAD_FLAGS VAD_FLAGS
#define MtCurrentThread()
#define MtCurrentProcess()
#define MT_PROCESS_IS_TERMINATING
#define MT_CANT_TERMINATE_SELF
#define MT_FAILURE(Status)
MTSTATUS ObReferenceObjectByHandle(IN HANDLE Handle, IN uint32_t DesiredAccess, IN POBJECT_TYPE DesiredType, OUT void **Object, _Out_Opt PHANDLE_TABLE_ENTRY HandleInformation)
void ObDereferenceObject(IN void *Object)
bool ObReferenceObject(IN void *Object)
MTSTATUS ObOpenObjectByPointer(IN void *Object, IN POBJECT_TYPE ObjectType, IN ACCESS_MASK DesiredAccess, OUT PHANDLE Handle)
void MmFreePool(IN void *buf)
void * MmAllocatePoolWithTag(IN enum _POOL_TYPE PoolType, IN size_t NumberOfBytes, IN uint32_t Tag)
MTSTATUS ProbeForRead(IN const void *Address, IN size_t Length, IN uint32_t Alignment)
MTSTATUS PsTerminateProcess(IN PEPROCESS Process, IN MTSTATUS ExitCode)
#define MT_THREAD_TERMINATE
FORCEINLINE PEPROCESS PsGetCurrentProcess(void)
FORCEINLINE MTSTATUS GetExceptionCode(void)
#define MT_PROCESS_VM_OPERATION
#define MT_PROCESS_TERMINATE
POBJECT_TYPE PsThreadType
POBJECT_TYPE PsProcessType
MTSTATUS MtReadFile(IN HANDLE FileHandle, IN uint64_t FileOffset, OUT void *Buffer, IN size_t BufferSize, _Out_Opt size_t *BytesRead)
MTSTATUS MtTerminateProcess(IN HANDLE ProcessHandle, IN MTSTATUS ExitStatus)
MTSTATUS MtAllocateVirtualMemory(IN HANDLE ProcessHandle, _In_Opt _Out_Opt void **BaseAddress, IN size_t NumberOfBytes, IN uint8_t AllocationType)
MTSTATUS MtClose(IN HANDLE hObject)
MTSTATUS MtOpenProcess(IN uint32_t ProcessId, OUT PHANDLE ProcessHandle, IN ACCESS_MASK DesiredAccess)
MTSTATUS MtTerminateThread(IN HANDLE ThreadHandle, IN MTSTATUS ExitStatus)
MTSTATUS MtWriteFile(IN HANDLE FileHandle, IN uint64_t FileOffset, IN void *Buffer, IN size_t BufferSize, _Out_Opt size_t *BytesWritten)
MTSTATUS MtCreateFile(IN const char *path, IN ACCESS_MASK DesiredAccess, OUT PHANDLE FileHandleOut)
MTSTATUS PsTerminateThread(IN PETHREAD Thread, IN MTSTATUS ExitStatus)
PETHREAD PsGetCurrentThread(void)
MTSTATUS MmAllocateVirtualMemory(IN PEPROCESS Process, _In_Opt _Out_Opt void **BaseAddress, IN size_t NumberOfBytes, IN VAD_FLAGS VadFlags)
MTSTATUS FsReadFile(IN PFILE_OBJECT FileObject, IN uint64_t FileOffset, OUT void *Buffer, IN size_t BufferSize, _Out_Opt size_t *BytesRead)
MTSTATUS FsCreateFile(IN const char *path, IN ACCESS_MASK DesiredAccess, OUT PHANDLE FileHandleOut)
MTSTATUS FsWriteFile(IN PFILE_OBJECT FileObject, IN uint64_t FileOffset, IN void *Buffer, IN size_t BufferSize, _Out_Opt size_t *BytesWritten)