From 9feab8e95afd57e2a973c4ef660dc3db55016552 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Thu, 26 Nov 2020 00:17:50 +0100 Subject: [PATCH] [NDK][XDK] Add some missing macros for run-time checks of X86 system architecture (NEC support). --- sdk/include/ndk/ketypes.h | 23 +++++++++++++++++++++++ sdk/include/xdk/ketypes.h | 1 + sdk/include/xdk/x86/ke.h | 21 +++++++++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/sdk/include/ndk/ketypes.h b/sdk/include/ndk/ketypes.h index 7a8c614a8de..bd9409d5d26 100644 --- a/sdk/include/ndk/ketypes.h +++ b/sdk/include/ndk/ketypes.h @@ -221,6 +221,29 @@ typedef CCHAR KPROCESSOR_MODE; // #define SharedUserData ((KUSER_SHARED_DATA *)USER_SHARED_DATA) +/* Macros for user-mode run-time checks of X86 system architecture */ +#ifdef _X86_ + +#ifndef IsNEC_98 +#define IsNEC_98 (SharedUserData->AlternativeArchitecture == NEC98x86) +#endif + +#ifndef IsNotNEC_98 +#define IsNotNEC_98 (SharedUserData->AlternativeArchitecture != NEC98x86) +#endif + +/* User-mode cannot override the architecture */ +#ifndef SetNEC_98 +#define SetNEC_98 +#endif + +/* User-mode cannot override the architecture */ +#ifndef SetNotNEC_98 +#define SetNotNEC_98 +#endif + +#endif + // // Maximum WOW64 Entries in KUSER_SHARED_DATA // diff --git a/sdk/include/xdk/ketypes.h b/sdk/include/xdk/ketypes.h index d8abc4089c2..23a05de1b68 100644 --- a/sdk/include/xdk/ketypes.h +++ b/sdk/include/xdk/ketypes.h @@ -892,6 +892,7 @@ typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE { EndAlternatives } ALTERNATIVE_ARCHITECTURE_TYPE; +/* Correctly define these run-time definitions for non X86 machines */ #ifndef _X86_ #ifndef IsNEC_98 diff --git a/sdk/include/xdk/x86/ke.h b/sdk/include/xdk/x86/ke.h index c4be5220fa0..4b66e2a9d37 100644 --- a/sdk/include/xdk/x86/ke.h +++ b/sdk/include/xdk/x86/ke.h @@ -335,4 +335,25 @@ KeGetCurrentProcessorNumber(VOID) return (ULONG)__readfsbyte(FIELD_OFFSET(KPCR, Number)); } +/* Macros for kernel-mode run-time checks of X86 system architecture */ +#ifdef IsNEC_98 +#undef IsNEC_98 +#endif +#define IsNEC_98 (SharedUserData->AlternativeArchitecture == NEC98x86) + +#ifdef IsNotNEC_98 +#undef IsNotNEC_98 +#endif +#define IsNotNEC_98 (SharedUserData->AlternativeArchitecture != NEC98x86) + +#ifdef SetNEC_98 +#undef SetNEC_98 +#endif +#define SetNEC_98 (SharedUserData->AlternativeArchitecture = NEC98x86) + +#ifdef SetNotNEC_98 +#undef SetNotNEC_98 +#endif +#define SetNotNEC_98 (SharedUserData->AlternativeArchitecture = StandardDesign) + $endif (_NTDDK_)