Implement architecture-specific user probe address retrieval
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 34s
Builds / ExectOS (i686, debug) (push) Successful in 32s
Builds / ExectOS (amd64, release) (push) Successful in 1m6s
Builds / ExectOS (i686, release) (push) Successful in 1m5s

This commit is contained in:
2026-06-30 21:41:08 +02:00
parent 91946ae88f
commit f9cbe78f84
9 changed files with 73 additions and 0 deletions

View File

@@ -110,6 +110,10 @@
/* Highest system address */
#define MM_HIGHEST_SYSTEM_ADDRESS 0xFFFFFFFFFFFFFFFFULL
/* User probe address */
#define MM_USER_PROBE_ADDRESS 0x00007FFFFFFF0000ULL
#define MM_USER_PROBE_LA57_ADDRESS 0x00FFFFFFFFFF0000ULL
/* Trampoline code address */
#define MM_TRAMPOLINE_ADDRESS 0x80000

View File

@@ -108,6 +108,9 @@
/* Highest system address */
#define MM_HIGHEST_SYSTEM_ADDRESS 0xFFFFFFFF
/* User probe address */
#define MM_USER_PROBE_ADDRESS 0x7FFF0000
/* Trampoline code address */
#define MM_TRAMPOLINE_ADDRESS 0x80000

View File

@@ -52,6 +52,7 @@ namespace MM
XTAPI PMMPXE GetPxeAddress(IN PVOID Address);
XTAPI ULONG GetPxeOffset(IN PVOID Address);
VIRTUAL XTAPI PVOID GetPxeVirtualAddress(IN PMMPXE PxePointer) = 0;
VIRTUAL ULONG_PTR GetUserProbeAddress(VOID) = 0;
XTAPI BOOLEAN GetXpaStatus();
VIRTUAL XTAPI VOID InitializePageMapInfo(VOID) = 0;
XTAPI BOOLEAN PteValid(IN PMMPTE PtePointer);
@@ -80,6 +81,7 @@ namespace MM
XTAPI PVOID GetPpeVirtualAddress(IN PMMPPE PpePointer);
XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
XTAPI PVOID GetPxeVirtualAddress(IN PMMPXE PxePointer);
XTAPI ULONG_PTR GetUserProbeAddress(VOID);
XTAPI VOID InitializePageMapInfo(VOID);
};
@@ -90,6 +92,7 @@ namespace MM
XTAPI PVOID GetPpeVirtualAddress(IN PMMPPE PpePointer);
XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
XTAPI PVOID GetPxeVirtualAddress(IN PMMPXE PxePointer);
XTAPI ULONG_PTR GetUserProbeAddress(VOID);
XTAPI VOID InitializePageMapInfo(VOID);
};
}

View File

@@ -49,6 +49,7 @@ namespace MM
STATIC XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
STATIC XTAPI PMMPXE GetPxeAddress(IN PVOID Address);
STATIC XTAPI PVOID GetPxeVirtualAddress(IN PMMPXE PxePointer);
STATIC XTAPI ULONG_PTR GetUserProbeAddress(VOID);
STATIC XTAPI BOOLEAN GetXpaStatus(VOID);
STATIC XTAPI VOID InitializePageMapSupport(VOID);
STATIC XTAPI XTSTATUS MapVirtualAddress(IN PVOID VirtualAddress,

View File

@@ -46,6 +46,7 @@ namespace MM
VIRTUAL XTAPI ULONG GetPteSoftwarePrototype(IN PMMPTE PtePointer) = 0;
VIRTUAL XTAPI ULONG GetPteSoftwareTransition(IN PMMPTE PtePointer) = 0;
VIRTUAL XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer) = 0;
XTAPI ULONG_PTR GetUserProbeAddress(VOID);
XTAPI BOOLEAN GetXpaStatus();
VIRTUAL XTAPI VOID InitializePageMapInfo(VOID) = 0;
VIRTUAL XTAPI BOOLEAN PteValid(IN PMMPTE PtePointer) = 0;

View File

@@ -45,6 +45,7 @@ namespace MM
STATIC XTAPI ULONG GetPteSoftwarePrototype(IN PMMPTE PtePointer);
STATIC XTAPI ULONG GetPteSoftwareTransition(IN PMMPTE PtePointer);
STATIC XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
STATIC XTAPI ULONG_PTR GetUserProbeAddress(VOID);
STATIC XTAPI BOOLEAN GetXpaStatus(VOID);
STATIC XTAPI VOID InitializePageMapSupport(VOID);
STATIC XTAPI XTSTATUS MapVirtualAddress(IN PVOID VirtualAddress,

View File

@@ -755,6 +755,21 @@ MM::PageMapBasic::GetPxeVirtualAddress(IN PMMPXE PxePointer)
return (PVOID)(((LONGLONG)PxePointer << 52) >> 16);
}
/**
* Retrieves the maximum valid memory address accessible to user-mode applications.
*
* @return This routine returns the user-mode probe address boundary.
*
* @since XT 1.0
*/
XTAPI
ULONG_PTR
MM::PageMapBasic::GetUserProbeAddress(VOID)
{
/* Return user probe address */
return MM_USER_PROBE_ADDRESS;
}
/**
* Initializes page map information for basic paging (PML4).
*
@@ -852,6 +867,21 @@ MM::PageMapXpa::GetPxeVirtualAddress(IN PMMPXE PxePointer)
return (PVOID)(((LONGLONG)PxePointer << 43) >> 7);
}
/**
* Retrieves the maximum valid memory address accessible to user-mode applications.
*
* @return This routine returns the user-mode probe address boundary.
*
* @since XT 1.0
*/
XTAPI
ULONG_PTR
MM::PageMapXpa::GetUserProbeAddress(VOID)
{
/* Return user probe address */
return MM_USER_PROBE_LA57_ADDRESS;
}
/**
* Initializes page map information for XPA paging (PML5).
*

View File

@@ -173,6 +173,21 @@ MM::PageMap::GetPteOffset(IN PVOID Address)
return ((((ULONG_PTR)(Address)) >> MM_PTI_SHIFT) & (PageMapInfo.Xpa ? 0x1FF : 0x3FF));
}
/**
* Retrieves the maximum valid memory address accessible to user-mode applications.
*
* @return This routine returns the user-mode probe address boundary.
*
* @since XT 1.0
*/
XTAPI
ULONG_PTR
MM::PageMap::GetUserProbeAddress(VOID)
{
/* Return user probe address */
return MM_USER_PROBE_ADDRESS;
}
/**
* Gets the status of Extended Paging Address (XPA) mode.
*

View File

@@ -470,6 +470,21 @@ MM::Paging::GetPteVirtualAddress(IN PMMPTE PtePointer)
return PmlRoutines->GetPteVirtualAddress(PtePointer);
}
/**
* Retrieves the maximum valid memory address accessible to user-mode applications.
*
* @return This routine returns the user-mode probe address boundary.
*
* @since XT 1.0
*/
XTAPI
ULONG_PTR
MM::Paging::GetUserProbeAddress(VOID)
{
/* Return user probe address */
return PmlRoutines->GetUserProbeAddress();
}
/**
* Gets current status of eXtended Physical Addressing (XPA).
*