ntoskrnl.exe.x64.10.0.22621.2792-ntoskrnl.exe.x64.10.0.22621.2861 Diff
TOC
- ntoskrnl.exe.x64.10.0.22621.2792-ntoskrnl.exe.x64.10.0.22621.2861 Diff
 - TOC
 - Visual Chart Diff
 - Metadata
 - Deleted
 - Added
 - Modified
 - Modified (No Code Changes)
 
Visual Chart Diff
Metadata
Ghidra Diff Engine
Command Line
Captured Command Line
ghidriff --project-location ghidra_projects --project-name ghidriff --symbols-path symbols --threaded --log-level DEBUG --file-log-level INFO --log-path ghidriff.log --min-func-len 166 --max-ram-percent 60.0 --max-section-funcs 200 ntoskrnl.exe.x64.10.0.22621.2792 ntoskrnl.exe.x64.10.0.22621.2861
Verbose Args
Details
--old ['bins/ntoskrnl.exe.x64.10.0.22621.2792'] --new [['bins/ntoskrnl.exe.x64.10.0.22621.2861']] --engine VersionTrackingDiff --output-path ghidriffs --summary False --project-location ghidra_projects --project-name ghidriff --symbols-path symbols --threaded True --force-analysis False --force-diff False --no-symbols False --log-level DEBUG --file-log-level INFO --log-path ghidriff.log --va False --min-func-len 166 --max-ram-percent 60.0 --print-flags False --jvm-args None --side-by-side False --max-section-funcs 200 --md-title None
Download Original PEs
wget https://msdl.microsoft.com/download/symbols/ntkrnlmp.exe/45E0905D1047000/ntkrnlmp.exe -O ntkrnlmp.exe.x64.10.0.22621.2792
wget https://msdl.microsoft.com/download/symbols/ntkrnlmp.exe/9EEE36DE1047000/ntkrnlmp.exe -O ntkrnlmp.exe.x64.10.0.22621.2861
Binary Metadata Diff
--- ntoskrnl.exe.x64.10.0.22621.2792 Meta
+++ ntoskrnl.exe.x64.10.0.22621.2861 Meta
@@ -1,44 +1,44 @@
-Program Name: ntoskrnl.exe.x64.10.0.22621.2792
+Program Name: ntoskrnl.exe.x64.10.0.22621.2861
 Language ID: x86:LE:64:default (2.14)
 Compiler ID: windows
 Processor: x86
 Endian: Little
 Address Size: 64
 Minimum Address: 140000000
 Maximum Address: ff0000184f
-# of Bytes: 17058172
+# of Bytes: 17058156
 # of Memory Blocks: 42
-# of Instructions: 2428603
-# of Defined Data: 76345
+# of Instructions: 2428804
+# of Defined Data: 76341
 # of Functions: 30553
 # of Symbols: 312846
 # of Data Types: 6213
 # of Data Type Categories: 581
 Analyzed: true
 Compiler: visualstudio:unknown
 Created With Ghidra Version: 10.4
-Date Created: Wed Dec 13 13:10:12 UTC 2023
+Date Created: Wed Dec 13 13:10:16 UTC 2023
 Executable Format: Portable Executable (PE)
-Executable Location: /workspaces/ghidriff/ntoskrnl.exe.x64.10.0.22621.2792
-Executable MD5: 10ea2e1b94d0c838953cb0f9739e8372
-Executable SHA256: 98831dafa306900ac2b11f23fe69a789f1232127c653f3e01554c339bcb08365
-FSRL: file:///workspaces/ghidriff/ntoskrnl.exe.x64.10.0.22621.2792?MD5=10ea2e1b94d0c838953cb0f9739e8372
+Executable Location: /workspaces/ghidriff/ntoskrnl.exe.x64.10.0.22621.2861
+Executable MD5: c89e5bac1b50f750ac11431fe7865946
+Executable SHA256: 0ce15480462e9cd3f7cbf2d44d2e393cf5674ee1d69a3459adfa0e913a7a2aeb
+FSRL: file:///workspaces/ghidriff/ntoskrnl.exe.x64.10.0.22621.2861?MD5=c89e5bac1b50f750ac11431fe7865946
 PDB Age: 1
 PDB File: ntkrnlmp.pdb
-PDB GUID: 83330ebc-3601-6c3b-d2b8-1c614ec8187c
+PDB GUID: 7fcf1ace-660b-3812-3d43-4bb789d5a6e8
 PDB Loaded: true
 PDB Version: RSDS
 PE Property[CompanyName]: Microsoft Corporation
 PE Property[FileDescription]: NT Kernel & System
-PE Property[FileVersion]: 10.0.22621.2792 (WinBuild.160101.0800)
+PE Property[FileVersion]: 10.0.22621.2861 (WinBuild.160101.0800)
 PE Property[InternalName]: ntkrnlmp.exe
 PE Property[LegalCopyright]: © Microsoft Corporation. All rights reserved.
 PE Property[OriginalFilename]: ntkrnlmp.exe
 PE Property[ProductName]: Microsoft® Windows® Operating System
-PE Property[ProductVersion]: 10.0.22621.2792
+PE Property[ProductVersion]: 10.0.22621.2861
 PE Property[Translation]: 4b00409
 Preferred Root Namespace Category: 
 RTTI Found: false
 Relocatable: true
 SectionAlignment: 4096
 Should Ask To Analyze: false
Program Options
Ghidra ntoskrnl.exe.x64.10.0.22621.2792 Decompiler Options
| Decompiler Option | Value | 
|---|---|
| Prototype Evaluation | __fastcall | 
Ghidra ntoskrnl.exe.x64.10.0.22621.2792 Specification extensions Options
| Specification extensions Option | Value | 
|---|---|
| FormatVersion | 0 | 
| VersionCounter | 0 | 
Ghidra ntoskrnl.exe.x64.10.0.22621.2792 Analyzers Options
| Analyzers Option | Value | 
|---|---|
| ASCII Strings | true | 
| ASCII Strings.Create Strings Containing Existing Strings | true | 
| ASCII Strings.Create Strings Containing References | true | 
| ASCII Strings.Force Model Reload | false | 
| ASCII Strings.Minimum String Length | LEN_5 | 
| ASCII Strings.Model File | StringModel.sng | 
| ASCII Strings.Require Null Termination for String | true | 
| ASCII Strings.Search Only in Accessible Memory Blocks | true | 
| ASCII Strings.String Start Alignment | ALIGN_1 | 
| ASCII Strings.String end alignment | 4 | 
| Aggressive Instruction Finder | false | 
| Aggressive Instruction Finder.Create Analysis Bookmarks | true | 
| Apply Data Archives | true | 
| Apply Data Archives.Archive Chooser | [Auto-Detect] | 
| Apply Data Archives.Create Analysis Bookmarks | true | 
| Apply Data Archives.GDT User File Archive Path | None | 
| Apply Data Archives.User Project Archive Path | None | 
| Call Convention ID | true | 
| Call Convention ID.Analysis Decompiler Timeout (sec) | 60 | 
| Call-Fixup Installer | true | 
| Condense Filler Bytes | false | 
| Condense Filler Bytes.Filler Value | Auto | 
| Condense Filler Bytes.Minimum number of sequential bytes | 1 | 
| Create Address Tables | true | 
| Create Address Tables.Allow Offcut References | false | 
| Create Address Tables.Auto Label Table | false | 
| Create Address Tables.Create Analysis Bookmarks | true | 
| Create Address Tables.Maxmimum Pointer Distance | 16777215 | 
| Create Address Tables.Minimum Pointer Address | 4132 | 
| Create Address Tables.Minimum Table Size | 2 | 
| Create Address Tables.Pointer Alignment | 1 | 
| Create Address Tables.Relocation Table Guide | true | 
| Create Address Tables.Table Alignment | 4 | 
| Data Reference | true | 
| Data Reference.Address Table Alignment | 1 | 
| Data Reference.Address Table Minimum Size | 2 | 
| Data Reference.Align End of Strings | false | 
| Data Reference.Ascii String References | true | 
| Data Reference.Create Address Tables | true | 
| Data Reference.Minimum String Length | 5 | 
| Data Reference.References to Pointers | true | 
| Data Reference.Relocation Table Guide | true | 
| Data Reference.Respect Execute Flag | true | 
| Data Reference.Subroutine References | true | 
| Data Reference.Switch Table References | false | 
| Data Reference.Unicode String References | true | 
| Decompiler Parameter ID | true | 
| Decompiler Parameter ID.Analysis Clear Level | ANALYSIS | 
| Decompiler Parameter ID.Analysis Decompiler Timeout (sec) | 60 | 
| Decompiler Parameter ID.Commit Data Types | true | 
| Decompiler Parameter ID.Commit Void Return Values | false | 
| Decompiler Parameter ID.Prototype Evaluation | __fastcall | 
| Decompiler Switch Analysis | true | 
| Decompiler Switch Analysis.Analysis Decompiler Timeout (sec) | 60 | 
| Demangler Microsoft | true | 
| Demangler Microsoft.Apply Function Calling Conventions | true | 
| Demangler Microsoft.Apply Function Signatures | true | 
| Disassemble Entry Points | true | 
| Disassemble Entry Points.Respect Execute Flag | true | 
| Embedded Media | true | 
| Embedded Media.Create Analysis Bookmarks | true | 
| External Entry References | true | 
| Function ID | true | 
| Function ID.Always Apply FID Labels | false | 
| Function ID.Create Analysis Bookmarks | true | 
| Function ID.Instruction Count Threshold | 14.6 | 
| Function ID.Multiple Match Threshold | 30.0 | 
| Function Start Search | true | 
| Function Start Search.Bookmark Functions | false | 
| Function Start Search.Search Data Blocks | false | 
| Non-Returning Functions - Discovered | true | 
| Non-Returning Functions - Discovered.Create Analysis Bookmarks | true | 
| Non-Returning Functions - Discovered.Function Non-return Threshold | 3 | 
| Non-Returning Functions - Discovered.Repair Flow Damage | true | 
| Non-Returning Functions - Known | true | 
| Non-Returning Functions - Known.Create Analysis Bookmarks | true | 
| PDB MSDIA | false | 
| PDB MSDIA.Search remote symbol servers | false | 
| PDB Universal | true | 
| PDB Universal.Search remote symbol servers | false | 
| Reference | true | 
| Reference.Address Table Alignment | 1 | 
| Reference.Address Table Minimum Size | 2 | 
| Reference.Align End of Strings | false | 
| Reference.Ascii String References | true | 
| Reference.Create Address Tables | true | 
| Reference.Minimum String Length | 5 | 
| Reference.References to Pointers | true | 
| Reference.Relocation Table Guide | true | 
| Reference.Respect Execute Flag | true | 
| Reference.Subroutine References | true | 
| Reference.Switch Table References | false | 
| Reference.Unicode String References | true | 
| Scalar Operand References | true | 
| Scalar Operand References.Relocation Table Guide | true | 
| Shared Return Calls | true | 
| Shared Return Calls.Allow Conditional Jumps | false | 
| Shared Return Calls.Assume Contiguous Functions Only | false | 
| Stack | true | 
| Stack.Create Local Variables | true | 
| Stack.Create Param Variables | true | 
| Stack.useNewFunctionStackAnalysis | true | 
| Subroutine References | true | 
| Subroutine References.Create Thunks Early | true | 
| Variadic Function Signature Override | false | 
| Variadic Function Signature Override.Create Analysis Bookmarks | false | 
| Windows x86 PE Exception Handling | true | 
| Windows x86 PE RTTI Analyzer | true | 
| Windows x86 Thread Environment Block (TEB) Analyzer | true | 
| Windows x86 Thread Environment Block (TEB) Analyzer.Starting Address of the TEB | |
| Windows x86 Thread Environment Block (TEB) Analyzer.Windows OS Version | Windows 7 | 
| WindowsPE x86 Propagate External Parameters | false | 
| WindowsResourceReference | true | 
| WindowsResourceReference.Create Analysis Bookmarks | true | 
| x86 Constant Reference Analyzer | true | 
| x86 Constant Reference Analyzer.Create Data from pointer | false | 
| x86 Constant Reference Analyzer.Function parameter/return Pointer analysis | true | 
| x86 Constant Reference Analyzer.Max Threads | 2 | 
| x86 Constant Reference Analyzer.Min absolute reference | 4 | 
| x86 Constant Reference Analyzer.Require pointer param data type | false | 
| x86 Constant Reference Analyzer.Speculative reference max | 512 | 
| x86 Constant Reference Analyzer.Speculative reference min | 1024 | 
| x86 Constant Reference Analyzer.Stored Value Pointer analysis | true | 
| x86 Constant Reference Analyzer.Trust values read from writable memory | true | 
Ghidra ntoskrnl.exe.x64.10.0.22621.2861 Decompiler Options
| Decompiler Option | Value | 
|---|---|
| Prototype Evaluation | __fastcall | 
Ghidra ntoskrnl.exe.x64.10.0.22621.2861 Specification extensions Options
| Specification extensions Option | Value | 
|---|---|
| FormatVersion | 0 | 
| VersionCounter | 0 | 
Ghidra ntoskrnl.exe.x64.10.0.22621.2861 Analyzers Options
| Analyzers Option | Value | 
|---|---|
| ASCII Strings | true | 
| ASCII Strings.Create Strings Containing Existing Strings | true | 
| ASCII Strings.Create Strings Containing References | true | 
| ASCII Strings.Force Model Reload | false | 
| ASCII Strings.Minimum String Length | LEN_5 | 
| ASCII Strings.Model File | StringModel.sng | 
| ASCII Strings.Require Null Termination for String | true | 
| ASCII Strings.Search Only in Accessible Memory Blocks | true | 
| ASCII Strings.String Start Alignment | ALIGN_1 | 
| ASCII Strings.String end alignment | 4 | 
| Aggressive Instruction Finder | false | 
| Aggressive Instruction Finder.Create Analysis Bookmarks | true | 
| Apply Data Archives | true | 
| Apply Data Archives.Archive Chooser | [Auto-Detect] | 
| Apply Data Archives.Create Analysis Bookmarks | true | 
| Apply Data Archives.GDT User File Archive Path | None | 
| Apply Data Archives.User Project Archive Path | None | 
| Call Convention ID | true | 
| Call Convention ID.Analysis Decompiler Timeout (sec) | 60 | 
| Call-Fixup Installer | true | 
| Condense Filler Bytes | false | 
| Condense Filler Bytes.Filler Value | Auto | 
| Condense Filler Bytes.Minimum number of sequential bytes | 1 | 
| Create Address Tables | true | 
| Create Address Tables.Allow Offcut References | false | 
| Create Address Tables.Auto Label Table | false | 
| Create Address Tables.Create Analysis Bookmarks | true | 
| Create Address Tables.Maxmimum Pointer Distance | 16777215 | 
| Create Address Tables.Minimum Pointer Address | 4132 | 
| Create Address Tables.Minimum Table Size | 2 | 
| Create Address Tables.Pointer Alignment | 1 | 
| Create Address Tables.Relocation Table Guide | true | 
| Create Address Tables.Table Alignment | 4 | 
| Data Reference | true | 
| Data Reference.Address Table Alignment | 1 | 
| Data Reference.Address Table Minimum Size | 2 | 
| Data Reference.Align End of Strings | false | 
| Data Reference.Ascii String References | true | 
| Data Reference.Create Address Tables | true | 
| Data Reference.Minimum String Length | 5 | 
| Data Reference.References to Pointers | true | 
| Data Reference.Relocation Table Guide | true | 
| Data Reference.Respect Execute Flag | true | 
| Data Reference.Subroutine References | true | 
| Data Reference.Switch Table References | false | 
| Data Reference.Unicode String References | true | 
| Decompiler Parameter ID | true | 
| Decompiler Parameter ID.Analysis Clear Level | ANALYSIS | 
| Decompiler Parameter ID.Analysis Decompiler Timeout (sec) | 60 | 
| Decompiler Parameter ID.Commit Data Types | true | 
| Decompiler Parameter ID.Commit Void Return Values | false | 
| Decompiler Parameter ID.Prototype Evaluation | __fastcall | 
| Decompiler Switch Analysis | true | 
| Decompiler Switch Analysis.Analysis Decompiler Timeout (sec) | 60 | 
| Demangler Microsoft | true | 
| Demangler Microsoft.Apply Function Calling Conventions | true | 
| Demangler Microsoft.Apply Function Signatures | true | 
| Disassemble Entry Points | true | 
| Disassemble Entry Points.Respect Execute Flag | true | 
| Embedded Media | true | 
| Embedded Media.Create Analysis Bookmarks | true | 
| External Entry References | true | 
| Function ID | true | 
| Function ID.Always Apply FID Labels | false | 
| Function ID.Create Analysis Bookmarks | true | 
| Function ID.Instruction Count Threshold | 14.6 | 
| Function ID.Multiple Match Threshold | 30.0 | 
| Function Start Search | true | 
| Function Start Search.Bookmark Functions | false | 
| Function Start Search.Search Data Blocks | false | 
| Non-Returning Functions - Discovered | true | 
| Non-Returning Functions - Discovered.Create Analysis Bookmarks | true | 
| Non-Returning Functions - Discovered.Function Non-return Threshold | 3 | 
| Non-Returning Functions - Discovered.Repair Flow Damage | true | 
| Non-Returning Functions - Known | true | 
| Non-Returning Functions - Known.Create Analysis Bookmarks | true | 
| PDB MSDIA | false | 
| PDB MSDIA.Search remote symbol servers | false | 
| PDB Universal | true | 
| PDB Universal.Search remote symbol servers | false | 
| Reference | true | 
| Reference.Address Table Alignment | 1 | 
| Reference.Address Table Minimum Size | 2 | 
| Reference.Align End of Strings | false | 
| Reference.Ascii String References | true | 
| Reference.Create Address Tables | true | 
| Reference.Minimum String Length | 5 | 
| Reference.References to Pointers | true | 
| Reference.Relocation Table Guide | true | 
| Reference.Respect Execute Flag | true | 
| Reference.Subroutine References | true | 
| Reference.Switch Table References | false | 
| Reference.Unicode String References | true | 
| Scalar Operand References | true | 
| Scalar Operand References.Relocation Table Guide | true | 
| Shared Return Calls | true | 
| Shared Return Calls.Allow Conditional Jumps | false | 
| Shared Return Calls.Assume Contiguous Functions Only | false | 
| Stack | true | 
| Stack.Create Local Variables | true | 
| Stack.Create Param Variables | true | 
| Stack.useNewFunctionStackAnalysis | true | 
| Subroutine References | true | 
| Subroutine References.Create Thunks Early | true | 
| Variadic Function Signature Override | false | 
| Variadic Function Signature Override.Create Analysis Bookmarks | false | 
| Windows x86 PE Exception Handling | true | 
| Windows x86 PE RTTI Analyzer | true | 
| Windows x86 Thread Environment Block (TEB) Analyzer | true | 
| Windows x86 Thread Environment Block (TEB) Analyzer.Starting Address of the TEB | |
| Windows x86 Thread Environment Block (TEB) Analyzer.Windows OS Version | Windows 7 | 
| WindowsPE x86 Propagate External Parameters | false | 
| WindowsResourceReference | true | 
| WindowsResourceReference.Create Analysis Bookmarks | true | 
| x86 Constant Reference Analyzer | true | 
| x86 Constant Reference Analyzer.Create Data from pointer | false | 
| x86 Constant Reference Analyzer.Function parameter/return Pointer analysis | true | 
| x86 Constant Reference Analyzer.Max Threads | 2 | 
| x86 Constant Reference Analyzer.Min absolute reference | 4 | 
| x86 Constant Reference Analyzer.Require pointer param data type | false | 
| x86 Constant Reference Analyzer.Speculative reference max | 512 | 
| x86 Constant Reference Analyzer.Speculative reference min | 1024 | 
| x86 Constant Reference Analyzer.Stored Value Pointer analysis | true | 
| x86 Constant Reference Analyzer.Trust values read from writable memory | true | 
Diff Stats
| Stat | Value | 
|---|---|
| added_funcs_len | 0 | 
| deleted_funcs_len | 0 | 
| modified_funcs_len | 8 | 
| added_symbols_len | 11 | 
| deleted_symbols_len | 11 | 
| diff_time | 48.789085149765015 | 
| deleted_strings_len | 0 | 
| added_strings_len | 0 | 
| match_types | Counter({'SymbolsHash': 28092, 'ExactInstructionsFunctionHasher': 123, 'ExactBytesFunctionHasher': 116, 'ExactMnemonicsFunctionHasher': 25}) | 
| items_to_process | 30 | 
| diff_types | Counter({'address': 6, 'refcount': 6, 'code': 4, 'length': 4, 'name': 4, 'fullname': 4, 'sig': 4, 'calling': 4, 'called': 2}) | 
| unmatched_funcs_len | 0 | 
| total_funcs_len | 61106 | 
| matched_funcs_len | 61106 | 
| matched_funcs_with_code_changes_len | 4 | 
| matched_funcs_with_non_code_changes_len | 4 | 
| matched_funcs_no_changes_len | 61098 | 
| match_func_similarity_percent | 99.9869% | 
| func_match_overall_percent | 100.0000% | 
Strings
No string differences found
Deleted
Added
Modified
Modified functions contain code changes
KeQuerySpeculationControlInformation
Match Info
| Key | ntoskrnl.exe.x64.10.0.22621.2792 - ntoskrnl.exe.x64.10.0.22621.2861 | 
|---|---|
| diff_type | code,length,address | 
| ratio | 0.83 | 
| i_ratio | 0.71 | 
| m_ratio | 0.89 | 
| b_ratio | 0.9 | 
| match_types | SymbolsHash | 
Function Meta Diff
| Key | ntoskrnl.exe.x64.10.0.22621.2792 | ntoskrnl.exe.x64.10.0.22621.2861 | 
|---|---|---|
| name | KeQuerySpeculationControlInformation | KeQuerySpeculationControlInformation | 
| fullname | KeQuerySpeculationControlInformation | KeQuerySpeculationControlInformation | 
| refcount | 2 | 2 | 
length | 1136 | 1173 | 
| called | HvlQueryL1tfMitigationInformation KeKvaShadowingActive KiIsFbClearSupported RtlCopyMemory memset  | HvlQueryL1tfMitigationInformation KeKvaShadowingActive KiIsFbClearSupported RtlCopyMemory memset  | 
| calling | ExpQuerySystemInformation | ExpQuerySystemInformation | 
| paramcount | 3 | 3 | 
address | 1409727dc | 1409727bc | 
| sig | undefined8 __fastcall KeQuerySpeculationControlInformation(void * param_1, uint param_2, uint * param_3) | undefined8 __fastcall KeQuerySpeculationControlInformation(void * param_1, uint param_2, uint * param_3) | 
| sym_type | Function | Function | 
| sym_source | IMPORTED | IMPORTED | 
| external | False | False | 
KeQuerySpeculationControlInformation Diff
--- KeQuerySpeculationControlInformation
+++ KeQuerySpeculationControlInformation
@@ -1,130 +1,130 @@
 
 undefined8 KeQuerySpeculationControlInformation(void *param_1,uint param_2,uint *param_3)
 
 {
   ulonglong uVar1;
   char cVar2;
   bool bVar3;
   int iVar4;
   undefined7 extraout_var;
   uint uVar5;
   uint uVar6;
   ulonglong uVar7;
   ulonglong _Size;
   undefined8 local_res20;
   
   _Size = (ulonglong)param_2;
   if (param_2 < 4) {
     *param_3 = 8;
     return 0xc0000004;
   }
   if (7 < param_2) {
     param_2 = 8;
   }
   *param_3 = param_2;
   cVar2 = KiKvaShadow;
   uVar1 = KeFeatureBits2;
   uVar6 = (uint)(KiSpeculationFeatures >> 0x20);
   local_res20._4_4_ = 0;
   local_res20._0_4_ = uVar6 >> 4 & 1 ^ uVar6 >> 1 & 2 ^ uVar6 >> 1 & 4;
   if (((KiSpeculationFeatures & 0x10) != 0) || ((KiSpeculationFeatures & 0x40) != 0)) {
     local_res20._0_4_ = (uint)local_res20 | 8;
   }
   if ((KiSpeculationFeatures & 4) != 0) {
     local_res20._0_4_ = (uint)local_res20 | 0x10;
   }
   if (((KiSpeculationFeatures >> 0x24 & 1) != 0) && ((KiSpeculationFeatures & 0x2000000000) != 0)) {
     local_res20._0_4_ = (uint)local_res20 | 0x2000;
   }
   uVar6 = (uint)KiSpeculationFeatures;
   local_res20._0_4_ =
        (uVar6 * 4 & 0x80 | (uint)local_res20 ^ uVar6 * 2 & 0x20 ^ uVar6 & 0x40 | 0x100) ^
        (uint)(KiSpeculationFeatures << 2) & 0x200 ^ (uint)(KiSpeculationFeatures >> 0x1c) & 0x400 ^
        (uint)(KiSpeculationFeatures >> 0x1c) & 0x800 ^ ~(uint)(KiSpeculationFeatures << 4) & 0x1000
        ^ (uint)(KiSpeculationFeatures >> 0x1b) & 0x4000 ^
        (uint)(KiSpeculationFeatures >> 0x1b) & 0x8000;
   uVar6 = (uVar6 & 1 | 0x80) << 0x10 | (uint)(KeFeatureBits2 << 0x13) & 0x1000000 |
           (uint)local_res20;
   if ((KiKvaShadow == '\0') || (uVar5 = 0x26000000, (KeFeatureBits2 & 8) == 0)) {
     uVar5 = 0x24000000;
   }
   uVar7 = KeFeatureBits2 & 0x8000;
   if (((uVar7 == 0) || (KiDisableTsx == 0)) && (KiTsxSupported != 0)) {
     if (((KeFeatureBits2 >> 0x10 & 1) == 0) &&
        ((((byte)KeFeatureBits2 & 0x28) != 8 || (iVar4 = KeKvaShadowingActive(), iVar4 == 0)))) {
       if (uVar7 == 0) {
         local_res20._0_4_ = uVar6 | uVar5;
       }
       else {
         local_res20._0_4_ = uVar6 | uVar5 | 0x8000000;
       }
     }
     else {
       local_res20._0_4_ = uVar6 | uVar5 | 0x10000000;
     }
   }
   else {
     local_res20._0_4_ = uVar6 | uVar5 | 0x18000000;
   }
   if (((uVar1 >> 0x10 & 1) == 0) && (KiTsxSupportedAtBoot != 0)) {
     uVar6 = 0;
   }
   else {
     uVar6 = 0x40000000;
   }
   local_res20._0_4_ = (uint)local_res20 | uVar6;
   HvlQueryL1tfMitigationInformation((uint *)&local_res20);
   uVar6 = ((uint)(uVar1 >> 0x13) ^ local_res20._4_4_) & 7 ^ local_res20._4_4_;
-  if (cVar2 == '\0') {
-LAB_0:
-    uVar5 = 0x410;
-  }
-  else {
+  if (cVar2 != '\0') {
     bVar3 = KiIsFbClearSupported();
     uVar5 = 0x418;
-    if ((int)CONCAT71(extraout_var,bVar3) == 0) goto LAB_0;
+    if ((int)CONCAT71(extraout_var,bVar3) != 0) goto LAB_0;
   }
+  uVar5 = 0x410;
+LAB_0:
   if ((KiSpeculationFeatures >> 0xf & 1) == 0) {
     uVar5 = uVar6 & 0xfffffef7 | uVar5 | 0x200;
   }
   else if ((((KiSpeculationFeatures & 0x400000000) == 0) &&
            ((KiSpeculationFeatures & 0x2000000000) == 0)) &&
           ((KiSpeculationFeatures >> 0x2c & 1) == 0)) {
     if (((KiSpeculationFeatures & 0x800000000) == 0) && ((KiSpeculationFeatures >> 0x2d & 1) == 0))
     {
       uVar5 = uVar6 & 0xfffffff7 | uVar5 | 0x300;
     }
     else {
       uVar5 = uVar6 & 0xfffffcf7 | uVar5;
     }
   }
   else {
     uVar5 = uVar6 & 0xfffffdf7 | uVar5 | 0x100;
   }
   uVar6 = ((uint)(KeFeatureBits2 >> 4) & 1) << 0xc;
-  local_res20 = CONCAT44(uVar6 | uVar5 & 0xffffefff,(uint)local_res20);
-  if ((KiSpeculationFeatures >> 0x15 & 1) == 0) {
+  if ((KiSpeculationFeatures & 0x200000) == 0) {
     uVar6 = uVar6 | uVar5 & 0xfffbefff | 0xa0800;
   }
+  else if ((((KiSpeculationFeatures & 0x400000000) == 0) &&
+           ((KiSpeculationFeatures & 0x2000000000) == 0)) &&
+          ((KiSpeculationFeatures >> 0x2f & 1) == 0)) {
+    if (((KiSpeculationFeatures & 0x800000000) == 0) && ((KiSpeculationFeatures >> 0x30 & 1) == 0))
+    {
+      uVar6 = uVar6 | uVar5 & 0xffffefff | 0xe0800;
+    }
+    else {
+      uVar6 = uVar6 | uVar5 & 0xfff3efff | 0x20800;
+    }
+  }
   else {
-    if ((((KiSpeculationFeatures & 0x400000000) == 0) &&
-        ((KiSpeculationFeatures & 0x2000000000) == 0)) && ((KiSpeculationFeatures >> 0x2f & 1) == 0)
-       ) {
-      if (((KiSpeculationFeatures & 0x800000000) == 0) && ((KiSpeculationFeatures >> 0x30 & 1) == 0)
-         ) {
-        local_res20 = local_res20 | 0xe080000000000;
-      }
-      else {
-        local_res20 = local_res20 & 0xfff3ffffffffffff | 0x2080000000000;
-      }
-      goto LAB_1;
-    }
     uVar6 = uVar6 | uVar5 & 0xfff7efff | 0x60800;
   }
-  local_res20 = CONCAT44(uVar6,(uint)local_res20);
-LAB_1:
+  if ((KiSpeculationFeatures >> 0x16 & 1) == 0) {
+    local_res20 = CONCAT44(uVar6,(uint)local_res20) & 0xffdfffffffffffff | 0x10000000000000;
+  }
+  else {
+    local_res20 = CONCAT44(uVar6,(uint)local_res20) | 0x30000000000000;
+  }
   memset(param_1,0,_Size);
   RtlCopyMemory(param_1,&local_res20,(ulonglong)param_2);
   return 0;
 }
 
MiCreateFixupRecord
Match Info
| Key | ntoskrnl.exe.x64.10.0.22621.2792 - ntoskrnl.exe.x64.10.0.22621.2861 | 
|---|---|
| diff_type | code,refcount,length | 
| ratio | 0.24 | 
| i_ratio | 0.48 | 
| m_ratio | 0.69 | 
| b_ratio | 0.88 | 
| match_types | SymbolsHash | 
Function Meta Diff
| Key | ntoskrnl.exe.x64.10.0.22621.2792 | ntoskrnl.exe.x64.10.0.22621.2861 | 
|---|---|---|
| name | MiCreateFixupRecord | MiCreateFixupRecord | 
| fullname | MiCreateFixupRecord | MiCreateFixupRecord | 
refcount | 3 | 2 | 
length | 335 | 306 | 
| called | MiAllocatePool | MiAllocatePool | 
| calling | MiScanRelocationPage | MiScanRelocationPage | 
| paramcount | 7 | 7 | 
| address | 14083f464 | 14083f464 | 
| sig | undefined8 __fastcall MiCreateFixupRecord(longlong * param_1, longlong param_2, uint param_3, int param_4, int param_5, ushort * param_6, longlong * param_7) | undefined8 __fastcall MiCreateFixupRecord(longlong * param_1, longlong param_2, uint param_3, int param_4, int param_5, ushort * param_6, longlong * param_7) | 
| sym_type | Function | Function | 
| sym_source | IMPORTED | IMPORTED | 
| external | False | False | 
MiCreateFixupRecord Diff
--- MiCreateFixupRecord
+++ MiCreateFixupRecord
@@ -1,53 +1,55 @@
 
 undefined8
 MiCreateFixupRecord(longlong *param_1,longlong param_2,uint param_3,int param_4,int param_5,
                    ushort *param_6,longlong *param_7)
 
 {
   ulonglong *puVar1;
   ushort uVar2;
-  longlong *plVar3;
-  undefined8 uVar4;
-  ulonglong local_28;
+  undefined8 uVar3;
+  longlong *plVar4;
+  ulonglong local_res8;
   
-  local_28 = 0;
-  uVar2 = *param_6;
-  if ((param_3 & 0xfff) < 0x1000U - param_4) {
-    if (*(uint *)(*param_1 + 8) <= param_3 + 0x1000 >> 0xc) {
-      return 0xc0000005;
-    }
-    if (param_5 == 4) {
-      local_28 = (ulonglong)*(uint *)((ulonglong)param_3 + param_2);
+  if (param_3 + 0x1000 >> 0xc < *(uint *)(*param_1 + 8)) {
+    local_res8 = 0;
+    uVar2 = *param_6;
+    if ((param_3 & 0xfff) < 0x1000U - param_4) {
+      if (param_5 == 4) {
+        local_res8 = (ulonglong)*(uint *)((ulonglong)param_3 + param_2);
+      }
+      else {
+        local_res8 = *(ulonglong *)((ulonglong)param_3 + param_2);
+      }
     }
     else {
-      local_28 = *(ulonglong *)((ulonglong)param_3 + param_2);
+      *param_6 = uVar2 & 0xfff;
+    }
+    plVar4 = (longlong *)MiAllocatePool(0x100,0x20,0x72466d4d);
+    if (plVar4 == (longlong *)0x0) {
+      uVar3 = 0xc000009a;
+    }
+    else {
+      *(ushort *)(plVar4 + 2) = uVar2 >> 0xc;
+      *(uint *)((longlong)plVar4 + 0xc) = param_3 + param_5;
+      if ((param_3 & 0xfff) < 0x1000U - param_4) {
+        *(uint *)(plVar4 + 1) = param_3;
+        plVar4[3] = local_res8;
+        puVar1 = (ulonglong *)(*param_7 + (ulonglong)(param_3 >> 0xc) * 8);
+        *puVar1 = *puVar1 | 1;
+      }
+      else {
+        *(uint *)(plVar4 + 1) = (param_3 & 0xfffff000) + 0x1000;
+      }
+      puVar1 = (ulonglong *)(*param_7 + (ulonglong)(*(uint *)((longlong)plVar4 + 0xc) >> 0xc) * 8);
+      *puVar1 = *puVar1 | 1;
+      *plVar4 = param_7[2];
+      param_7[2] = (longlong)plVar4;
+      uVar3 = 0;
     }
   }
   else {
-    *param_6 = uVar2 & 0xfff;
+    uVar3 = 0xc0000005;
   }
-  plVar3 = (longlong *)MiAllocatePool(0x100,0x20,0x72466d4d);
-  if (plVar3 == (longlong *)0x0) {
-    uVar4 = 0xc000009a;
-  }
-  else {
-    *(ushort *)(plVar3 + 2) = uVar2 >> 0xc;
-    *(uint *)((longlong)plVar3 + 0xc) = param_3 + param_5;
-    if ((param_3 & 0xfff) < 0x1000U - param_4) {
-      *(uint *)(plVar3 + 1) = param_3;
-      plVar3[3] = local_28;
-      puVar1 = (ulonglong *)(*param_7 + (ulonglong)(param_3 >> 0xc) * 8);
-      *puVar1 = *puVar1 | 1;
-    }
-    else {
-      *(uint *)(plVar3 + 1) = (param_3 & 0xfffff000) + 0x1000;
-    }
-    puVar1 = (ulonglong *)(*param_7 + (ulonglong)(*(uint *)((longlong)plVar3 + 0xc) >> 0xc) * 8);
-    *puVar1 = *puVar1 | 1;
-    *plVar3 = param_7[2];
-    param_7[2] = (longlong)plVar3;
-    uVar4 = 0;
-  }
-  return uVar4;
+  return uVar3;
 }
 
KiSetHardwareSpeculationControlFeatures
Match Info
| Key | ntoskrnl.exe.x64.10.0.22621.2792 - ntoskrnl.exe.x64.10.0.22621.2861 | 
|---|---|
| diff_type | code,refcount,length | 
| ratio | 0.89 | 
| i_ratio | 0.57 | 
| m_ratio | 0.75 | 
| b_ratio | 0.92 | 
| match_types | SymbolsHash | 
Function Meta Diff
| Key | ntoskrnl.exe.x64.10.0.22621.2792 | ntoskrnl.exe.x64.10.0.22621.2861 | 
|---|---|---|
| name | KiSetHardwareSpeculationControlFeatures | KiSetHardwareSpeculationControlFeatures | 
| fullname | KiSetHardwareSpeculationControlFeatures | KiSetHardwareSpeculationControlFeatures | 
refcount | 3 | 2 | 
length | 232 | 233 | 
| called | KeBugCheckEx KiDetectHardwareSpecControlFeatures  | KeBugCheckEx KiDetectHardwareSpecControlFeatures  | 
| calling | KiInitializeKernel | KiInitializeKernel | 
| paramcount | 4 | 4 | 
| address | 1403816cc | 1403816cc | 
| sig | undefined __fastcall KiSetHardwareSpeculationControlFeatures(longlong param_1, undefined8 param_2, ulonglong param_3, longlong param_4) | undefined __fastcall KiSetHardwareSpeculationControlFeatures(longlong param_1, undefined8 param_2, ulonglong param_3, longlong param_4) | 
| sym_type | Function | Function | 
| sym_source | IMPORTED | IMPORTED | 
| external | False | False | 
KiSetHardwareSpeculationControlFeatures Diff
--- KiSetHardwareSpeculationControlFeatures
+++ KiSetHardwareSpeculationControlFeatures
@@ -1,45 +1,48 @@
 
 /* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
 
 void KiSetHardwareSpeculationControlFeatures
                (longlong param_1,undefined8 param_2,ulonglong param_3,longlong param_4)
 
 {
   byte *pbVar1;
   undefined8 uVar2;
   ulonglong in_RDX;
   char local_res8 [32];
   undefined local_28 [16];
   undefined8 local_18;
   
   local_res8[0] = '\0';
   local_18 = 0;
   local_28 = ZEXT816(0);
   uVar2 = KiDetectHardwareSpecControlFeatures
                     (param_1,in_RDX,(undefined4 *)local_28,(longlong)local_res8);
   pbVar1 = (byte *)(param_1 + 0xf9);
   if ((local_28 & (undefined  [16])0x20) != (undefined  [16])0x0) {
     *pbVar1 = *pbVar1 | 4;
   }
   if (KiKernelCetEnabled != '\0') {
     *pbVar1 = *pbVar1 | 8;
   }
   if (*(int *)(param_1 + 0x24) == 0) {
     KiSpeculationFeatures = KiSpeculationFeatures & 0xffffffff00000000 | local_28._0_8_ & 0xffffffff
     ;
+    _DAT_0 = local_28._8_4_;
+    KiSsbdMsr = local_28._8_4_;
+    DAT_1 = local_18;
     _KiSsbdBit = local_18;
-    KiSsbdMsr = local_28._8_4_;
-    _DAT_0 = KiSsbdMsr;
-    DAT_1 = _KiSsbdBit;
     KiCpu0HardwareFlags = local_28._0_4_;
   }
   else if ((ulonglong)KiCpu0HardwareFlags != (local_28._0_8_ & 0xffffffff)) {
                     /* WARNING: Subroutine does not return */
     KeBugCheckEx(uVar2,param_2,param_3,param_4,(ushort *)0x0);
   }
   if (local_res8[0] != '\0') {
     KiMicrocodeTrackerEnabled = 1;
   }
+  if (((ulonglong)local_28._0_8_ >> 0x16 & 1) != 0) {
+    *(byte *)(param_1 + 0xf8) = *(byte *)(param_1 + 0xf8) | 0x80;
+  }
   return;
 }
 
KiDetectHardwareSpecControlFeatures
Match Info
| Key | ntoskrnl.exe.x64.10.0.22621.2792 - ntoskrnl.exe.x64.10.0.22621.2861 | 
|---|---|
| diff_type | code,length,address | 
| ratio | 0.94 | 
| i_ratio | 0.71 | 
| m_ratio | 0.99 | 
| b_ratio | 0.89 | 
| match_types | SymbolsHash | 
Function Meta Diff
| Key | ntoskrnl.exe.x64.10.0.22621.2792 | ntoskrnl.exe.x64.10.0.22621.2861 | 
|---|---|---|
| name | KiDetectHardwareSpecControlFeatures | KiDetectHardwareSpecControlFeatures | 
| fullname | KiDetectHardwareSpecControlFeatures | KiDetectHardwareSpecControlFeatures | 
| refcount | 4 | 4 | 
length | 947 | 961 | 
| called | HviGetEnlightenmentInformation HviGetHypervisorFeatures HviIsAnyHypervisorPresent HviIsHypervisorMicrosoftCompatible KiIsBranchConfusionPresent KiIsSrsoPresent __security_check_cookie  | HviGetEnlightenmentInformation HviGetHypervisorFeatures HviIsAnyHypervisorPresent HviIsHypervisorMicrosoftCompatible KiIsBranchConfusionPresent KiIsSrsoPresent __security_check_cookie  | 
| calling | KiDetermineRetpolineEnablement KiIsKvaShadowNeededForBranchConfusion KiSetHardwareSpeculationControlFeatures  | KiDetermineRetpolineEnablement KiIsKvaShadowNeededForBranchConfusion KiSetHardwareSpeculationControlFeatures  | 
| paramcount | 4 | 4 | 
address | 1403822ec | 14038235c | 
| sig | undefined __fastcall KiDetectHardwareSpecControlFeatures(longlong param_1, ulonglong param_2, undefined4 * param_3, longlong param_4) | undefined __fastcall KiDetectHardwareSpecControlFeatures(longlong param_1, ulonglong param_2, undefined4 * param_3, longlong param_4) | 
| sym_type | Function | Function | 
| sym_source | IMPORTED | IMPORTED | 
| external | False | False | 
KiDetectHardwareSpecControlFeatures Diff
--- KiDetectHardwareSpecControlFeatures
+++ KiDetectHardwareSpecControlFeatures
@@ -1,240 +1,244 @@
 
-/* WARNING: Removing unreachable block (ram,0x0001403823fa) */
-/* WARNING: Removing unreachable block (ram,0x0001403823e1) */
-/* WARNING: Removing unreachable block (ram,0x000140382372) */
-/* WARNING: Removing unreachable block (ram,0x00014038233a) */
+/* WARNING: Removing unreachable block (ram,0x00014038246a) */
+/* WARNING: Removing unreachable block (ram,0x000140382451) */
+/* WARNING: Removing unreachable block (ram,0x0001403823e2) */
+/* WARNING: Removing unreachable block (ram,0x0001403823aa) */
 
 void KiDetectHardwareSpecControlFeatures
                (longlong param_1,ulonglong param_2,undefined4 *param_3,longlong param_4)
 
 {
   char cVar1;
   byte bVar2;
   uint *puVar3;
   undefined8 *puVar4;
   undefined4 *puVar5;
   bool bVar6;
   undefined auVar7 [16];
   char cVar8;
   uint uVar9;
   undefined7 extraout_var;
   ulonglong uVar10;
   ulonglong uVar11;
   bool bVar12;
   bool bVar13;
   bool bVar14;
   undefined auStack_a8 [32];
   undefined8 local_88;
   undefined4 uStack_80;
   undefined4 uStack_7c;
   undefined8 local_78;
   undefined4 *local_70;
   undefined local_68 [4];
   undefined auStack_64 [8];
   undefined4 uStack_5c;
   undefined local_58 [16];
   ulonglong local_48;
   
   local_48 = __security_cookie ^ (ulonglong)auStack_a8;
   cVar1 = *(char *)(param_1 + 0x8d);
   uVar10 = 0;
   uStack_7c = 0;
   bVar2 = *(byte *)(param_1 + 0x43);
   local_88 = 0;
   puVar3 = (uint *)cpuid_basic_info(0);
   uStack_80 = 0x48;
   bVar13 = false;
   local_78 = 4;
   bVar12 = false;
   auVar7._4_4_ = puVar3[3];
   auVar7._0_4_ = puVar3[1];
   auVar7._8_4_ = puVar3[2];
   auVar7._12_4_ = 0;
   _local_68 = auVar7 << 0x20;
   local_58 = ZEXT816(0);
   if (*puVar3 < 7) {
     uVar9 = 0;
   }
   else {
     puVar4 = (undefined8 *)cpuid_Extended_Feature_Enumeration_info(7);
     uVar9 = *(uint *)(puVar4 + 1);
     auStack_64._4_4_ = *(undefined4 *)((longlong)puVar4 + 0xc);
     _local_68 = *puVar4;
     uStack_5c = puVar3[2];
     if ((uVar9 >> 0x1d & 1) != 0) {
       uVar11 = rdmsr(0x10a);
       bVar12 = (uVar11 & 2) != 0;
       if (bVar12) {
         uVar10 = 0x201;
         local_88 = 0x201;
       }
       bVar13 = (uVar11 & 0x10) != 0;
       if (bVar13) {
         uVar10 = uVar10 | 0x100;
         local_88 = uVar10;
       }
       bVar13 = bVar13 || bVar12;
       if ((uVar11 & 4) != 0) {
         uVar10 = uVar10 | 0x200;
         bVar13 = true;
         local_88 = uVar10;
       }
     }
   }
   if (cVar1 == '\x01') {
     puVar3 = (uint *)cpuid(0x80000000);
     auStack_64._0_4_ = puVar3[1];
     auStack_64._4_4_ = puVar3[3];
     uStack_5c = puVar3[2];
     if (*puVar3 < 0x80000008) {
       uVar9 = 0;
     }
     else {
       puVar5 = (undefined4 *)cpuid(0x80000008);
       uVar9 = puVar5[1];
       local_68 = (undefined  [4])*puVar5;
       auStack_64._4_4_ = puVar5[3];
       uStack_5c = puVar5[2];
     }
     if ((uVar9 >> 0xc & 1) != 0) {
       uVar10 = uVar10 | 4;
       bVar13 = true;
       local_88 = uVar10;
     }
     if ((uVar9 >> 0xe & 1) != 0) {
       uVar10 = uVar10 | 0x10;
       bVar13 = true;
       local_88 = uVar10;
     }
     if ((uVar9 >> 0xf & 1) != 0) {
       uVar10 = uVar10 | 0x40;
       bVar13 = true;
       local_88 = uVar10;
     }
     if ((uVar9 >> 0x18 & 1) != 0) {
       uVar10 = uVar10 | 0x80;
       local_88 = uVar10;
     }
     if ((uVar9 >> 0x1a & 1) != 0) {
       uVar10 = uVar10 | 0x180;
       local_88 = uVar10;
     }
     if ((local_88 & 0x80) != 0) {
 LAB_0:
       bVar13 = true;
     }
   }
   else {
     if ((uVar9 >> 0x1a & 1) != 0) {
       uVar10 = uVar10 | 0x14;
       bVar13 = true;
       local_88 = uVar10;
     }
     if ((uVar9 >> 0x1b & 1) != 0) {
       uVar10 = uVar10 | 0x44;
       bVar13 = true;
       local_88 = uVar10;
     }
     if ((int)uVar9 < 0) {
       uVar10 = uVar10 | 0x80;
       local_88 = uVar10;
       goto LAB_0;
     }
   }
   if (((param_2 & 1) != 0) || (KiKvaShadowMode == 1)) {
     uVar10 = uVar10 | 0x20;
     local_88 = uVar10;
   }
   if ((cVar1 == '\x02') && (*(char *)(param_1 + 0x40) == '\x06')) {
     if ((((byte)(bVar2 - 0x4e) < 0x1a) && ((0x3010081U >> (bVar2 - 0x4e & 0x1f) & 1) != 0)) ||
        ((bVar2 == 0x8e || (bVar2 == 0x9e)))) {
       uVar10 = uVar10 | 0x200;
       local_88 = uVar10;
     }
     if (((byte)(bVar2 - 0x37) < 0x3f) &&
        ((0x4080404800680001U >> ((ulonglong)(byte)(bVar2 - 0x37) & 0x3f) & 1) != 0)) {
       uVar10 = uVar10 | 0x200;
       local_88 = uVar10;
     }
   }
   uVar11 = uVar10;
   local_70 = param_3;
   if (((local_88 & 0x10) == 0) || ((local_88 & 4) == 0)) goto LAB_1;
   bVar6 = true;
   cVar8 = HviIsHypervisorMicrosoftCompatible();
   if (cVar8 == '\0') {
     cVar8 = HviIsAnyHypervisorPresent();
     bVar14 = cVar8 == '\0';
 LAB_2:
     if (!bVar14) goto LAB_3;
     bVar6 = false;
 LAB_4:
     uVar9 = *(uint *)(param_1 + 0x6cc);
     if ((uVar9 & 2) != 0) {
       uVar11 = uVar10 | 0x400;
       local_88 = uVar11;
     }
     uVar10 = uVar11;
     if (((uVar9 & 4) != 0) &&
        (uVar10 = uVar11 | 0x800, local_88 = uVar10, (KiFeatureSettings & 0x4000) != 0)) {
       uVar10 = uVar11 | 0x801;
       local_88 = uVar10;
     }
     if (cVar1 == '\x02') {
       if (((!bVar6) && (!bVar12)) || (uVar11 = uVar10, (uVar9 & 3) != 0)) {
         uVar11 = uVar10 | 0x1000;
         local_88 = uVar11;
       }
       goto LAB_1;
     }
   }
   else {
     HviGetEnlightenmentInformation((undefined8 *)local_58);
     _local_68 = ZEXT816(0);
     HviGetHypervisorFeatures((undefined8 *)local_68);
     if ((_local_68 & (undefined  [16])0x100000000000) != (undefined  [16])0x0) {
       bVar14 = (local_58 & (undefined  [16])0x1000) == (undefined  [16])0x0;
       goto LAB_2;
     }
 LAB_3:
     if ((KiFeatureSettings & 0x8000) != 0) goto LAB_4;
   }
   uVar11 = uVar10;
   if ((cVar1 == '\x01') && (uVar11 = uVar10 | 0x1000, local_88 = uVar11, (uVar10 & 0x40) != 0)) {
     uVar11 = uVar10 | 0x5000;
     local_88 = uVar11;
   }
 LAB_1:
   if (((KeFeatureBits2 & 0x20000) != 0) && ((KiFeatureSettings & 0x400000) == 0)) {
     uVar11 = uVar11 | 0x2000;
     local_88 = uVar11;
   }
   bVar12 = KiIsBranchConfusionPresent(param_1);
   if ((int)CONCAT71(extraout_var,bVar12) != 0) {
     uVar11 = uVar11 | 0x8000;
     local_88 = uVar11;
   }
   if ((cVar1 != '\x01') || ((KeFeatureBits2 & 0x2000000) != 0)) {
     uVar11 = uVar11 | 8;
     local_88 = uVar11;
   }
   if ((KiFeatureSettings & 0x10000) != 0) {
     uVar11 = uVar11 & 0xfffffffffffff7fe;
     local_88 = uVar11;
   }
   uVar9 = KiIsSrsoPresent(param_1);
   if (uVar9 != 0) {
-    local_88 = uVar11 | 0x200000;
+    uVar11 = uVar11 | 0x200000;
+    local_88 = uVar11;
+  }
+  if (cVar1 == '\x01') {
+    local_88 = uVar11 | 0x400000;
   }
   *local_70 = (undefined4)local_88;
   local_70[1] = local_88._4_4_;
   local_70[2] = uStack_80;
   local_70[3] = uStack_7c;
   *(undefined8 *)(local_70 + 4) = local_78;
   if (param_4 != 0) {
     *(bool *)param_4 = bVar13;
   }
   __security_check_cookie(local_48 ^ (ulonglong)auStack_a8);
   return;
 }
 
Modified (No Code Changes)
Slightly modified functions have no code changes, rather differnces in:
- refcount
 - length
 - called
 - calling
 - name
 - fullname
 
MiKvaRangeSort
Match Info
| Key | ntoskrnl.exe.x64.10.0.22621.2792 - ntoskrnl.exe.x64.10.0.22621.2861 | 
|---|---|
| diff_type | name,fullname,refcount,sig,address,calling | 
| ratio | 1.0 | 
| i_ratio | 0.9 | 
| m_ratio | 1.0 | 
| b_ratio | 1.0 | 
| match_types | ExactMnemonicsFunctionHasher | 
Function Meta Diff
| Key | ntoskrnl.exe.x64.10.0.22621.2792 | ntoskrnl.exe.x64.10.0.22621.2861 | 
|---|---|---|
name | MiKvaRangeSort | FUN_1403e12e0 | 
fullname | MiKvaRangeSort | FUN_1403e12e0 | 
refcount | 4 | 3 | 
| length | 24 | 24 | 
| called | ||
calling | HalpChannelInitializeStaticConfiguration VslInitializeSecureKernelCfg  | FUN_1403e12b0 | 
| paramcount | 2 | 2 | 
address | 140b90ba0 | 1403e12e0 | 
sig | ulonglong __fastcall MiKvaRangeSort(ulonglong * param_1, ulonglong * param_2) | ulonglong __fastcall FUN_1403e12e0(ulonglong * param_1, ulonglong * param_2) | 
| sym_type | Function | Function | 
| sym_source | IMPORTED | DEFAULT | 
| external | False | False | 
MiKvaRangeSort Calling Diff
--- MiKvaRangeSort calling
+++ FUN_1403e12e0 calling
@@ -1,2 +1 @@
-HalpChannelInitializeStaticConfiguration
-VslInitializeSecureKernelCfg
+FUN_1403e12b0
Generated with ghidriff version: 0.5.1 on 2023-12-13T16:46:33