Skeleton code for more kernel calls.
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
#include "kernel/modules/xboxkrnl/xboxkrnl_memory.h"
|
||||
|
||||
#include "kernel/shim_utils.h"
|
||||
#include "kernel/modules/xboxkrnl/xboxkrnl.h"
|
||||
|
||||
|
||||
using namespace xe;
|
||||
@@ -34,34 +35,29 @@ void NtAllocateVirtualMemory_shim(
|
||||
uint32_t base_addr_value = SHIM_MEM_32(base_addr_ptr);
|
||||
uint32_t region_size_ptr = SHIM_GET_ARG_32(1);
|
||||
uint32_t region_size_value = SHIM_MEM_32(region_size_ptr);
|
||||
// MEM_COMMIT | MEM_PHYSICAL | MEM_RESERVE | MEM_RESET | MEM_TOP_DOWN
|
||||
// X_MEM_*
|
||||
uint32_t allocation_type = SHIM_GET_ARG_32(2);
|
||||
// PAGE_NOACCESS | PAGE_READONLY | PAGE_READWRITE | PAGE_EXECUTE |
|
||||
// PAGE_EXECUTE_READ | PAGE_EXECUTE_READWRITE | PAGE_GUARD | PAGE_NOCACHE |
|
||||
// PAGE_WRITECOMBINE
|
||||
// X_PAGE_*
|
||||
uint32_t protect_bits = SHIM_GET_ARG_32(3);
|
||||
uint32_t unknown = SHIM_GET_ARG_32(4);
|
||||
|
||||
XELOGD(
|
||||
XT("NtAllocateVirtualMemory(%.8X(%.8X), %.8X(%.8X), %.8X, %.8X, %.8X)"),
|
||||
base_addr_ptr, base_addr_value,
|
||||
region_size_ptr, region_size_value,
|
||||
allocation_type, protect_bits, unknown);
|
||||
XT("NtAllocateVirtualMemory(%.8X(%.8X), %.8X(%.8X), %.8X, %.8X, %.8X)"),
|
||||
base_addr_ptr, base_addr_value,
|
||||
region_size_ptr, region_size_value,
|
||||
allocation_type, protect_bits, unknown);
|
||||
|
||||
// TODO(benvanik): alloc memory
|
||||
|
||||
// Possible return codes:
|
||||
// STATUS_ACCESS_DENIED
|
||||
// STATUS_ALREADY_COMMITTED
|
||||
// STATUS_COMMITMENT_LIMIT
|
||||
// STATUS_CONFLICTING_ADDRESSES
|
||||
// STATUS_INSUFFICIENT_RESOURCES
|
||||
// STATUS_INVALID_HANDLE
|
||||
// STATUS_INVALID_PAGE_PROTECTION
|
||||
// STATUS_NO_MEMORY
|
||||
// STATUS_OBJECT_TYPE_MISMATCH
|
||||
// STATUS_PROCESS_IS_TERMINATING
|
||||
SHIM_SET_RETURN(0xC0000017);
|
||||
// X_STATUS_UNSUCCESSFUL
|
||||
// X_STATUS_INVALID_PAGE_PROTECTION
|
||||
// X_STATUS_ACCESS_DENIED
|
||||
// X_STATUS_ALREADY_COMMITTED
|
||||
// X_STATUS_INVALID_HANDLE
|
||||
// X_STATUS_INVALID_PAGE_PROTECTION
|
||||
// X_STATUS_NO_MEMORY
|
||||
SHIM_SET_RETURN(X_STATUS_UNSUCCESSFUL);
|
||||
}
|
||||
|
||||
void NtFreeVirtualMemory_shim(
|
||||
@@ -76,23 +72,23 @@ void NtFreeVirtualMemory_shim(
|
||||
uint32_t base_addr_value = SHIM_MEM_32(base_addr_ptr);
|
||||
uint32_t region_size_ptr = SHIM_GET_ARG_32(1);
|
||||
uint32_t region_size_value = SHIM_MEM_32(region_size_ptr);
|
||||
// MEM_DECOMMIT | MEM_RELEASE
|
||||
// X_MEM_DECOMMIT | X_MEM_RELEASE
|
||||
uint32_t free_type = SHIM_GET_ARG_32(2);
|
||||
uint32_t unknown = SHIM_GET_ARG_32(3);
|
||||
|
||||
XELOGD(
|
||||
XT("NtFreeVirtualMemory(%.8X(%.8X), %.8X(%.8X), %.8X, %.8X)"),
|
||||
base_addr_ptr, base_addr_value,
|
||||
region_size_ptr, region_size_value,
|
||||
free_type, unknown);
|
||||
XT("NtFreeVirtualMemory(%.8X(%.8X), %.8X(%.8X), %.8X, %.8X)"),
|
||||
base_addr_ptr, base_addr_value,
|
||||
region_size_ptr, region_size_value,
|
||||
free_type, unknown);
|
||||
|
||||
// TODO(benvanik): free memory
|
||||
|
||||
// Possible return codes:
|
||||
// STATUS_ACCESS_DENIED
|
||||
// STATUS_INVALID_HANDLE
|
||||
// STATUS_OBJECT_TYPE_MISMATCH
|
||||
SHIM_SET_RETURN(0xFFFFFFFF);
|
||||
// X_STATUS_UNSUCCESSFUL
|
||||
// X_STATUS_ACCESS_DENIED
|
||||
// X_STATUS_INVALID_HANDLE
|
||||
SHIM_SET_RETURN(X_STATUS_UNSUCCESSFUL);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user