# bfs.sys KB5055523 vs KB5058411 (CVE-2025-29970)

# 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)
	* [BfsCloseRootDirectory](#bfscloserootdirectory)
	* [Feature_2777415992__private_IsEnabledDeviceUsageNoInline](#feature_2777415992__private_isenableddeviceusagenoinline)
	* [Feature_2777415992__private_IsEnabledFallback](#feature_2777415992__private_isenabledfallback)
* [Modified](#modified)
	* [BfsCloseStorage](#bfsclosestorage)
* [Modified (No Code Changes)](#modified-no-code-changes)
	* [wil_details_IsEnabledFallback](#wil_details_isenabledfallback)
	* [NTOSKRNL.EXE::ExFreePoolWithTag](#ntoskrnlexeexfreepoolwithtag)

# Visual Chart Diff



```mermaid

flowchart LR

BfsCloseStorage-1-old<--Match 79%-->BfsCloseStorage-1-new

subgraph bfs-10.0.26100.4061.sys
    BfsCloseStorage-1-new
    subgraph Added
direction LR
BfsCloseRootDirectory
    Feature_2777415992__private_IsEnabledDeviceUsageNoInline
    Feature_2777415992__private_IsEnabledFallback
end
end

subgraph bfs-10.0.26100.3624.sys
    BfsCloseStorage-1-old
    
end

```


```mermaid
pie showData
    title Function Matches - 99.6078%
"unmatched_funcs_len" : 3
"matched_funcs_len" : 762
```



```mermaid
pie showData
    title Matched Function Similarity - 99.6063%
"matched_funcs_with_code_changes_len" : 1
"matched_funcs_with_non_code_changes_len" : 2
"matched_funcs_no_changes_len" : 759
```

# Metadata

## Ghidra Diff Engine

### Command Line

#### Captured Command Line


```
ghidriff --project-location C:\tools\hugo\patchpalooza\ghidriff\CVE-2025-29970\ghidra_projects --project-name CVE-2025-29970 --symbols-path C:\tools\hugo\patchpalooza\ghidriff\CVE-2025-29970\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 --md-title bfs.sys KB5055523 vs KB5058411 (CVE-2025-29970) bfs-10.0.26100.3624.sys bfs-10.0.26100.4061.sys
```


#### Verbose Args


<details>

```
--old ['C:\\tools\\hugo\\patchpalooza\\ghidriff\\CVE-2025-29970\\bfs-10.0.26100.3624.sys'] --new [['C:\\tools\\hugo\\patchpalooza\\ghidriff\\CVE-2025-29970\\bfs-10.0.26100.4061.sys']] --engine VersionTrackingDiff --output-path C:\tools\hugo\patchpalooza\ghidriff\CVE-2025-29970\output --summary False --project-location C:\tools\hugo\patchpalooza\ghidriff\CVE-2025-29970\ghidra_projects --project-name CVE-2025-29970 --symbols-path C:\tools\hugo\patchpalooza\ghidriff\CVE-2025-29970\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 bfs.sys KB5055523 vs KB5058411 (CVE-2025-29970)
```


</details>

#### Download Original PEs


```
wget https://msdl.microsoft.com/download/symbols/Bfs.sys/7B2F938E20000/Bfs.sys -O bfs.sys.x64.10.0.26100.3624
wget https://msdl.microsoft.com/download/symbols/Bfs.sys/B0F1B29620000/Bfs.sys -O bfs.sys.x64.10.0.26100.4061
```


## Binary Metadata Diff


```diff
--- bfs-10.0.26100.3624.sys Meta
+++ bfs-10.0.26100.4061.sys Meta
@@ -1,44 +1,44 @@
-Program Name: bfs-10.0.26100.3624.sys
+Program Name: bfs-10.0.26100.4061.sys
 Language ID: x86:LE:64:default (4.7)
 Compiler ID: windows
 Processor: x86
 Endian: Little
 Address Size: 64
 Minimum Address: 1c0000000
 Maximum Address: ff0000184f
 # of Bytes: 137296
 # of Memory Blocks: 13
-# of Instructions: 17199
-# of Defined Data: 2659
-# of Functions: 381
-# of Symbols: 2798
+# of Instructions: 17252
+# of Defined Data: 2673
+# of Functions: 384
+# of Symbols: 2811
 # of Data Types: 357
 # of Data Type Categories: 22
 Analyzed: true
 Compiler: visualstudio:unknown
 Created With Ghidra Version: 12.1.2
-Date Created: Sat Jul 25 10:16:14 SGT 2026
+Date Created: Sat Jul 25 10:16:21 SGT 2026
 Executable Format: Portable Executable (PE)
-Executable Location: /C:/tools/hugo/patchpalooza/ghidriff/CVE-2025-29970/bfs-10.0.26100.3624.sys
-Executable MD5: df5d8572943f9d82b1a3f2746f93a8d9
-Executable SHA256: c5201a16844fba06d03dd2aa91ae9ba723a7073cea37ef3cc74c5f080c39ac50
-FSRL: file:///C:/tools/hugo/patchpalooza/ghidriff/CVE-2025-29970/bfs-10.0.26100.3624.sys?MD5=df5d8572943f9d82b1a3f2746f93a8d9
+Executable Location: /C:/tools/hugo/patchpalooza/ghidriff/CVE-2025-29970/bfs-10.0.26100.4061.sys
+Executable MD5: ffacf274c12553b1257c847b9cded652
+Executable SHA256: ac8ec89b1881e44abb5618e8c3a35881426dbfe56e3d22c0f839514abd044537
+FSRL: file:///C:/tools/hugo/patchpalooza/ghidriff/CVE-2025-29970/bfs-10.0.26100.4061.sys?MD5=ffacf274c12553b1257c847b9cded652
 PDB Age: 1
 PDB File: bfs.pdb
-PDB GUID: 8a9551ed-cabb-a02f-f5c5-35b22299d610
+PDB GUID: 47daa440-1b06-93d7-c466-b404e82fac8f
 PDB Loaded: true
 PDB Version: RSDS
 PE Property[CompanyName]: Microsoft Corporation
 PE Property[FileDescription]: Bfs Filter Driver
-PE Property[FileVersion]: 10.0.26100.3624 (WinBuild.160101.0800)
+PE Property[FileVersion]: 10.0.26100.4061 (WinBuild.160101.0800)
 PE Property[InternalName]: Bfs.sys
 PE Property[LegalCopyright]: © Microsoft Corporation. All rights reserved.
 PE Property[OriginalFilename]: Bfs.sys
 PE Property[ProductName]: Microsoft® Windows® Operating System
-PE Property[ProductVersion]: 10.0.26100.3624
+PE Property[ProductVersion]: 10.0.26100.4061
 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 bfs-10.0.26100.3624.sys Decompiler Options</summary>


|Decompiler Option|Value|
| :---: | :---: |
|Prototype Evaluation|__fastcall|

</details>


<details>
<summary>Ghidra bfs-10.0.26100.3624.sys Specification extensions Options</summary>


|Specification extensions Option|Value|
| :---: | :---: |
|FormatVersion|0|
|VersionCounter|0|

</details>


<details>
<summary>Ghidra bfs-10.0.26100.3624.sys 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.msdApplyOptions|{
	interpretation: FUNCTION_IF_EXISTS,
	applyCallingConvention: true,
	applySignature: true,
	demangleOnlyKnownPatterns: true,
	doDisassembly: true
}|
|Demangler Microsoft.msdOutputOptions|ghidra.app.util.demangler.microsoft.options.MsdOutputOption@9e5b|
|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 bfs-10.0.26100.4061.sys Decompiler Options</summary>


|Decompiler Option|Value|
| :---: | :---: |
|Prototype Evaluation|__fastcall|

</details>


<details>
<summary>Ghidra bfs-10.0.26100.4061.sys Specification extensions Options</summary>


|Specification extensions Option|Value|
| :---: | :---: |
|FormatVersion|0|
|VersionCounter|0|

</details>


<details>
<summary>Ghidra bfs-10.0.26100.4061.sys 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.msdApplyOptions|{
	interpretation: FUNCTION_IF_EXISTS,
	applyCallingConvention: true,
	applySignature: true,
	demangleOnlyKnownPatterns: true,
	doDisassembly: true
}|
|Demangler Microsoft.msdOutputOptions|ghidra.app.util.demangler.microsoft.options.MsdOutputOption@9e5b|
|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|3|
|deleted_funcs_len|0|
|modified_funcs_len|3|
|added_symbols_len|3|
|deleted_symbols_len|0|
|diff_time|15.128049850463867|
|deleted_strings_len|0|
|added_strings_len|0|
|match_types|Counter({'SymbolsHash': 380, 'ExternalsName': 185})|
|items_to_process|9|
|diff_types|Counter({'refcount': 2, 'calling': 2, 'code': 1, 'length': 1, 'address': 1, 'called': 1})|
|unmatched_funcs_len|3|
|total_funcs_len|765|
|matched_funcs_len|762|
|matched_funcs_with_code_changes_len|1|
|matched_funcs_with_non_code_changes_len|2|
|matched_funcs_no_changes_len|759|
|match_func_similarity_percent|99.6063%|
|func_match_overall_percent|99.6078%|
|first_matches|Counter({'SymbolsHash': 380})|



```mermaid
pie showData
    title All Matches
"SymbolsHash" : 380
"ExternalsName" : 185
```



```mermaid
pie showData
    title First Matches
"SymbolsHash" : 380
```



```mermaid
pie showData
    title Diff Stats
"added_funcs_len" : 3
"deleted_funcs_len" : 0
"modified_funcs_len" : 3
```



```mermaid
pie showData
    title Symbols
"added_symbols_len" : 3
"deleted_symbols_len" : 0
```

## Strings


*No string differences found*

# Deleted

# Added

## BfsCloseRootDirectory

### Function Meta



|Key|bfs-10.0.26100.4061.sys|
| :---: | :---: |
|name|BfsCloseRootDirectory|
|fullname|BfsCloseRootDirectory|
|refcount|2|
|length|221|
|called|Feature_2777415992__private_IsEnabledDeviceUsageNoInline<br>NTOSKRNL.EXE::ExFreePoolWithTag|
|calling|BfsCloseStorage|
|paramcount|1|
|address|1c000e23c|
|sig|undefined __fastcall BfsCloseRootDirectory(longlong param_1)|
|sym_type|Function|
|sym_source|IMPORTED|
|external|False|


```diff
--- BfsCloseRootDirectory
+++ BfsCloseRootDirectory
@@ -0,0 +1,50 @@
+
+void BfsCloseRootDirectory(longlong param_1)
+
+{
+  longlong *plVar1;
+  longlong *plVar2;
+  longlong lVar3;
+  code *pcVar4;
+  ulonglong uVar5;
+  undefined1 *puVar6;
+  undefined1 auStack_28 [8];
+  undefined1 auStack_20 [24];
+  
+  puVar6 = auStack_28;
+  plVar1 = *(longlong **)(param_1 + 0x40);
+  uVar5 = Feature_2777415992__private_IsEnabledDeviceUsageNoInline();
+  if ((int)uVar5 == 0) {
+    while( true ) {
+      plVar2 = (longlong *)*plVar1;
+      if (plVar2 == plVar1) {
+        return;
+      }
+      if (((longlong *)plVar2[1] != plVar1) ||
+         (lVar3 = *plVar2, (longlong *)*(longlong *)(lVar3 + 8) != plVar2)) break;
+      *plVar1 = lVar3;
+      *(longlong **)(lVar3 + 8) = plVar1;
+      ExFreePoolWithTag(plVar2[2]);
+      ExFreePoolWithTag(plVar2);
+      ExFreePoolWithTag(plVar1);
+    }
+LAB_1c000e2f6:
+    pcVar4 = (code *)swi(0x29);
+    (*pcVar4)(3);
+    puVar6 = auStack_20;
+  }
+  else {
+    while (plVar2 = (longlong *)*plVar1, plVar2 != plVar1) {
+      if (((longlong *)plVar2[1] != plVar1) ||
+         (lVar3 = *plVar2, *(longlong **)(lVar3 + 8) != plVar2)) goto LAB_1c000e2f6;
+      *plVar1 = lVar3;
+      *(longlong **)(lVar3 + 8) = plVar1;
+      ExFreePoolWithTag(plVar2[2],0);
+      ExFreePoolWithTag(plVar2);
+    }
+  }
+  *(undefined8 *)(puVar6 + -8) = 0x1c000e309;
+  ExFreePoolWithTag(plVar1,0);
+  return;
+}
+

```


## Feature_2777415992__private_IsEnabledDeviceUsageNoInline

### Function Meta



|Key|bfs-10.0.26100.4061.sys|
| :---: | :---: |
|name|Feature_2777415992__private_IsEnabledDeviceUsageNoInline|
|fullname|Feature_2777415992__private_IsEnabledDeviceUsageNoInline|
|refcount|2|
|length|49|
|called|Feature_2777415992__private_IsEnabledFallback|
|calling|BfsCloseRootDirectory|
|paramcount|0|
|address|1c00100d8|
|sig|ulonglong __fastcall Feature_2777415992__private_IsEnabledDeviceUsageNoInline(void)|
|sym_type|Function|
|sym_source|IMPORTED|
|external|False|


```diff
--- Feature_2777415992__private_IsEnabledDeviceUsageNoInline
+++ Feature_2777415992__private_IsEnabledDeviceUsageNoInline
@@ -0,0 +1,17 @@
+
+ulonglong Feature_2777415992__private_IsEnabledDeviceUsageNoInline(void)
+
+{
+  ulonglong uVar1;
+  undefined8 local_res8;
+  
+  local_res8 = (ulonglong)Feature_2777415992__private_featureState;
+  if ((Feature_2777415992__private_featureState & 0x10) == 0) {
+    uVar1 = Feature_2777415992__private_IsEnabledFallback(local_res8,3);
+  }
+  else {
+    uVar1 = (ulonglong)(Feature_2777415992__private_featureState & 1);
+  }
+  return uVar1;
+}
+

```


## Feature_2777415992__private_IsEnabledFallback

### Function Meta



|Key|bfs-10.0.26100.4061.sys|
| :---: | :---: |
|name|Feature_2777415992__private_IsEnabledFallback|
|fullname|Feature_2777415992__private_IsEnabledFallback|
|refcount|2|
|length|21|
|called|wil_details_IsEnabledFallback|
|calling|Feature_2777415992__private_IsEnabledDeviceUsageNoInline|
|paramcount|2|
|address|1c0010110|
|sig|undefined __fastcall Feature_2777415992__private_IsEnabledFallback(ulonglong param_1, int param_2)|
|sym_type|Function|
|sym_source|IMPORTED|
|external|False|


```diff
--- Feature_2777415992__private_IsEnabledFallback
+++ Feature_2777415992__private_IsEnabledFallback
@@ -0,0 +1,8 @@
+
+void Feature_2777415992__private_IsEnabledFallback(ulonglong param_1,int param_2)
+
+{
+  wil_details_IsEnabledFallback(param_1,param_2,&Feature_2777415992__private_descriptor);
+  return;
+}
+

```


# Modified


*Modified functions contain code changes*
## BfsCloseStorage

### Match Info



|Key|bfs-10.0.26100.3624.sys - bfs-10.0.26100.4061.sys|
| :---: | :---: |
|diff_type|code,length,address,called|
|ratio|0.29|
|i_ratio|0.68|
|m_ratio|0.82|
|b_ratio|0.79|
|match_types|SymbolsHash|

### Function Meta Diff



|Key|bfs-10.0.26100.3624.sys|bfs-10.0.26100.4061.sys|
| :---: | :---: | :---: |
|name|BfsCloseStorage|BfsCloseStorage|
|fullname|BfsCloseStorage|BfsCloseStorage|
|refcount|4|4|
|`length`|299|212|
|`called`|BfsDereferenceTableEntry<br>FLTMGR.SYS::FltClose<br>NTOSKRNL.EXE::ExFreePoolWithTag<br>NTOSKRNL.EXE::RtlEnumerateGenericTableAvl<br>NTOSKRNL.EXE::RtlIsGenericTableEmptyAvl|BfsCloseRootDirectory<br>BfsDereferenceTableEntry<br>FLTMGR.SYS::FltClose<br>NTOSKRNL.EXE::ExFreePoolWithTag<br>NTOSKRNL.EXE::RtlEnumerateGenericTableAvl<br>NTOSKRNL.EXE::RtlIsGenericTableEmptyAvl|
|calling|BfsDereferencePolicyEntryEx<br>BfsLoadUserPolicyEntriesToGlobalFileTable|BfsDereferencePolicyEntryEx<br>BfsLoadUserPolicyEntriesToGlobalFileTable|
|paramcount|1|1|
|`address`|1c000e23c|1c000e320|
|sig|undefined __fastcall BfsCloseStorage(longlong param_1)|undefined __fastcall BfsCloseStorage(longlong param_1)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|False|False|

### BfsCloseStorage Called Diff


```diff
--- BfsCloseStorage called
+++ BfsCloseStorage called
@@ -0,0 +1 @@
+BfsCloseRootDirectory
```


### BfsCloseStorage Diff


```diff
--- BfsCloseStorage
+++ BfsCloseStorage
@@ -1,66 +1,36 @@
 
 void BfsCloseStorage(longlong param_1)
 
 {
-  longlong *plVar1;
-  longlong *plVar2;
-  longlong lVar3;
-  code *pcVar4;
-  char cVar5;
-  undefined8 *puVar6;
-  undefined8 *puVar7;
-  undefined1 *puVar8;
-  undefined1 auStack_28 [8];
-  undefined1 auStack_20 [24];
+  char cVar1;
+  undefined8 *puVar2;
+  undefined8 *puVar3;
   
-  puVar8 = auStack_28;
   if (*(longlong *)(param_1 + 8) != 0) {
     FltClose();
   }
   if (*(longlong *)(param_1 + 0x10) != 0) {
     ExFreePoolWithTag(*(longlong *)(param_1 + 0x10),0);
   }
-  plVar1 = *(longlong **)(param_1 + 0x40);
+  BfsCloseRootDirectory(param_1);
+  puVar3 = (undefined8 *)(param_1 + 0x50);
   do {
-    plVar2 = (longlong *)*plVar1;
-    if (plVar2 == plVar1) {
-LAB_0:
-      puVar7 = (undefined8 *)(param_1 + 0x50);
-      do {
-        *(undefined8 *)(puVar8 + -8) = 0x1c000e2f6;
-        puVar6 = (undefined8 *)RtlEnumerateGenericTableAvl(puVar7,1);
-        if (puVar6 == (undefined8 *)0x0) {
-          if (puVar7 == (undefined8 *)(param_1 + 0x50)) {
-            *(undefined8 *)(puVar8 + -8) = 0x1c000e347;
-            ExFreePoolWithTag(param_1,0);
-            return;
-          }
-          puVar6 = puVar7 + -5;
-          puVar7 = (undefined8 *)(puVar7[0xd] + 0x20);
-        }
-        *(undefined8 *)(puVar8 + -8) = 0x1c000e322;
-        cVar5 = RtlIsGenericTableEmptyAvl(puVar6 + 5);
-        if (cVar5 == '\0') {
-          puVar7 = puVar6 + 5;
-        }
-        else {
-          *(undefined8 *)(puVar8 + -8) = 0x1c000e333;
-          BfsDereferenceTableEntry(puVar6);
-        }
-      } while( true );
+    puVar2 = (undefined8 *)RtlEnumerateGenericTableAvl(puVar3,1);
+    if (puVar2 == (undefined8 *)0x0) {
+      if (puVar3 == (undefined8 *)(param_1 + 0x50)) {
+        ExFreePoolWithTag(param_1,0);
+        return;
+      }
+      puVar2 = puVar3 + -5;
+      puVar3 = (undefined8 *)(puVar3[0xd] + 0x20);
     }
-    if (((longlong *)plVar2[1] != plVar1) ||
-       (lVar3 = *plVar2, (longlong *)*(longlong *)(lVar3 + 8) != plVar2)) {
-      pcVar4 = (code *)swi(0x29);
-      (*pcVar4)(3);
-      puVar8 = auStack_20;
-      goto LAB_0;
+    cVar1 = RtlIsGenericTableEmptyAvl(puVar2 + 5);
+    if (cVar1 == '\0') {
+      puVar3 = puVar2 + 5;
     }
-    *plVar1 = lVar3;
-    *(longlong **)(lVar3 + 8) = plVar1;
-    ExFreePoolWithTag(plVar2[2],0);
-    ExFreePoolWithTag(plVar2);
-    ExFreePoolWithTag(plVar1);
+    else {
+      BfsDereferenceTableEntry(puVar2);
+    }
   } while( true );
 }
 

```


# Modified (No Code Changes)


*Slightly modified functions have no code changes, rather differnces in:*
- refcount
- length
- called
- calling
- name
- fullname

## wil_details_IsEnabledFallback

### Match Info



|Key|bfs-10.0.26100.3624.sys - bfs-10.0.26100.4061.sys|
| :---: | :---: |
|diff_type|refcount,calling|
|ratio|1.0|
|i_ratio|1.0|
|m_ratio|1.0|
|b_ratio|1.0|
|match_types|SymbolsHash|

### Function Meta Diff



|Key|bfs-10.0.26100.3624.sys|bfs-10.0.26100.4061.sys|
| :---: | :---: | :---: |
|name|wil_details_IsEnabledFallback|wil_details_IsEnabledFallback|
|fullname|wil_details_IsEnabledFallback|wil_details_IsEnabledFallback|
|`refcount`|4|5|
|length|140|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_752421176__private_IsEnabledFallback<br>Feature_AppSiloEnumeratePolicyCheck__private_IsEnabledFallback<br>Feature_Servicing_BfsGAFeature__private_IsEnabledFallback|Feature_2777415992__private_IsEnabledFallback<br>Feature_752421176__private_IsEnabledFallback<br>Feature_AppSiloEnumeratePolicyCheck__private_IsEnabledFallback<br>Feature_Servicing_BfsGAFeature__private_IsEnabledFallback|
|paramcount|3|3|
|address|1c0003ff8|1c0003ff8|
|sig|uint __fastcall wil_details_IsEnabledFallback(ulonglong param_1, int param_2, undefined8 * param_3)|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
@@ -0,0 +1 @@
+Feature_2777415992__private_IsEnabledFallback
```


## NTOSKRNL.EXE::ExFreePoolWithTag

### Match Info



|Key|bfs-10.0.26100.3624.sys - bfs-10.0.26100.4061.sys|
| :---: | :---: |
|diff_type|refcount,calling|
|ratio|1.0|
|i_ratio|1.0|
|m_ratio|1.0|
|b_ratio|1.0|
|match_types|SymbolsHash,ExternalsName|

### Function Meta Diff



|Key|bfs-10.0.26100.3624.sys|bfs-10.0.26100.4061.sys|
| :---: | :---: | :---: |
|name|ExFreePoolWithTag|ExFreePoolWithTag|
|fullname|NTOSKRNL.EXE::ExFreePoolWithTag|NTOSKRNL.EXE::ExFreePoolWithTag|
|`refcount`|142|145|
|length|0|0|
|called|||
|`calling`|<details><summary>Expand for full list:<br>BfsAccessRegistryKeyAsUserCallback<br>BfsAdjustRegistryKeySecurity<br>BfsCalculateRegistryPrefix<br>BfsCheckAndApplyPolicy<br>BfsClearGlobalFileEntry<br>BfsCloseStorage<br>BfsCreateDirectory<br>BfsCreateGlobalFileEntry<br>BfsCreatePolicyStorageDescriptor<br>BfsCreateStorage<br>BfsDeleteFileFromGlobalFileTable</summary>BfsDereferencePolicyEntryEx<br>BfsDereferenceTableEntry<br>BfsEnumeratePolicy<br>BfsExpandDirectory<br>BfsFreeDirectoryBlockList<br>BfsFreeTableEntry<br>BfsGetRegistryPrefix<br>BfsInitializeBootDevice<br>BfsInitializeGlobalFileTable<br>BfsInitializePipeMappingTable<br>BfsInitializePolicyTable<br>BfsInsertDirectory<br>BfsInsertDirectoryEntry<br>BfsInsertNamedPipeMapping<br>BfsInsertNotPresentPolicyEntry<br>BfsInsertPolicyEntry<br>BfsLoadUserPolicyEntriesToGlobalFileTable<br>BfsOpenRootDirectory<br>BfsPerformPrompt<br>BfsPolicyEntryExists<br>BfsPostCreateOperation<br>BfsPostCreatePipeOperation<br>BfsPreCreateOperation<br>BfsPreCreatePipeOperation<br>BfsProcessDeletePolicyEntryRequest<br>BfsProcessQueryPolicyRequest<br>BfsProcessQueryPolicySizeRequest<br>BfsProcessSetPolicyRequest<br>BfsReadDeleteThresholdFromRegistry<br>BfsRedirectNamedPipe<br>BfsRegistryPostCreateCallback<br>BfsReleaseNamedPipeMapping<br>BfsRemoveAllPoliciesFromGlobalFileTable<br>BfsRemoveKeyValues<br>BfsRemovePolicyFromGlobalFileTable<br>BfsReparseNamedPipe<br>BfsUninitializeGlobalFileTable<br>BfsUninitializePipeMappingTable<br>BfsUninitializePolicyTable<br>BfsUnload<br>BfsUpdateGlobalFilePolicy<br>BfsUpdatePolicySecurity<br>BfsUpdateUserPolicyDirectorySecurity<br>BfsVerifyPolicySecurity<br>BfsVerifyVolumeRootDescriptor<br>DriverEntry<br>KappxParsePackageFullNameFromToken<br>MIDL_user_free</details>|<details><summary>Expand for full list:<br>BfsAccessRegistryKeyAsUserCallback<br>BfsAdjustRegistryKeySecurity<br>BfsCalculateRegistryPrefix<br>BfsCheckAndApplyPolicy<br>BfsClearGlobalFileEntry<br>BfsCloseRootDirectory<br>BfsCloseStorage<br>BfsCreateDirectory<br>BfsCreateGlobalFileEntry<br>BfsCreatePolicyStorageDescriptor<br>BfsCreateStorage</summary>BfsDeleteFileFromGlobalFileTable<br>BfsDereferencePolicyEntryEx<br>BfsDereferenceTableEntry<br>BfsEnumeratePolicy<br>BfsExpandDirectory<br>BfsFreeDirectoryBlockList<br>BfsFreeTableEntry<br>BfsGetRegistryPrefix<br>BfsInitializeBootDevice<br>BfsInitializeGlobalFileTable<br>BfsInitializePipeMappingTable<br>BfsInitializePolicyTable<br>BfsInsertDirectory<br>BfsInsertDirectoryEntry<br>BfsInsertNamedPipeMapping<br>BfsInsertNotPresentPolicyEntry<br>BfsInsertPolicyEntry<br>BfsLoadUserPolicyEntriesToGlobalFileTable<br>BfsOpenRootDirectory<br>BfsPerformPrompt<br>BfsPolicyEntryExists<br>BfsPostCreateOperation<br>BfsPostCreatePipeOperation<br>BfsPreCreateOperation<br>BfsPreCreatePipeOperation<br>BfsProcessDeletePolicyEntryRequest<br>BfsProcessQueryPolicyRequest<br>BfsProcessQueryPolicySizeRequest<br>BfsProcessSetPolicyRequest<br>BfsReadDeleteThresholdFromRegistry<br>BfsRedirectNamedPipe<br>BfsRegistryPostCreateCallback<br>BfsReleaseNamedPipeMapping<br>BfsRemoveAllPoliciesFromGlobalFileTable<br>BfsRemoveKeyValues<br>BfsRemovePolicyFromGlobalFileTable<br>BfsReparseNamedPipe<br>BfsUninitializeGlobalFileTable<br>BfsUninitializePipeMappingTable<br>BfsUninitializePolicyTable<br>BfsUnload<br>BfsUpdateGlobalFilePolicy<br>BfsUpdatePolicySecurity<br>BfsUpdateUserPolicyDirectorySecurity<br>BfsVerifyPolicySecurity<br>BfsVerifyVolumeRootDescriptor<br>DriverEntry<br>KappxParsePackageFullNameFromToken<br>MIDL_user_free</details>|
|paramcount|0|0|
|address|EXTERNAL:0000007a|EXTERNAL:0000007a|
|sig|undefined ExFreePoolWithTag(void)|undefined ExFreePoolWithTag(void)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|True|True|

### NTOSKRNL.EXE::ExFreePoolWithTag Calling Diff


```diff
--- NTOSKRNL.EXE::ExFreePoolWithTag calling
+++ NTOSKRNL.EXE::ExFreePoolWithTag calling
@@ -5,0 +6 @@
+BfsCloseRootDirectory
```




<sub>Generated with `ghidriff` version: 1.0.0 on 2026-07-25T10:17:05</sub>