# tapisrv-7623.dll-tapisrv-8036.dll Diff

# TOC

* [Visual Chart Diff](#visual-chart-diff)
* [Metadata](#metadata)
	* [Ghidra Diff Engine](#ghidra-diff-engine)
		* [Command Line](#command-line)
	* [Binary Metadata Diff](#binary-metadata-diff)
	* [Program Options](#program-options)
	* [Diff Stats](#diff-stats)
	* [Strings](#strings)
* [Deleted](#deleted)
* [Added](#added)
	* [Feature_3967746362__private_IsEnabledDeviceUsageNoInline](#feature_3967746362__private_isenableddeviceusagenoinline)
* [Modified](#modified)
	* [LForward](#lforward)
	* [Feature_2464883000__private_IsEnabledDeviceUsageNoInline](#feature_2464883000__private_isenableddeviceusagenoinline)
	* [wil_details_FeatureReporting_ReportUsageToServiceDirect](#wil_details_featurereporting_reportusagetoservicedirect)
	* [wil_details_FeatureReporting_ReportUsageToService](#wil_details_featurereporting_reportusagetoservice)
	* [wil_details_IsEnabledFallback](#wil_details_isenabledfallback)
	* [wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath](#wil_details_featurestatecache_tryenabledeviceusagefastpath)
* [Modified (No Code Changes)](#modified-no-code-changes)

# Visual Chart Diff



```mermaid

flowchart LR

LForward-4-old<--Match 37%-->LForward-4-new
Feature_2464883000__private_IsEnabledDeviceUsageNoInline-0-old<--Match 96%-->Feature_2464883000__private_IsEnabledDeviceUsageNoInline-0-new
wil_details_FeatureReporting_ReportUsageToServiceDirect-3-old<--Match 93%-->wil_details_FeatureReporting_ReportUsageToServiceDirect-3-new
wil_details_FeatureReporting_ReportUsageToService-3-old<--Match 94%-->wil_details_FeatureReporting_ReportUsageToService-3-new
wil_details_IsEnabledFallback-2-old<--Match 94%-->wil_details_IsEnabledFallback-2-new
wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath-2-old<--Match 90%-->wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath-2-new

subgraph tapisrv-8036.dll
    LForward-4-new
Feature_2464883000__private_IsEnabledDeviceUsageNoInline-0-new
wil_details_FeatureReporting_ReportUsageToServiceDirect-3-new
wil_details_FeatureReporting_ReportUsageToService-3-new
wil_details_IsEnabledFallback-2-new
wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath-2-new
    subgraph Added
direction LR
Feature_3967746362__private_IsEnabledDeviceUsageNoInline
end
end

subgraph tapisrv-7623.dll
    LForward-4-old
Feature_2464883000__private_IsEnabledDeviceUsageNoInline-0-old
wil_details_FeatureReporting_ReportUsageToServiceDirect-3-old
wil_details_FeatureReporting_ReportUsageToService-3-old
wil_details_IsEnabledFallback-2-old
wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath-2-old
    
end

```


```mermaid
pie showData
    title Function Matches - 99.9506%
"unmatched_funcs_len" : 1
"matched_funcs_len" : 2024
```



```mermaid
pie showData
    title Matched Function Similarity - 99.7036%
"matched_funcs_with_code_changes_len" : 6
"matched_funcs_with_non_code_changes_len" : 0
"matched_funcs_no_changes_len" : 2018
```

# Metadata

## Ghidra Diff Engine

### Command Line

#### Captured Command Line


```
ghidriff --project-location ./proj --project-name tapisrv-25188 --symbols-path symbols --gzfs-path gzfs --threaded --log-level INFO --file-log-level INFO --log-path ghidriff.log --min-func-len 10 --gdt [] --bsim --max-ram-percent 60.0 --max-section-funcs 200 tapisrv-7623.dll tapisrv-8036.dll
```


#### Verbose Args


<details>

```
--old ['tapisrv-7623.dll'] --new [['tapisrv-8036.dll']] --engine VersionTrackingDiff --output-path ./out --summary False --project-location ./proj --project-name tapisrv-25188 --symbols-path symbols --gzfs-path gzfs --base-address None --program-options None --threaded True --force-analysis False --force-diff False --no-symbols False --log-level INFO --file-log-level INFO --log-path ghidriff.log --va False --min-func-len 10 --use-calling-counts False --gdt [] --bsim True --bsim-full False --max-ram-percent 60.0 --print-flags False --jvm-args None --side-by-side False --max-section-funcs 200 --md-title None
```


</details>

#### Download Original PEs


```
wget https://msdl.microsoft.com/download/symbols/TAPISRV.EXE/BBD1B1D35D000/TAPISRV.EXE -O tapisrv.exe.x64.10.0.26100.7623
wget https://msdl.microsoft.com/download/symbols/TAPISRV.EXE/4F04028F5D000/TAPISRV.EXE -O tapisrv.exe.x64.10.0.26100.8036
```


## Binary Metadata Diff


```diff
--- tapisrv-7623.dll Meta
+++ tapisrv-8036.dll Meta
@@ -1,44 +1,44 @@
-Program Name: tapisrv-7623.dll
+Program Name: tapisrv-8036.dll
 Language ID: x86:LE:64:default (4.6)
 Compiler ID: windows
 Processor: x86
 Endian: Little
 Address Size: 64
 Minimum Address: 180000000
 Maximum Address: ff0000184f
-# of Bytes: 383960
+# of Bytes: 384000
 # of Memory Blocks: 10
-# of Instructions: 63663
-# of Defined Data: 3564
-# of Functions: 1012
-# of Symbols: 11942
+# of Instructions: 63731
+# of Defined Data: 3571
+# of Functions: 1013
+# of Symbols: 11954
 # of Data Types: 772
 # of Data Type Categories: 43
 Analyzed: true
 Compiler: visualstudio:unknown
 Created With Ghidra Version: 12.0.4
-Date Created: Sat Aug 15 23:07:48 SGT 2026
+Date Created: Sat Aug 15 23:07:52 SGT 2026
 Executable Format: Portable Executable (PE)
-Executable Location: /sessions/fervent-laughing-brahmagupta/mnt/patchpalooza/ghidriff/tapisrv-25188/tapisrv-7623.dll
-Executable MD5: 1fa02996c650e49f83e8cbcfb031d75b
-Executable SHA256: 3eda9356b2b1dbc9af6b3ea719536e05ba4011f82bbc12aff0cbb0a37b0efeb2
-FSRL: file:///sessions/fervent-laughing-brahmagupta/mnt/patchpalooza/ghidriff/tapisrv-25188/tapisrv-7623.dll?MD5=1fa02996c650e49f83e8cbcfb031d75b
+Executable Location: /sessions/fervent-laughing-brahmagupta/mnt/patchpalooza/ghidriff/tapisrv-25188/tapisrv-8036.dll
+Executable MD5: 2d9199c96bd80239f4006578a3e29b63
+Executable SHA256: 2f6946261b077051b3626b946a94e64b80b7360eef015cbd454b5f2d656bf1ec
+FSRL: file:///sessions/fervent-laughing-brahmagupta/mnt/patchpalooza/ghidriff/tapisrv-25188/tapisrv-8036.dll?MD5=2d9199c96bd80239f4006578a3e29b63
 PDB Age: 1
 PDB File: tapisrv.pdb
-PDB GUID: 885fb278-ac13-771b-c619-3c110739f78d
+PDB GUID: 2510ca8f-dacd-fab6-c642-5486b3d64089
 PDB Loaded: true
 PDB Version: RSDS
 PE Property[CompanyName]: Microsoft Corporation
 PE Property[FileDescription]: Microsoft® Windows(TM) Telephony Server
-PE Property[FileVersion]: 10.0.26100.7623 (WinBuild.160101.0800)
+PE Property[FileVersion]: 10.0.26100.8036 (WinBuild.160101.0800)
 PE Property[InternalName]: Telephony Service
 PE Property[LegalCopyright]: © Microsoft Corporation. All rights reserved.
 PE Property[OriginalFilename]: TAPISRV.EXE
 PE Property[ProductName]: Microsoft® Windows® Operating System
-PE Property[ProductVersion]: 10.0.26100.7623
+PE Property[ProductVersion]: 10.0.26100.8036
 PE Property[Translation]: 4b00409
 Preferred Root Namespace Category: 
 RTTI Found: false
 Relocatable: true
 SectionAlignment: 4096
 Should Ask To Analyze: false

```


## Program Options


<details>
<summary>Ghidra tapisrv-7623.dll Decompiler Options</summary>


|Decompiler Option|Value|
| :---: | :---: |
|Prototype Evaluation|__fastcall|

</details>


<details>
<summary>Ghidra tapisrv-7623.dll Specification extensions Options</summary>


|Specification extensions Option|Value|
| :---: | :---: |
|FormatVersion|0|
|VersionCounter|0|

</details>


<details>
<summary>Ghidra tapisrv-7623.dll Analyzers Options</summary>


|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|
|Demangler Microsoft.C-Style Symbol Interpretation|FUNCTION_IF_EXISTS|
|Demangler Microsoft.Demangle Only Known Mangled Symbols|false|
|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 untrusted symbol servers|false|
|PDB Universal|true|
|PDB Universal.Import Source Line Info|true|
|PDB Universal.Search untrusted 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|true|
|Stack|true|
|Stack.Create Local Variables|true|
|Stack.Create Param Variables|false|
|Stack.Max Threads|2|
|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|256|
|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|

</details>


<details>
<summary>Ghidra tapisrv-8036.dll Decompiler Options</summary>


|Decompiler Option|Value|
| :---: | :---: |
|Prototype Evaluation|__fastcall|

</details>


<details>
<summary>Ghidra tapisrv-8036.dll Specification extensions Options</summary>


|Specification extensions Option|Value|
| :---: | :---: |
|FormatVersion|0|
|VersionCounter|0|

</details>


<details>
<summary>Ghidra tapisrv-8036.dll Analyzers Options</summary>


|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|
|Demangler Microsoft.C-Style Symbol Interpretation|FUNCTION_IF_EXISTS|
|Demangler Microsoft.Demangle Only Known Mangled Symbols|false|
|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 untrusted symbol servers|false|
|PDB Universal|true|
|PDB Universal.Import Source Line Info|true|
|PDB Universal.Search untrusted 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|true|
|Stack|true|
|Stack.Create Local Variables|true|
|Stack.Create Param Variables|false|
|Stack.Max Threads|2|
|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|256|
|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|

</details>

## Diff Stats



|Stat|Value|
| :---: | :---: |
|added_funcs_len|1|
|deleted_funcs_len|0|
|modified_funcs_len|6|
|added_symbols_len|5|
|deleted_symbols_len|1|
|diff_time|4.337409973144531|
|deleted_strings_len|0|
|added_strings_len|0|
|match_types|Counter({'SymbolsHash': 1006, 'ExternalsName': 231, 'ExactBytesFunctionHasher': 2, 'SigCallingCalledHasher': 2, 'ExactInstructionsFunctionHasher': 1})|
|items_to_process|13|
|diff_types|Counter({'code': 6, 'length': 6, 'address': 6, 'sig': 4, 'called': 1, 'refcount': 1, 'calling': 1})|
|unmatched_funcs_len|1|
|total_funcs_len|2025|
|matched_funcs_len|2024|
|matched_funcs_with_code_changes_len|6|
|matched_funcs_with_non_code_changes_len|0|
|matched_funcs_no_changes_len|2018|
|match_func_similarity_percent|99.7036%|
|func_match_overall_percent|99.9506%|
|first_matches|Counter({'SymbolsHash': 1006, 'ExactBytesFunctionHasher': 2, 'SigCallingCalledHasher': 2, 'ExactInstructionsFunctionHasher': 1})|



```mermaid
pie showData
    title All Matches
"SymbolsHash" : 1006
"ExternalsName" : 231
"ExactBytesFunctionHasher" : 2
"ExactInstructionsFunctionHasher" : 1
"SigCallingCalledHasher" : 2
```



```mermaid
pie showData
    title First Matches
"SymbolsHash" : 1006
"ExactBytesFunctionHasher" : 2
"ExactInstructionsFunctionHasher" : 1
"SigCallingCalledHasher" : 2
```



```mermaid
pie showData
    title Diff Stats
"added_funcs_len" : 1
"deleted_funcs_len" : 0
"modified_funcs_len" : 6
```



```mermaid
pie showData
    title Symbols
"added_symbols_len" : 5
"deleted_symbols_len" : 1
```

## Strings


*No string differences found*

# Deleted

# Added

## Feature_3967746362__private_IsEnabledDeviceUsageNoInline

### Function Meta



|Key|tapisrv-8036.dll|
| :---: | :---: |
|name|Feature_3967746362__private_IsEnabledDeviceUsageNoInline|
|fullname|Feature_3967746362__private_IsEnabledDeviceUsageNoInline|
|refcount|3|
|length|51|
|called|wil_details_IsEnabledFallback|
|calling|LForward|
|paramcount|0|
|address|18000699c|
|sig|uint __fastcall Feature_3967746362__private_IsEnabledDeviceUsageNoInline(void)|
|sym_type|Function|
|sym_source|IMPORTED|
|external|False|


```diff
--- Feature_3967746362__private_IsEnabledDeviceUsageNoInline
+++ Feature_3967746362__private_IsEnabledDeviceUsageNoInline
@@ -0,0 +1,15 @@
+
+uint Feature_3967746362__private_IsEnabledDeviceUsageNoInline(void)
+
+{
+  uint uVar1;
+  ulonglong local_res8;
+  
+  local_res8 = (ulonglong)Feature_3967746362__private_featureState;
+  if ((Feature_3967746362__private_featureState & 0x10) != 0) {
+    return Feature_3967746362__private_featureState & 1;
+  }
+  uVar1 = wil_details_IsEnabledFallback(local_res8,3,&Feature_3967746362__private_descriptor);
+  return uVar1;
+}
+

```


# Modified


*Modified functions contain code changes*
## LForward

### Match Info



|Key|tapisrv-7623.dll - tapisrv-8036.dll|
| :---: | :---: |
|diff_type|code,length,address,called|
|ratio|0.25|
|i_ratio|0.39|
|m_ratio|0.95|
|b_ratio|0.37|
|match_types|SymbolsHash|

### Function Meta Diff



|Key|tapisrv-7623.dll|tapisrv-8036.dll|
| :---: | :---: | :---: |
|name|LForward|LForward|
|fullname|LForward|LForward|
|refcount|3|3|
|`length`|1502|1656|
|`called`|<details><summary>Expand for full list:<br>CreatetCallAndClient<br>IsBadSizeOffset<br>IsBadStructParam<br>KERNEL32.DLL::HeapAlloc<br>KERNEL32.DLL::MultiByteToWideChar<br>LineEpilogAsync<br>LineProlog<br>NewToOldLineforwardlist<br>OldToNewLineforwardlist<br>ServerFree<br>SetDrvCallFlags</summary>TRACELogPrint<br>ValidateCallParams<br>_guard_dispatch_icall$thunk$10345483385596137414<br>memcpy</details>|<details><summary>Expand for full list:<br>CreatetCallAndClient<br>Feature_3967746362__private_IsEnabledDeviceUsageNoInline<br>IsBadSizeOffset<br>IsBadStructParam<br>KERNEL32.DLL::HeapAlloc<br>KERNEL32.DLL::MultiByteToWideChar<br>LineEpilogAsync<br>LineProlog<br>NewToOldLineforwardlist<br>OldToNewLineforwardlist<br>ServerFree</summary>SetDrvCallFlags<br>TRACELogPrint<br>ValidateCallParams<br>_guard_dispatch_icall$thunk$10345483385596137414<br>memcpy</details>|
|calling|||
|paramcount|4|4|
|`address`|18000a750|18000a790|
|sig|undefined __fastcall LForward(longlong param_1, uint * param_2, uint param_3, longlong param_4)|undefined __fastcall LForward(longlong param_1, uint * param_2, uint param_3, longlong param_4)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|False|False|

### LForward Called Diff


```diff
--- LForward called
+++ LForward called
@@ -1,0 +2 @@
+Feature_3967746362__private_IsEnabledDeviceUsageNoInline
```


### LForward Diff


```diff
--- LForward
+++ LForward
@@ -1,248 +1,278 @@
 
 /* WARNING: Function: _guard_dispatch_icall$thunk$10345483385596137414 replaced with injection:
    guard_dispatch_icall */
 
 void LForward(longlong param_1,uint *param_2,uint param_3,longlong param_4)
 
 {
   uint uVar1;
-  uint uVar2;
+  bool bVar2;
   uint uVar3;
-  bool bVar4;
-  uint uVar5;
-  uint uVar6;
-  undefined8 uVar7;
+  uint uVar4;
+  undefined8 uVar5;
   undefined7 extraout_var;
   undefined7 extraout_var_00;
   uint *_Dst;
-  ulonglong uVar8;
-  uint *puVar9;
-  ulonglong uVar10;
-  ulonglong uVar11;
-  uint uVar12;
-  int *piVar13;
+  ulonglong uVar6;
+  uint *puVar7;
+  uint uVar8;
+  ulonglong uVar9;
+  uint uVar10;
+  uint uVar11;
+  int *piVar12;
+  uint *puVar13;
   uint *puVar14;
   uint *puVar15;
-  uint *puVar16;
-  uint local_b4;
-  uint local_ac;
-  int *local_a8;
-  uint *local_a0;
-  uint local_98;
-  uint local_94;
-  uint local_90;
-  int local_8c;
+  uint local_d8;
+  uint local_cc;
+  uint local_c4;
+  uint local_c0 [2];
+  int *local_b8;
+  uint local_b0;
+  int local_ac;
+  ulonglong local_a8;
+  uint local_a0;
+  uint local_9c;
+  ulonglong local_98;
+  uint *local_90;
   uint local_88;
-  uint local_84;
-  uint *local_80;
-  uint local_78;
+  longlong local_80;
+  longlong local_78;
   longlong local_70;
-  longlong local_68;
-  longlong local_60;
-  undefined8 local_58;
-  code *local_50;
-  HANDLE local_48 [2];
+  undefined8 local_68;
+  code *local_60;
+  HANDLE local_58 [4];
   
-  puVar14 = (uint *)0x0;
-  local_8c = 0x28;
-  local_84 = 0;
-  uVar12 = 0x20;
-  local_48[0] = (HANDLE)0x0;
-  local_58 = 0;
-  local_50 = (code *)0x0;
-  local_88 = 0;
-  local_a8 = (int *)0x0;
+  puVar13 = (uint *)0x0;
+  local_ac = 0x28;
+  local_9c = 0;
+  local_58[0] = (HANDLE)0x0;
+  local_68 = 0;
+  local_60 = (code *)0x0;
+  local_a0 = 0;
+  local_b8 = (int *)0x0;
+  local_80 = 0;
+  local_cc = 0x20;
+  uVar3 = LineProlog(param_1,2,(ulonglong)param_2[4],(uint *)&local_68,0,local_58,&local_9c,0xe,
+                     (longlong *)&local_60,&local_80,param_2[2],&local_a0,&local_b8);
+  local_88 = uVar3;
+  if ((int)uVar3 < 1) goto LAB_0;
+  uVar4 = param_2[7];
   local_70 = 0;
-  local_b4 = 0x20;
-  uVar5 = LineProlog(param_1,2,(ulonglong)param_2[4],(uint *)&local_58,0,local_48,&local_84,0xe,
-                     (longlong *)&local_50,&local_70,param_2[2],&local_88,&local_a8);
-  local_78 = uVar5;
-  if ((int)uVar5 < 1) goto LAB_0;
-  uVar1 = param_2[7];
-  local_60 = 0;
-  local_ac = 0;
-  local_68 = 0;
-  local_80 = (uint *)0x0;
-  puVar16 = puVar14;
-  if (uVar1 == 0xffffffff) {
+  local_c0[0] = 0;
+  local_78 = 0;
+  local_90 = (uint *)0x0;
+  puVar15 = puVar13;
+  if (uVar4 == 0xffffffff) {
 LAB_1:
     if ((param_2[10] == 0xffffffff) ||
-       (uVar7 = IsBadStructParam(param_3,param_4,param_2[10]), (int)uVar7 == 0)) {
-      uVar10 = 0xffffffff;
-      uVar1 = local_a8[0xf];
-      uVar2 = *(uint *)(*(longlong *)(local_a8 + 8) + 0xd8);
-      if (*local_a8 != 0x494c434c) {
-        uVar5 = 0x8000002b;
+       (uVar5 = IsBadStructParam(param_3,param_4,param_2[10]), (int)uVar5 == 0)) {
+      uVar4 = local_b8[0xf];
+      uVar1 = *(uint *)(*(longlong *)(local_b8 + 8) + 0xd8);
+      if (*local_b8 != 0x494c434c) {
+        uVar3 = 0x8000002b;
         goto LAB_0;
       }
-      if ((*(uint *)(*(longlong *)(local_a8 + 4) + 0x30) < 0x30001) || (uVar1 < 0x30001)) {
-        local_b4 = 0x18;
-        local_8c = 0x20;
+      if ((*(uint *)(*(longlong *)(local_b8 + 4) + 0x30) < 0x30001) || (uVar4 < 0x30001)) {
+        uVar6 = 0x20;
+        local_ac = 0x20;
+        uVar10 = 0x18;
+        local_cc = 0x18;
       }
       else {
-        uVar12 = 0x28;
-      }
-      _Dst = puVar14;
-      puVar9 = puVar16;
-      piVar13 = local_a8;
-      if (puVar16 == (uint *)0x0) goto LAB_2;
-      local_90 = *puVar16;
-      local_a0 = puVar16 + 2;
-      if (local_90 < uVar12) goto LAB_3;
-      uVar3 = puVar16[1];
-      uVar8 = (ulonglong)uVar3;
-      if ((uVar3 & 0xffff0000) == 0) {
-        if (uVar3 == 0) {
-          uVar6 = 0;
+        uVar10 = 0x20;
+        uVar6 = 0x28;
+      }
+      _Dst = puVar13;
+      puVar7 = puVar15;
+      piVar12 = local_b8;
+      if (puVar15 == (uint *)0x0) goto LAB_2;
+      local_d8 = *puVar15;
+      puVar14 = puVar15 + 2;
+      local_c4 = 0;
+      if (local_d8 < (uint)uVar6) goto LAB_3;
+      uVar11 = puVar15[1];
+      local_a8 = CONCAT44(local_a8._4_4_,uVar11);
+      if ((uVar11 & 0xffff0000) == 0) {
+        if (uVar11 == 0) {
+          uVar10 = 0;
         }
         else {
-          uVar11 = (ulonglong)(uVar3 - 1) * (ulonglong)local_b4;
-          if (0xffffffff < uVar11) goto LAB_4;
-          uVar6 = (uint)uVar11;
+          uVar9 = (ulonglong)(uVar11 - 1) * (ulonglong)uVar10;
+          if (0xffffffff < uVar9) goto LAB_4;
+          uVar10 = (uint)uVar9;
         }
-        local_94 = uVar12 + uVar6;
-        if ((uVar6 <= local_94) && (local_94 <= local_90)) {
-          for (local_98 = 0; local_98 < uVar3; local_98 = local_98 + 1) {
-            uVar12 = *local_a0;
-            if (((uVar12 == 0) || ((uVar12 & uVar12 - 1) != 0)) ||
-               ((uVar12 & (-(uint)(uVar1 < 0x10004) & 0x30000) - 0x40000) != 0)) {
-              TRACELogPrint(0x10002,"LFoward: bad dwForwardMode, x%x",(ulonglong)uVar12,uVar10);
-              goto LAB_4;
-            }
-            bVar4 = IsBadSizeOffset(local_90,local_94,(ulonglong)local_a0[1],local_a0[2],0);
-            if ((int)CONCAT71(extraout_var,bVar4) != 0) goto LAB_4;
-            uVar10 = (ulonglong)local_a0[5];
-            bVar4 = IsBadSizeOffset(local_90,local_94,(ulonglong)local_a0[4],local_a0[5],0);
-            if ((int)CONCAT71(extraout_var_00,bVar4) != 0) goto LAB_4;
-            local_a0 = (uint *)((longlong)local_a0 + (ulonglong)local_b4);
-          }
-          if ((param_2[0xb] != 0xffffffff) && (_Dst = (uint *)0x0, uVar3 != 0)) {
-            if (0xffffffff < (ulonglong)local_90 * 2) goto LAB_4;
-            _Dst = HeapAlloc(ghTapisrvHeap,8,(ulonglong)local_90 * 2 & 0xffffffff);
+        uVar8 = uVar10 + (uint)uVar6;
+        if ((uVar10 <= uVar8) && (uVar8 <= local_d8)) {
+          local_98 = CONCAT44(local_98._4_4_,(-(uint)(uVar4 < 0x10004) & 0x30000) - 0x40000);
+          uVar10 = Feature_3967746362__private_IsEnabledDeviceUsageNoInline();
+          if (uVar10 != 0) {
+            local_c4 = uVar8;
+          }
+          local_b0 = 0;
+          if (uVar11 != 0) {
+            do {
+              uVar10 = *puVar14;
+              if (((uVar10 == 0) || ((uVar10 & uVar10 - 1) != 0)) ||
+                 (((uint)local_98 & uVar10) != 0)) {
+                TRACELogPrint(0x10002,"LFoward: bad dwForwardMode, x%x",(ulonglong)uVar10,uVar6);
+                goto LAB_4;
+              }
+              bVar2 = IsBadSizeOffset(local_d8,uVar8,(ulonglong)puVar14[1],puVar14[2],0);
+              if ((int)CONCAT71(extraout_var,bVar2) != 0) goto LAB_4;
+              uVar6 = (ulonglong)puVar14[5];
+              bVar2 = IsBadSizeOffset(local_d8,uVar8,(ulonglong)puVar14[4],puVar14[5],0);
+              if ((int)CONCAT71(extraout_var_00,bVar2) != 0) goto LAB_4;
+              uVar10 = Feature_3967746362__private_IsEnabledDeviceUsageNoInline();
+              if (uVar10 != 0) {
+                if ((((puVar14[2] == puVar14[5]) && (puVar14[1] == puVar14[4])) &&
+                    (uVar10 = puVar14[4] + local_d8, bVar2 = uVar10 < local_d8, local_d8 = uVar10,
+                    bVar2)) || (uVar10 = puVar14[1] + local_c4, uVar10 < local_c4))
+                goto LAB_4;
+                local_c4 = puVar14[4] + uVar10;
+                uVar6 = (ulonglong)local_c4;
+                if ((local_c4 < uVar10) || (local_d8 < local_c4)) goto LAB_4;
+              }
+              puVar14 = (uint *)((longlong)puVar14 + (ulonglong)local_cc);
+              local_b0 = local_b0 + 1;
+            } while (local_b0 < uVar11);
+          }
+          if ((param_2[0xb] != 0xffffffff) && (_Dst = (uint *)0x0, uVar11 != 0)) {
+            uVar6 = (ulonglong)local_d8 * 2;
+            if (0xffffffff < uVar6) goto LAB_4;
+            _Dst = HeapAlloc(ghTapisrvHeap,8,uVar6 & 0xffffffff);
             if (_Dst == (uint *)0x0) {
-              uVar5 = 0x80000044;
+              uVar3 = 0x80000044;
               goto LAB_0;
             }
-            puVar15 = _Dst + 2;
-            uVar12 = (uVar3 - 1) * local_b4 + local_8c;
-            memcpy(_Dst,puVar16,(ulonglong)uVar12);
-            *_Dst = *_Dst * 2;
-            puVar9 = _Dst;
-            if (uVar3 != 0) {
+            puVar14 = _Dst + 2;
+            uVar11 = ((int)local_a8 + -1) * local_cc + local_ac;
+            memcpy(_Dst,puVar15,(ulonglong)uVar11);
+            uVar10 = Feature_3967746362__private_IsEnabledDeviceUsageNoInline();
+            if (uVar10 == 0) {
+              *_Dst = *_Dst * 2;
+            }
+            else {
+              *_Dst = (uint)uVar6;
+            }
+            uVar6 = local_a8 & 0xffffffff;
+            puVar7 = _Dst;
+            if ((int)local_a8 != 0) {
+              uVar9 = (ulonglong)local_cc;
+              local_a8 = uVar9;
               do {
-                uVar5 = puVar15[1];
-                local_a0 = (uint *)uVar8;
-                if (uVar5 != 0) {
+                uVar3 = puVar14[1];
+                local_98 = uVar6;
+                if (uVar3 != 0) {
                   MultiByteToWideChar(param_2[0xb],1,
-                                      (LPCSTR)((ulonglong)puVar15[2] + (longlong)puVar16),uVar5,
-                                      (LPWSTR)((ulonglong)uVar12 + (longlong)_Dst),uVar5);
-                  uVar5 = puVar15[1];
-                  puVar15[2] = uVar12;
-                  puVar15[1] = uVar5 * 2;
-                  uVar12 = uVar12 + uVar5 * 2;
-                }
-                uVar5 = puVar15[4];
-                if (uVar5 != 0) {
+                                      (LPCSTR)((ulonglong)puVar14[2] + (longlong)puVar15),uVar3,
+                                      (LPWSTR)((ulonglong)uVar11 + (longlong)_Dst),uVar3);
+                  puVar14[2] = uVar11;
+                  uVar11 = uVar11 + puVar14[1] * 2;
+                  puVar14[1] = puVar14[1] * 2;
+                  uVar9 = local_a8;
+                }
+                uVar3 = puVar14[4];
+                if (uVar3 != 0) {
                   MultiByteToWideChar(param_2[0xb],1,
-                                      (LPCSTR)((ulonglong)puVar15[5] + (longlong)puVar16),uVar5,
-                                      (LPWSTR)((ulonglong)uVar12 + (longlong)_Dst),uVar5);
-                  uVar5 = puVar15[4];
-                  puVar15[5] = uVar12;
-                  puVar15[4] = uVar5 * 2;
-                  uVar12 = uVar12 + uVar5 * 2;
-                }
-                puVar15 = (uint *)((longlong)puVar15 + (ulonglong)local_b4);
-                uVar8 = (longlong)local_a0 - 1;
-              } while (uVar8 != 0);
-              local_a0 = (uint *)0x0;
-              uVar5 = local_78;
-            }
-          }
-          piVar13 = local_a8;
-          if (uVar2 < 0x30001) {
-            if ((uVar1 < 0x30001) || (*(uint *)(*(longlong *)(local_a8 + 4) + 0x30) < 0x30001))
+                                      (LPCSTR)((ulonglong)puVar14[5] + (longlong)puVar15),uVar3,
+                                      (LPWSTR)((ulonglong)uVar11 + (longlong)_Dst),uVar3);
+                  puVar14[5] = uVar11;
+                  uVar11 = uVar11 + puVar14[4] * 2;
+                  puVar14[4] = puVar14[4] * 2;
+                  uVar9 = local_a8;
+                }
+                puVar14 = (uint *)((longlong)puVar14 + uVar9);
+                uVar6 = local_98 - 1;
+              } while (uVar6 != 0);
+              local_98 = 0;
+              uVar3 = local_88;
+            }
+          }
+          piVar12 = local_b8;
+          if (uVar1 < 0x30001) {
+            if ((uVar4 < 0x30001) || (*(uint *)(*(longlong *)(local_b8 + 4) + 0x30) < 0x30001))
             goto LAB_2;
-            puVar9 = NewToOldLineforwardlist(puVar9);
+            puVar7 = NewToOldLineforwardlist(puVar7);
 LAB_5:
-            puVar14 = puVar9;
-            if (puVar9 != (uint *)0x0) goto LAB_2;
-            uVar5 = 0x80000044;
+            puVar13 = puVar7;
+            if (puVar7 != (uint *)0x0) goto LAB_2;
+            uVar3 = 0x80000044;
           }
           else {
-            puVar14 = (uint *)0x0;
-            if ((uVar1 < 0x30001) && (*(uint *)(*(longlong *)(local_a8 + 4) + 0x30) < 0x30001)) {
-              puVar9 = OldToNewLineforwardlist(puVar9);
+            puVar13 = (uint *)0x0;
+            if ((uVar4 < 0x30001) && (*(uint *)(*(longlong *)(local_b8 + 4) + 0x30) < 0x30001)) {
+              puVar7 = OldToNewLineforwardlist(puVar7);
               goto LAB_5;
             }
 LAB_2:
             if (param_2[10] == 0xffffffff) {
-              puVar16 = (uint *)0x0;
+              puVar15 = (uint *)0x0;
 LAB_6:
-              local_80 = (uint *)0x0;
+              local_90 = (uint *)0x0;
 LAB_7:
-              uVar10 = CreatetCallAndClient
-                                 (piVar13,&local_60,&local_68,(longlong)local_80,&local_ac);
-              if ((int)uVar10 == 0) {
-                *(code **)(local_70 + 0x30) = LMakeCall_PostProcess;
-                *(ulonglong *)(local_70 + 0x18) =
+              uVar6 = CreatetCallAndClient(piVar12,&local_70,&local_78,(longlong)local_90,local_c0);
+              if ((int)uVar6 == 0) {
+                *(code **)(local_80 + 0x30) = LMakeCall_PostProcess;
+                *(ulonglong *)(local_80 + 0x18) =
                      (ulonglong)
-                     *(uint *)(*(longlong *)(*(longlong *)(local_68 + 0x10) + 0x20) + 0xd0);
-                *(longlong *)(local_70 + 0x50) = local_60;
-                *(ulonglong *)(local_70 + 0x58) = (ulonglong)param_2[9];
-                *(undefined8 *)(local_70 + 0x60) = 1;
-                *(ulonglong *)(local_70 + 0x70) = (ulonglong)local_ac;
-                *(uint *)(local_70 + 0x44) = param_2[3];
-                uVar12 = (*local_50)(*(undefined4 *)(local_70 + 0x48),local_58,param_2[5],param_2[6]
-                                     ,puVar9,param_2[8],(ulonglong)local_ac,local_60 + 0x28,local_80
-                                    );
-                *param_2 = uVar12;
-                if (((int)uVar12 < 0) || ((0x80000061 < uVar12 && (0x24 < uVar12 + 0x6fffffff)))) {
-                  uVar12 = 1;
+                     *(uint *)(*(longlong *)(*(longlong *)(local_78 + 0x10) + 0x20) + 0xd0);
+                *(longlong *)(local_80 + 0x50) = local_70;
+                *(ulonglong *)(local_80 + 0x58) = (ulonglong)param_2[9];
+                *(undefined8 *)(local_80 + 0x60) = 1;
+                *(ulonglong *)(local_80 + 0x70) = (ulonglong)local_c0[0];
+                *(uint *)(local_80 + 0x44) = param_2[3];
+                uVar4 = (*local_60)(*(undefined4 *)(local_80 + 0x48),local_68,param_2[5],param_2[6],
+                                    puVar7,param_2[8],(ulonglong)local_c0[0],local_70 + 0x28,
+                                    local_90);
+                *param_2 = uVar4;
+                if (((int)uVar4 < 0) || ((0x80000061 < uVar4 && (0x24 < uVar4 + 0x6fffffff)))) {
+                  uVar4 = 1;
                 }
                 else {
-                  uVar12 = 3;
-                }
-                SetDrvCallFlags((ulonglong)local_ac,uVar12);
+                  uVar4 = 3;
+                }
+                SetDrvCallFlags((ulonglong)local_c0[0],uVar4);
               }
               else {
-                uVar5 = 0x80000044;
-              }
-              uVar12 = uVar5;
-              if (local_80 != puVar16) {
-                ServerFree(local_80);
+                uVar3 = 0x80000044;
+              }
+              uVar4 = uVar3;
+              if (local_90 != puVar15) {
+                ServerFree(local_90);
               }
             }
             else {
-              puVar16 = (uint *)((ulonglong)param_2[10] + param_4);
-              if (puVar16 == (uint *)0x0) goto LAB_6;
-              uVar12 = ValidateCallParams(puVar16,&local_80,uVar1,uVar2,param_2[0xb]);
-              if (uVar12 == 0) goto LAB_7;
-            }
-            uVar5 = uVar12;
-            if (puVar14 != (uint *)0x0) {
-              ServerFree(puVar14);
+              puVar15 = (uint *)((ulonglong)param_2[10] + param_4);
+              if (puVar15 == (uint *)0x0) goto LAB_6;
+              uVar4 = ValidateCallParams(puVar15,&local_90,uVar4,uVar1,param_2[0xb]);
+              if (uVar4 == 0) goto LAB_7;
+            }
+            uVar3 = uVar4;
+            if (puVar13 != (uint *)0x0) {
+              ServerFree(puVar13);
             }
           }
           if (_Dst != (uint *)0x0) {
             ServerFree(_Dst);
           }
           goto LAB_0;
         }
       }
 LAB_4:
-      uVar5 = 0x80000032;
+      uVar3 = 0x80000032;
       goto LAB_0;
     }
   }
   else {
-    uVar7 = IsBadStructParam(param_3,param_4,uVar1);
-    puVar16 = (uint *)(param_4 + (ulonglong)uVar1);
-    if ((int)uVar7 == 0) goto LAB_1;
+    uVar5 = IsBadStructParam(param_3,param_4,uVar4);
+    puVar15 = (uint *)((ulonglong)uVar4 + param_4);
+    if ((int)uVar5 == 0) goto LAB_1;
   }
 LAB_3:
-  uVar5 = 0x8000004d;
+  uVar3 = 0x8000004d;
 LAB_0:
-  LineEpilogAsync(param_2,uVar5,local_48[0],(ulonglong)local_84,local_70,local_88);
+  LineEpilogAsync(param_2,uVar3,local_58[0],(ulonglong)local_9c,local_80,local_a0);
   return;
 }
 

```


## Feature_2464883000__private_IsEnabledDeviceUsageNoInline

### Match Info



|Key|tapisrv-7623.dll - tapisrv-8036.dll|
| :---: | :---: |
|diff_type|code,length,address|
|ratio|0.75|
|i_ratio|0.61|
|m_ratio|0.96|
|b_ratio|0.96|
|match_types|SymbolsHash|

### Function Meta Diff



|Key|tapisrv-7623.dll|tapisrv-8036.dll|
| :---: | :---: | :---: |
|name|Feature_2464883000__private_IsEnabledDeviceUsageNoInline|Feature_2464883000__private_IsEnabledDeviceUsageNoInline|
|fullname|Feature_2464883000__private_IsEnabledDeviceUsageNoInline|Feature_2464883000__private_IsEnabledDeviceUsageNoInline|
|refcount|1|1|
|`length`|44|51|
|called|wil_details_IsEnabledFallback|wil_details_IsEnabledFallback|
|calling|ClientAttach|ClientAttach|
|paramcount|0|0|
|`address`|180029f04|18002a9e4|
|sig|uint __fastcall Feature_2464883000__private_IsEnabledDeviceUsageNoInline(void)|uint __fastcall Feature_2464883000__private_IsEnabledDeviceUsageNoInline(void)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|False|False|

### Feature_2464883000__private_IsEnabledDeviceUsageNoInline Diff


```diff
--- Feature_2464883000__private_IsEnabledDeviceUsageNoInline
+++ Feature_2464883000__private_IsEnabledDeviceUsageNoInline
@@ -1,15 +1,15 @@
 
 uint Feature_2464883000__private_IsEnabledDeviceUsageNoInline(void)
 
 {
   uint uVar1;
-  undefined8 local_res8;
+  ulonglong local_res8;
   
-  local_res8 = (undefined4 *)(ulonglong)Feature_2464883000__private_featureState;
+  local_res8 = (ulonglong)Feature_2464883000__private_featureState;
   if ((Feature_2464883000__private_featureState & 0x10) != 0) {
     return Feature_2464883000__private_featureState & 1;
   }
-  uVar1 = wil_details_IsEnabledFallback(local_res8,3);
+  uVar1 = wil_details_IsEnabledFallback(local_res8,3,&Feature_2464883000__private_descriptor);
   return uVar1;
 }
 

```


## wil_details_FeatureReporting_ReportUsageToServiceDirect

### Match Info



|Key|tapisrv-7623.dll - tapisrv-8036.dll|
| :---: | :---: |
|diff_type|code,length,sig,address|
|ratio|0.44|
|i_ratio|0.66|
|m_ratio|0.96|
|b_ratio|0.93|
|match_types|SymbolsHash|

### Function Meta Diff



|Key|tapisrv-7623.dll|tapisrv-8036.dll|
| :---: | :---: | :---: |
|name|wil_details_FeatureReporting_ReportUsageToServiceDirect|wil_details_FeatureReporting_ReportUsageToServiceDirect|
|fullname|wil_details_FeatureReporting_ReportUsageToServiceDirect|wil_details_FeatureReporting_ReportUsageToServiceDirect|
|refcount|2|2|
|`length`|137|127|
|called|__security_check_cookie<br>wil_RtlStagingConfig_RecordFeatureUsage<br>wil_details_FeatureReporting_RecordUsageInCache|__security_check_cookie<br>wil_RtlStagingConfig_RecordFeatureUsage<br>wil_details_FeatureReporting_RecordUsageInCache|
|calling|wil_details_FeatureReporting_ReportUsageToService|wil_details_FeatureReporting_ReportUsageToService|
|paramcount|3|3|
|`address`|1800320a4|180020e2c|
|`sig`|bool __fastcall wil_details_FeatureReporting_ReportUsageToServiceDirect(undefined8 param_1, undefined8 param_2, undefined8 param_3)|bool __fastcall wil_details_FeatureReporting_ReportUsageToServiceDirect(longlong param_1, undefined8 param_2, undefined8 param_3)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|False|False|

### wil_details_FeatureReporting_ReportUsageToServiceDirect Diff


```diff
--- wil_details_FeatureReporting_ReportUsageToServiceDirect
+++ wil_details_FeatureReporting_ReportUsageToServiceDirect
@@ -1,24 +1,24 @@
 
 /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
 
 bool wil_details_FeatureReporting_ReportUsageToServiceDirect
-               (undefined8 param_1,undefined8 param_2,undefined8 param_3)
+               (longlong param_1,undefined8 param_2,undefined8 param_3)
 
 {
   uint *puVar1;
-  undefined1 auStack_78 [48];
-  uint local_48 [10];
-  undefined8 local_20;
-  ulonglong local_18;
+  undefined1 auStack_88 [48];
+  uint local_58 [10];
+  undefined8 local_30;
+  ulonglong local_28;
   
-  local_18 = __security_cookie ^ (ulonglong)auStack_78;
+  local_28 = __security_cookie ^ (ulonglong)auStack_88;
   puVar1 = wil_details_FeatureReporting_RecordUsageInCache
-                     (local_48,(uint *)&Feature_2464883000__private_reporting,param_3,
-                      (uint)((ulonglong)param_2 >> 0x20));
-  local_20 = *(undefined8 *)(puVar1 + 4);
+                     (local_58,*(uint **)(param_1 + 8),param_3,(uint)((ulonglong)param_2 >> 0x20));
+  local_30 = *(undefined8 *)(puVar1 + 4);
   if ((((uint)param_2 >> 10 & 1) != 0) && ((int)param_3 != 0xfe)) {
-    wil_RtlStagingConfig_RecordFeatureUsage(0x394e47a,(short)param_3,(uint)param_2 >> 0xb & 1);
+    wil_RtlStagingConfig_RecordFeatureUsage
+              (*(undefined4 *)(param_1 + 0x18),(short)param_3,(uint)param_2 >> 0xb & 1);
   }
-  return (int)local_20 == 0;
+  return (int)local_30 == 0;
 }
 

```


## wil_details_FeatureReporting_ReportUsageToService

### Match Info



|Key|tapisrv-7623.dll - tapisrv-8036.dll|
| :---: | :---: |
|diff_type|code,length,sig,address|
|ratio|0.63|
|i_ratio|0.53|
|m_ratio|0.94|
|b_ratio|0.94|
|match_types|SymbolsHash|

### Function Meta Diff



|Key|tapisrv-7623.dll|tapisrv-8036.dll|
| :---: | :---: | :---: |
|name|wil_details_FeatureReporting_ReportUsageToService|wil_details_FeatureReporting_ReportUsageToService|
|fullname|wil_details_FeatureReporting_ReportUsageToService|wil_details_FeatureReporting_ReportUsageToService|
|refcount|2|2|
|`length`|114|125|
|called|_guard_dispatch_icall$thunk$10345483385596137414<br>wil_details_FeatureReporting_ReportUsageToServiceDirect<br>wil_details_MapReportingKind|_guard_dispatch_icall$thunk$10345483385596137414<br>wil_details_FeatureReporting_ReportUsageToServiceDirect<br>wil_details_MapReportingKind|
|calling|wil_details_IsEnabledFallback|wil_details_IsEnabledFallback|
|paramcount|3|3|
|`address`|180032028|180020da8|
|`sig`|undefined __fastcall wil_details_FeatureReporting_ReportUsageToService(undefined8 param_1, undefined8 param_2, uint param_3)|undefined __fastcall wil_details_FeatureReporting_ReportUsageToService(longlong param_1, undefined8 param_2, int param_3)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|False|False|

### wil_details_FeatureReporting_ReportUsageToService Diff


```diff
--- wil_details_FeatureReporting_ReportUsageToService
+++ wil_details_FeatureReporting_ReportUsageToService
@@ -1,28 +1,27 @@
 
 /* WARNING: Function: _guard_dispatch_icall$thunk$10345483385596137414 replaced with injection:
    guard_dispatch_icall */
 
 void wil_details_FeatureReporting_ReportUsageToService
-               (undefined8 param_1,undefined8 param_2,uint param_3)
+               (longlong param_1,undefined8 param_2,int param_3)
 
 {
   bool bVar1;
   uint uVar2;
   undefined7 extraout_var;
-  ulonglong uVar3;
-  uint uVar4;
-  uint local_res18 [4];
+  uint uVar3;
+  int local_res18 [4];
   
-  uVar4 = (uint)param_2 & 1;
-  uVar3 = (ulonglong)param_3;
+  uVar3 = (uint)param_2 & 1;
   local_res18[0] = param_3;
-  uVar2 = wil_details_MapReportingKind(param_3,uVar4);
-  bVar1 = wil_details_FeatureReporting_ReportUsageToServiceDirect(uVar3,param_2,(ulonglong)uVar2);
+  uVar2 = wil_details_MapReportingKind(param_3,uVar3);
+  bVar1 = wil_details_FeatureReporting_ReportUsageToServiceDirect(param_1,param_2,(ulonglong)uVar2);
   if (((int)CONCAT71(extraout_var,bVar1) != 0) &&
      (g_wil_details_pfnFeatureLoggingHook != (code *)0x0)) {
     (*g_wil_details_pfnFeatureLoggingHook)
-              (0x394e47a,&Feature_2464883000_logged_traits,0,uVar4,local_res18,0,0,1);
+              (*(undefined4 *)(param_1 + 0x18),*(undefined8 *)(param_1 + 0x10),0,uVar3,local_res18,0
+               ,0,1);
   }
   return;
 }
 

```


## wil_details_IsEnabledFallback

### Match Info



|Key|tapisrv-7623.dll - tapisrv-8036.dll|
| :---: | :---: |
|diff_type|code,refcount,length,sig,address,calling|
|ratio|0.48|
|i_ratio|0.43|
|m_ratio|0.96|
|b_ratio|0.94|
|match_types|SymbolsHash|

### Function Meta Diff



|Key|tapisrv-7623.dll|tapisrv-8036.dll|
| :---: | :---: | :---: |
|name|wil_details_IsEnabledFallback|wil_details_IsEnabledFallback|
|fullname|wil_details_IsEnabledFallback|wil_details_IsEnabledFallback|
|`refcount`|2|3|
|`length`|135|140|
|called|wil_details_FeatureReporting_ReportUsageToService<br>wil_details_FeatureStateCache_ReevaluateCachedFeatureEnabledState<br>wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath|wil_details_FeatureReporting_ReportUsageToService<br>wil_details_FeatureStateCache_ReevaluateCachedFeatureEnabledState<br>wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath|
|`calling`|Feature_2464883000__private_IsEnabledDeviceUsageNoInline|Feature_2464883000__private_IsEnabledDeviceUsageNoInline<br>Feature_3967746362__private_IsEnabledDeviceUsageNoInline|
|paramcount|2|3|
|`address`|180032444|1800211d4|
|`sig`|uint __fastcall wil_details_IsEnabledFallback(undefined4 * param_1, uint param_2)|uint __fastcall wil_details_IsEnabledFallback(ulonglong param_1, int param_2, undefined8 * param_3)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|False|False|

### wil_details_IsEnabledFallback Calling Diff


```diff
--- wil_details_IsEnabledFallback calling
+++ wil_details_IsEnabledFallback calling
@@ -1,0 +2 @@
+Feature_3967746362__private_IsEnabledDeviceUsageNoInline
```


### wil_details_IsEnabledFallback Diff


```diff
--- wil_details_IsEnabledFallback
+++ wil_details_IsEnabledFallback
@@ -1,26 +1,22 @@
 
-uint wil_details_IsEnabledFallback(undefined4 *param_1,uint param_2)
+uint wil_details_IsEnabledFallback(ulonglong param_1,int param_2,undefined8 *param_3)
 
 {
   uint uVar1;
-  undefined4 *puVar2;
-  ulonglong local_res18;
+  ulonglong local_res8;
   
   uVar1 = (uint)param_1;
-  local_res18 = (ulonglong)param_1 & 0xffffffff;
-  if (((ulonglong)param_1 & 2) == 0) {
-    puVar2 = &Feature_2464883000__private_featureState;
-    local_res18 = wil_details_FeatureStateCache_ReevaluateCachedFeatureEnabledState
-                            (&Feature_2464883000__private_featureState,(ulonglong)param_1,
-                             0x180053398);
-    param_1 = puVar2;
-    uVar1 = (uint)local_res18;
+  local_res8 = param_1 & 0xffffffff;
+  if ((param_1 & 2) == 0) {
+    local_res8 = wil_details_FeatureStateCache_ReevaluateCachedFeatureEnabledState
+                           ((uint *)*param_3,param_1,(longlong)param_3);
+    uVar1 = (uint)local_res8;
   }
   if ((param_2 != 0) &&
-     (wil_details_FeatureReporting_ReportUsageToService(param_1,local_res18,param_2),
-     param_2 - 3 < 2)) {
-    wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath((uint)local_res18,param_2);
+     (wil_details_FeatureReporting_ReportUsageToService((longlong)param_3,local_res8,param_2),
+     param_2 - 3U < 2)) {
+    wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath((uint)local_res8,param_2,param_3);
   }
   return uVar1 & 1;
 }
 

```


## wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath

### Match Info



|Key|tapisrv-7623.dll - tapisrv-8036.dll|
| :---: | :---: |
|diff_type|code,length,sig,address|
|ratio|0.4|
|i_ratio|0.37|
|m_ratio|0.9|
|b_ratio|0.9|
|match_types|SymbolsHash|

### Function Meta Diff



|Key|tapisrv-7623.dll|tapisrv-8036.dll|
| :---: | :---: | :---: |
|name|wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath|wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath|
|fullname|wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath|wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath|
|refcount|1|1|
|`length`|76|91|
|called|||
|calling|wil_details_IsEnabledFallback|wil_details_IsEnabledFallback|
|paramcount|2|3|
|`address`|180032244|180020fc4|
|`sig`|undefined __fastcall wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath(uint param_1, int param_2)|undefined __fastcall wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath(uint param_1, int param_2, undefined8 * param_3)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|False|False|

### wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath Diff


```diff
--- wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath
+++ wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath
@@ -1,41 +1,52 @@
 
-void wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath(uint param_1,int param_2)
+void wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath
+               (uint param_1,int param_2,undefined8 *param_3)
 
 {
-  uint uVar1;
+  uint *puVar1;
   uint uVar2;
   uint uVar3;
-  bool bVar4;
+  uint uVar4;
+  bool bVar5;
   
+  puVar1 = (uint *)*param_3;
   if (param_2 == 3) {
-    uVar3 = 0x10;
+    uVar4 = 0x10;
   }
   else {
     if (param_2 != 4) {
       return;
     }
-    uVar3 = 0x20;
+    uVar4 = 0x20;
   }
-  if ((Feature_2464883000__private_featureState & 2) != 0) {
-    uVar2 = Feature_2464883000__private_featureState;
-    while ((uVar2 & 1) == (param_1 & 1)) {
-      LOCK();
-      bVar4 = uVar2 == Feature_2464883000__private_featureState;
-      uVar1 = uVar3 | uVar2;
-      if (!bVar4) {
-        uVar2 = Feature_2464883000__private_featureState;
-        uVar1 = Feature_2464883000__private_featureState;
-      }
-      Feature_2464883000__private_featureState = uVar1;
-      UNLOCK();
-      if (bVar4) {
-        return;
-      }
-      if ((uVar2 & 2) == 0) {
-        return;
+  if ((*(char *)((longlong)param_3 + 0x1e) == '\0') && (*(char *)((longlong)param_3 + 0x1d) == '\0')
+     ) {
+    if ((*puVar1 & 2) != 0) {
+      uVar3 = *puVar1;
+      while ((uVar3 & 1) == (param_1 & 1)) {
+        LOCK();
+        uVar2 = *puVar1;
+        bVar5 = uVar3 == uVar2;
+        if (bVar5) {
+          *puVar1 = uVar4 | uVar3;
+          uVar2 = uVar3;
+        }
+        UNLOCK();
+        if (bVar5) {
+          return;
+        }
+        uVar3 = uVar2;
+        if ((uVar2 & 2) == 0) {
+          return;
+        }
       }
     }
+  }
+  else {
+    LOCK();
+    *puVar1 = *puVar1 | uVar4;
+    UNLOCK();
   }
   return;
 }
 

```


# Modified (No Code Changes)


*Slightly modified functions have no code changes, rather differnces in:*
- refcount
- length
- called
- calling
- name
- fullname



<sub>Generated with `ghidriff` version: 1.0.0 on 2026-08-15T23:08:38</sub>