mirror of
https://codeberg.org/WinDurango/WinDurango.git
synced 2026-04-18 02:23:34 -04:00
216 lines
7.2 KiB
C++
216 lines
7.2 KiB
C++
//
|
|
// Created by DexrnZacAttack on 1/23/26 using zPc-i2.
|
|
//
|
|
#ifndef WINDURANGO_KERNEL_H
|
|
#define WINDURANGO_KERNEL_H
|
|
|
|
#include <Windows.h>
|
|
#include <bitset>
|
|
#include <map>
|
|
|
|
// Most of those came from XWine1
|
|
//(More specifically, SlimEra).
|
|
|
|
// For Allocation Purposes
|
|
#define MEM_GRAPHICS 0x10000000
|
|
#define MEM_TITLE 0x40000000
|
|
#define PAGE_SIZE_4KB (1ULL << 12)
|
|
#define PAGE_SIZE_64K (1ULL << 16)
|
|
#define PAGE_SIZE_2MB (1ULL << 21)
|
|
#define PAGE_SIZE_4MB (1ULL << 22)
|
|
#define MEM_MASK (MEM_COMMIT | MEM_RESERVE | MEM_RESET | MEM_TOP_DOWN | MEM_WRITE_WATCH | MEM_RESET_UNDO)
|
|
#define PAGE_MASK (PAGE_NOACCESS | PAGE_READONLY | PAGE_READWRITE | PAGE_GUARD)
|
|
#define MEM_PHYSICAL_SIZE 0x400000000ULL // 16 GiB
|
|
static std::bitset<(MEM_PHYSICAL_SIZE >> 16)> XwpPhysicalPages;
|
|
static SRWLOCK XwpPhysicalMemoryLock = SRWLOCK_INIT;
|
|
static HANDLE XwpPhysicalMemory = CreateFileMapping2(INVALID_HANDLE_VALUE, nullptr, FILE_MAP_READ | FILE_MAP_WRITE, PAGE_READWRITE, SEC_RESERVE, MEM_PHYSICAL_SIZE, nullptr, nullptr, 0);
|
|
|
|
// ESRAM stuff
|
|
#define MEM_ESRAM_SIZE 0x2000000ULL // 32 MiB
|
|
static HANDLE XwpEsramMemory = CreateFileMapping2(INVALID_HANDLE_VALUE, nullptr, FILE_MAP_READ | FILE_MAP_WRITE, PAGE_READWRITE, SEC_RESERVE, MEM_ESRAM_SIZE, nullptr, nullptr, 0);
|
|
|
|
typedef struct _MAPPABLE_MEM
|
|
{
|
|
ULONG_PTR RegionSize : 63;
|
|
ULONG_PTR Is4MBPages : 1;
|
|
} MAPPABLE_MEM, *PMAPPABLE_MEM;
|
|
|
|
static SRWLOCK XwpMappableLock = SRWLOCK_INIT;
|
|
static std::map<ULONG_PTR, MAPPABLE_MEM> XwpMappables;
|
|
static LPVOID MappableQuery(_In_opt_ LPCVOID lpAddress, _Out_ PMAPPABLE_MEM pMappable)
|
|
{
|
|
auto it = XwpMappables.upper_bound((ULONG_PTR)lpAddress);
|
|
|
|
if (it == XwpMappables.begin())
|
|
{
|
|
*pMappable = {};
|
|
return nullptr;
|
|
}
|
|
|
|
--it;
|
|
|
|
if (it->first + it->second.RegionSize <= (ULONG_PTR)lpAddress)
|
|
{
|
|
*pMappable = {};
|
|
return nullptr;
|
|
}
|
|
|
|
*pMappable = it->second;
|
|
return (LPVOID)it->first;
|
|
}
|
|
|
|
static DWORD WIN32_FROM_HRESULT(_In_ HRESULT hr)
|
|
{
|
|
if (SUCCEEDED(hr))
|
|
return ERROR_SUCCESS;
|
|
|
|
return HRESULT_FACILITY(hr) == FACILITY_WIN32 ? HRESULT_CODE(hr) : hr;
|
|
}
|
|
|
|
typedef enum _CONSOLE_TYPE
|
|
{
|
|
CONSOLE_TYPE_UNKNOWN,
|
|
CONSOLE_TYPE_XBOX_ONE,
|
|
CONSOLE_TYPE_XBOX_ONE_S,
|
|
CONSOLE_TYPE_XBOX_ONE_X,
|
|
CONSOLE_TYPE_XBOX_ONE_X_DEVKIT,
|
|
} CONSOLE_TYPE, *PCONSOLE_TYPE, *LPCONSOLE_TYPE;
|
|
|
|
EXTERN_C CONSOLE_TYPE WINAPI GetConsoleType();
|
|
|
|
typedef struct _SYSTEMOSVERSIONINFO
|
|
{
|
|
BYTE MajorVersion;
|
|
BYTE MinorVersion;
|
|
WORD BuildNumber;
|
|
WORD Revision;
|
|
} SYSTEMOSVERSIONINFO, *PSYSTEMOSVERSIONINFO, *LPSYSTEMOSVERSIONINFO;
|
|
|
|
EXTERN_C VOID WINAPI GetSystemOSVersion(_Out_ LPSYSTEMOSVERSIONINFO lpVersionInformation);
|
|
|
|
typedef struct _PROCESSOR_SCHEDULING_STATISTICS
|
|
{
|
|
ULONGLONG RunningTime;
|
|
ULONGLONG IdleTime;
|
|
ULONGLONG GlobalTime;
|
|
} PROCESSOR_SCHEDULING_STATISTICS, *PPROCESSOR_SCHEDULING_STATISTICS, *LPPROCESSOR_SCHEDULING_STATISTICS;
|
|
|
|
EXTERN_C VOID WINAPI QueryProcessorSchedulingStatistics(_Out_ PPROCESSOR_SCHEDULING_STATISTICS lpStatistics);
|
|
|
|
EXTERN_C BOOL WINAPI SetThreadpoolAffinityMask(_Inout_ PTP_POOL Pool, _In_ DWORD_PTR dwThreadAffinityMask);
|
|
|
|
EXTERN_C BOOL WINAPI SetThreadName(_In_ HANDLE hThread, _In_ PCWSTR lpThreadName);
|
|
|
|
EXTERN_C BOOL WINAPI GetThreadName(_In_ HANDLE hThread, _Out_ PWSTR lpThreadName, _In_ SIZE_T dwBufferLength,
|
|
_Out_ PSIZE_T pdwReturnLength);
|
|
|
|
typedef struct _TITLEMEMORYSTATUS
|
|
{
|
|
DWORD dwLength;
|
|
DWORD dwReserved;
|
|
ULONGLONG ullTotalMem;
|
|
ULONGLONG ullAvailMem;
|
|
ULONGLONG ullLegacyUsed;
|
|
ULONGLONG ullLegacyPeak;
|
|
ULONGLONG ullLegacyAvail;
|
|
ULONGLONG ullTitleUsed;
|
|
ULONGLONG ullTitleAvail;
|
|
ULONGLONG ullLegacyPageTableUsed;
|
|
ULONGLONG ullTitlePageTableUsed;
|
|
} TITLEMEMORYSTATUS, *PTITLEMEMORYSTATUS, *LPTITLEMEMORYSTATUS;
|
|
|
|
EXTERN_C BOOL WINAPI TitleMemoryStatus(_Inout_ LPTITLEMEMORYSTATUS lpBuffer);
|
|
|
|
EXTERN_C BOOL WINAPI JobTitleMemoryStatus(_Inout_ LPTITLEMEMORYSTATUS lpBuffer);
|
|
|
|
typedef struct _TOOLINGMEMORYSTATUS
|
|
{
|
|
DWORD dwLength;
|
|
DWORD dwReserved;
|
|
ULONGLONG ullTotalMem;
|
|
ULONGLONG ullAvailMem;
|
|
ULONGLONG ulPeakUsage;
|
|
ULONGLONG ullPageTableUsage;
|
|
} TOOLINGMEMORYSTATUS, *PTOOLINGMEMORYSTATUS, *LPTOOLINGMEMORYSTATUS;
|
|
|
|
EXTERN_C BOOL WINAPI ToolingMemoryStatus(_Inout_ LPTOOLINGMEMORYSTATUS lpBuffer);
|
|
|
|
EXTERN_C BOOL WINAPI AllocateTitlePhysicalPages(_In_ HANDLE hProcess, _In_ DWORD flAllocationType,
|
|
_Inout_ PULONG_PTR NumberOfPages, _Out_ PULONG_PTR PageArray);
|
|
|
|
EXTERN_C BOOL WINAPI FreeTitlePhysicalPages(_In_ HANDLE hProcess, _In_ ULONG_PTR NumberOfPages,
|
|
_In_ PULONG_PTR PageArray);
|
|
|
|
EXTERN_C PVOID WINAPI MapTitlePhysicalPages(_In_opt_ PVOID VirtualAddress, _In_ ULONG_PTR NumberOfPages,
|
|
_In_ DWORD flAllocationType, _In_ DWORD flProtect,
|
|
_In_ PULONG_PTR PageArray);
|
|
|
|
// This is not a standard ERA function, it is provided for convenience
|
|
// to aid in the implementation of the Direct3D D3DMapEsramMemory API.
|
|
EXTERN_C HRESULT WINAPI MapTitleEsramPages(_In_ PVOID VirtualAddress, _In_ UINT NumberOfPages,
|
|
_In_ DWORD flAllocationType, _In_opt_ UINT const *PageArray);
|
|
|
|
typedef union _XALLOC_ATTRIBUTES {
|
|
ULONGLONG dwAttributes;
|
|
|
|
struct
|
|
{
|
|
ULONGLONG dwObjectType : 14;
|
|
ULONGLONG dwPageSize : 2;
|
|
ULONGLONG dwAllocatorId : 8;
|
|
ULONGLONG dwAlignment : 5;
|
|
ULONGLONG dwMemoryType : 4;
|
|
ULONGLONG reserved : 31;
|
|
} s;
|
|
} XALLOC_ATTRIBUTES, *PXALLOC_ATTRIBUTES, *LPXALLOC_ATTRIBUTES;
|
|
|
|
typedef enum _XALLOC_PAGESIZE
|
|
{
|
|
XALLOC_PAGESIZE_4KB,
|
|
XALLOC_PAGESIZE_64KB,
|
|
XALLOC_PAGESIZE_4MB,
|
|
} XALLOC_PAGESIZE, *PXALLOC_PAGESIZE;
|
|
|
|
typedef enum _XALLOC_MEMTYPE
|
|
{
|
|
XALLOC_MEMTYPE_HEAP,
|
|
XALLOC_MEMTYPE_GRAPHICS_1,
|
|
XALLOC_MEMTYPE_GRAPHICS_2,
|
|
XALLOC_MEMTYPE_GRAPHICS_3,
|
|
XALLOC_MEMTYPE_GRAPHICS_4,
|
|
XALLOC_MEMTYPE_GRAPHICS_5,
|
|
XALLOC_MEMTYPE_GRAPHICS_6,
|
|
XALLOC_MEMTYPE_PHYSICAL_1,
|
|
XALLOC_MEMTYPE_PHYSICAL_2,
|
|
XALLOC_MEMTYPE_PHYSICAL_3,
|
|
} XALLOC_MEMTYPE, *PXALLOC_MEMTYPE;
|
|
|
|
EXTERN_C PVOID WINAPI XMemAllocDefault(_In_ SIZE_T dwSize, _In_ ULONGLONG dwAttributes);
|
|
|
|
EXTERN_C void WINAPI XMemFreeDefault(_In_ PVOID lpAddress, _In_ ULONGLONG dwAttributes);
|
|
|
|
EXTERN_C PVOID WINAPI XMemAlloc(_In_ SIZE_T dwSize, _In_ ULONGLONG dwAttributes);
|
|
|
|
EXTERN_C void WINAPI XMemFree(_In_ PVOID lpAddress, _In_ ULONGLONG dwAttributes);
|
|
|
|
EXTERN_C LPVOID WINAPI EraVirtualAlloc(LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect);
|
|
|
|
typedef PVOID WINAPI XMEMALLOC_ROUTINE(_In_ SIZE_T dwSize, _In_ ULONGLONG dwAttributes);
|
|
|
|
typedef XMEMALLOC_ROUTINE *PXMEMALLOC_ROUTINE, *LPXMEMALLOC_ROUTINE;
|
|
|
|
typedef void WINAPI XMEMFREE_ROUTINE(_In_ PVOID lpAddress, _In_ ULONGLONG dwAttributes);
|
|
|
|
typedef XMEMFREE_ROUTINE *PXMEMFREE_ROUTINE, *LPXMEMFREE_ROUTINE;
|
|
|
|
EXTERN_C void WINAPI XMemSetAllocationHooks(_In_opt_ PXMEMALLOC_ROUTINE pAllocRoutine,
|
|
_In_opt_ PXMEMFREE_ROUTINE pFreeRoutine);
|
|
|
|
// More XMem stuff
|
|
CRITICAL_SECTION XmpAllocationHookLock;
|
|
static PXMEMALLOC_ROUTINE XmpAllocRoutine = XMemAllocDefault;
|
|
static PXMEMFREE_ROUTINE XmpFreeRoutine = XMemFreeDefault;
|
|
|
|
|
|
#endif // WINDURANGO_KERNEL_H
|