Skeleton code for more kernel calls.

This commit is contained in:
Ben Vanik
2013-01-28 13:28:22 -08:00
parent 6c4af5aa70
commit e93908dd72
9 changed files with 248 additions and 28 deletions

View File

@@ -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);
}