[Kernel] Added support for custom kernel version
This commit is contained in:
@@ -48,6 +48,8 @@ namespace kernel {
|
||||
|
||||
constexpr fourcc_t kKernelSaveSignature = make_fourcc("KRNL");
|
||||
|
||||
static constexpr const uint16_t kBaseKernelBuildVersion = 1888;
|
||||
|
||||
// (?), used by KeGetCurrentProcessType
|
||||
constexpr uint32_t X_PROCTYPE_IDLE = 0;
|
||||
constexpr uint32_t X_PROCTYPE_TITLE = 1;
|
||||
@@ -145,6 +147,27 @@ struct KernelGuestGlobals {
|
||||
struct DPCImpersonationScope {
|
||||
uint8_t previous_irql_;
|
||||
};
|
||||
|
||||
struct KernelVersion {
|
||||
union {
|
||||
xe::be<uint64_t> value;
|
||||
|
||||
struct {
|
||||
xe::be<uint16_t> major;
|
||||
xe::be<uint16_t> minor;
|
||||
xe::be<uint16_t> build;
|
||||
xe::be<uint16_t> qfe;
|
||||
};
|
||||
};
|
||||
|
||||
KernelVersion(uint16_t build_ver = kBaseKernelBuildVersion) {
|
||||
major = 2;
|
||||
minor = 0;
|
||||
build = std::max(kBaseKernelBuildVersion, build_ver);
|
||||
qfe = 0;
|
||||
}
|
||||
};
|
||||
|
||||
class KernelState {
|
||||
public:
|
||||
explicit KernelState(Emulator* emulator);
|
||||
@@ -200,6 +223,8 @@ class KernelState {
|
||||
// Access must be guarded by the global critical region.
|
||||
util::ObjectTable* object_table() { return &object_table_; }
|
||||
|
||||
const KernelVersion* GetKernelVersion() const { return &kernel_version_; }
|
||||
|
||||
uint32_t GetSystemProcess() const {
|
||||
return kernel_guest_globals_ + offsetof(KernelGuestGlobals, system_process);
|
||||
}
|
||||
@@ -332,6 +357,8 @@ class KernelState {
|
||||
std::map<uint8_t, std::unique_ptr<xam::UserProfile>> user_profiles_;
|
||||
std::unique_ptr<AchievementManager> achievement_manager_;
|
||||
|
||||
KernelVersion kernel_version_;
|
||||
|
||||
xe::global_critical_region global_critical_region_;
|
||||
|
||||
// Must be guarded by the global critical region.
|
||||
|
||||
Reference in New Issue
Block a user