# dhcpssvc-06.dll-dhcpssvc-07.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)
	* [EvaluateCurrentStateFromRegistry](#evaluatecurrentstatefromregistry)
	* [EvaluateFeature](#evaluatefeature)
	* [EvaluateCurrentState](#evaluatecurrentstate)
	* [MSVCRT.DLL::swprintf_s](#msvcrtdllswprintf_s)
* [Modified](#modified)
	* [DhcpParseOptionV6](#dhcpparseoptionv6)
	* [DhcpParseRegistryOption](#dhcpparseregistryoption)
	* [AddVendorOptDefsFunc6](#addvendoroptdefsfunc6)
	* [DhcpGetUnicodeNameFromWirePunycodeName](#dhcpgetunicodenamefromwirepunycodename)
	* [DhcpGetOptionV6ByOptClass](#dhcpgetoptionv6byoptclass)
	* [DhcpOptPolicyGetOption](#dhcpoptpolicygetoption)
	* [AddVendorOptDefsFunc](#addvendoroptdefsfunc)
	* [DhcpFSMEnumRelationship](#dhcpfsmenumrelationship)
	* [_fgs__DHCP_OPTION](#_fgs__dhcp_option)
* [Modified (No Code Changes)](#modified-no-code-changes)
	* [KERNEL32.DLL::HeapFree](#kernel32dllheapfree)
	* [WS2_32.DLL::htonl](#ws2_32dllhtonl)
	* [ADVAPI32.DLL::RegQueryValueExW](#advapi32dllregqueryvalueexw)
	* [__GSHandlerCheck](#__gshandlercheck)
	* [ADVAPI32.DLL::RegCloseKey](#advapi32dllregclosekey)
	* [__security_check_cookie](#__security_check_cookie)
	* [DhcpGetWireFormatNameFromUnicode](#dhcpgetwireformatnamefromunicode)
	* [ADVAPI32.DLL::RegOpenKeyExW](#advapi32dllregopenkeyexw)
	* [KERNEL32.DLL::ReleaseSRWLockShared](#kernel32dllreleasesrwlockshared)
	* [WPP_SF_](#wpp_sf_)
	* [KERNEL32.DLL::LocalFree](#kernel32dlllocalfree)
	* [KERNEL32.DLL::AcquireSRWLockShared](#kernel32dllacquiresrwlockshared)
	* [FSMUpdateRelationship](#fsmupdaterelationship)

# Visual Chart Diff



```mermaid

flowchart LR

DhcpParseOptionV6-3-old<--Match 41%-->DhcpParseOptionV6-3-new
DhcpParseRegistryOption-6-old<--Match 31%-->DhcpParseRegistryOption-6-new
AddVendorOptDefsFunc6-6-old<--Match 95%-->AddVendorOptDefsFunc6-6-new
DhcpGetUnicodeNameFromWirePunycodeName-3-old<--Match 94%-->DhcpGetUnicodeNameFromWirePunycodeName-3-new
DhcpGetOptionV6ByOptClass-8-old<--Match 88%-->DhcpGetOptionV6ByOptClass-8-new
DhcpOptPolicyGetOption-9-old<--Match 96%-->DhcpOptPolicyGetOption-9-new
AddVendorOptDefsFunc-6-old<--Match 95%-->AddVendorOptDefsFunc-6-new
DhcpFSMEnumRelationship-5-old<--Match 59%-->DhcpFSMEnumRelationship-5-new
_fgs__DHCP_OPTION-1-old<--Match 78%-->_fgs__DHCP_OPTION-1-new

subgraph dhcpssvc-07.dll
    DhcpParseOptionV6-3-new
DhcpParseRegistryOption-6-new
AddVendorOptDefsFunc6-6-new
DhcpGetUnicodeNameFromWirePunycodeName-3-new
DhcpGetOptionV6ByOptClass-8-new
DhcpOptPolicyGetOption-9-new
AddVendorOptDefsFunc-6-new
DhcpFSMEnumRelationship-5-new
_fgs__DHCP_OPTION-1-new
    subgraph Added
direction LR
EvaluateCurrentStateFromRegistry
    EvaluateFeature
    EvaluateCurrentState
    MSVCRTDLL-swprintf_s
end
end

subgraph dhcpssvc-06.dll
    DhcpParseOptionV6-3-old
DhcpParseRegistryOption-6-old
AddVendorOptDefsFunc6-6-old
DhcpGetUnicodeNameFromWirePunycodeName-3-old
DhcpGetOptionV6ByOptClass-8-old
DhcpOptPolicyGetOption-9-old
AddVendorOptDefsFunc-6-old
DhcpFSMEnumRelationship-5-old
_fgs__DHCP_OPTION-1-old
    
end

```


```mermaid
pie showData
    title Function Matches - 99.9114%
"unmatched_funcs_len" : 4
"matched_funcs_len" : 4512
```



```mermaid
pie showData
    title Matched Function Similarity - 99.4238%
"matched_funcs_with_code_changes_len" : 9
"matched_funcs_with_non_code_changes_len" : 17
"matched_funcs_no_changes_len" : 4486
```

# Metadata

## Ghidra Diff Engine

### Command Line

#### Captured Command Line


```
ghidriff --project-location ghidra_projects --project-name ghidriff --symbols-path symbols --gzfs-path gzfs --threaded --log-level INFO --file-log-level INFO --log-path ghidriff.log --min-func-len 10 --gdt [] --max-ram-percent 60.0 --max-section-funcs 200 dhcpssvc-06.dll dhcpssvc-07.dll
```


#### Verbose Args


<details>

```
--old ['dhcpssvc-06.dll'] --new [['dhcpssvc-07.dll']] --engine VersionTrackingDiff --output-path out --summary False --project-location ghidra_projects --project-name ghidriff --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 False --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/dhcpssvc.dll/694CBB15162000/dhcpssvc.dll -O dhcpssvc.dll.x64.10.0.14393.8781
wget https://msdl.microsoft.com/download/symbols/dhcpssvc.dll/6A51BFC3162000/dhcpssvc.dll -O dhcpssvc.dll.x64.10.0.14393.9339
```


## Binary Metadata Diff


```diff
--- dhcpssvc-06.dll Meta
+++ dhcpssvc-07.dll Meta
@@ -1,44 +1,44 @@
-Program Name: dhcpssvc-06.dll
+Program Name: dhcpssvc-07.dll
 Language ID: x86:LE:64:default (4.7)
 Compiler ID: windows
 Processor: x86
 Endian: Little
 Address Size: 64
 Minimum Address: 180000000
 Maximum Address: ff0000184f
-# of Bytes: 1434084
+# of Bytes: 1438180
 # of Memory Blocks: 10
-# of Instructions: 198018
-# of Defined Data: 10635
-# of Functions: 2256
-# of Symbols: 24790
+# of Instructions: 198887
+# of Defined Data: 10672
+# of Functions: 2260
+# of Symbols: 24851
 # of Data Types: 731
 # of Data Type Categories: 46
 Analyzed: true
 Compiler: visualstudio:unknown
 Created With Ghidra Version: 12.1.2
-Date Created: Fri Aug 28 15:40:12 SGT 2026
+Date Created: Fri Aug 28 15:40:21 SGT 2026
 Executable Format: Portable Executable (PE)
-Executable Location: /C:/Users/Jacob/Downloads/pdbs/dhcpssvc-06.dll
-Executable MD5: 6734a8a6c09c954754c1aeb12b488dc8
-Executable SHA256: 262b5fe4ace7165fd6d24c3cc7e6fb09673d000c0fbf7ec023149aa3312ac313
-FSRL: file:///C:/Users/Jacob/Downloads/pdbs/dhcpssvc-06.dll?MD5=6734a8a6c09c954754c1aeb12b488dc8
+Executable Location: /C:/Users/Jacob/Downloads/pdbs/dhcpssvc-07.dll
+Executable MD5: 503ee6c880bf5183d48f46fbdc7ddeba
+Executable SHA256: c8a2b60dda941eb8ce58b5ef5bdb340d0818aebc3397696911b50a00000adad2
+FSRL: file:///C:/Users/Jacob/Downloads/pdbs/dhcpssvc-07.dll?MD5=503ee6c880bf5183d48f46fbdc7ddeba
 PDB Age: 1
 PDB File: dhcpssvc.pdb
-PDB GUID: 0fca968f-933b-462c-87dd-cad1c3ea0fe8
+PDB GUID: bec901a9-16b0-4393-b401-d9045caef51f
 PDB Loaded: true
 PDB Version: RSDS
 PE Property[CompanyName]: Microsoft Corporation
 PE Property[FileDescription]: DHCP Server Service
-PE Property[FileVersion]: 10.0.14393.8781 (rs1_release.251224-1746)
+PE Property[FileVersion]: 10.0.14393.9339 (rs1_release.260710-1833)
 PE Property[InternalName]: dhcpssvc.dll
 PE Property[LegalCopyright]: © Microsoft Corporation. All rights reserved.
 PE Property[OriginalFilename]: dhcpssvc.dll
 PE Property[ProductName]: Microsoft® Windows® Operating System
-PE Property[ProductVersion]: 10.0.14393.8781
+PE Property[ProductVersion]: 10.0.14393.9339
 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 dhcpssvc-06.dll Decompiler Options</summary>


|Decompiler Option|Value|
| :---: | :---: |
|Prototype Evaluation|__fastcall|

</details>


<details>
<summary>Ghidra dhcpssvc-06.dll Specification extensions Options</summary>


|Specification extensions Option|Value|
| :---: | :---: |
|FormatVersion|0|
|VersionCounter|0|

</details>


<details>
<summary>Ghidra dhcpssvc-06.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.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 dhcpssvc-07.dll Decompiler Options</summary>


|Decompiler Option|Value|
| :---: | :---: |
|Prototype Evaluation|__fastcall|

</details>


<details>
<summary>Ghidra dhcpssvc-07.dll Specification extensions Options</summary>


|Specification extensions Option|Value|
| :---: | :---: |
|FormatVersion|0|
|VersionCounter|0|

</details>


<details>
<summary>Ghidra dhcpssvc-07.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.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|4|
|deleted_funcs_len|0|
|modified_funcs_len|26|
|added_symbols_len|23|
|deleted_symbols_len|7|
|diff_time|16.491618394851685|
|deleted_strings_len|0|
|added_strings_len|3|
|match_types|Counter({'SymbolsHash': 2230, 'ExternalsName': 436, 'ExactInstructionsFunctionHasher': 5, 'ExactBytesFunctionHasher': 3})|
|items_to_process|60|
|diff_types|Counter({'address': 23, 'refcount': 16, 'length': 10, 'called': 10, 'code': 9, 'calling': 9, 'sig': 5, 'name': 2, 'fullname': 2})|
|unmatched_funcs_len|4|
|total_funcs_len|4516|
|matched_funcs_len|4512|
|matched_funcs_with_code_changes_len|9|
|matched_funcs_with_non_code_changes_len|17|
|matched_funcs_no_changes_len|4486|
|match_func_similarity_percent|99.4238%|
|func_match_overall_percent|99.9114%|
|first_matches|Counter({'SymbolsHash': 2230, 'ExactInstructionsFunctionHasher': 5, 'ExactBytesFunctionHasher': 3})|



```mermaid
pie showData
    title All Matches
"SymbolsHash" : 2230
"ExternalsName" : 436
"ExactBytesFunctionHasher" : 3
"ExactInstructionsFunctionHasher" : 5
```



```mermaid
pie showData
    title First Matches
"SymbolsHash" : 2230
"ExactBytesFunctionHasher" : 3
"ExactInstructionsFunctionHasher" : 5
```



```mermaid
pie showData
    title Diff Stats
"added_funcs_len" : 4
"deleted_funcs_len" : 0
"modified_funcs_len" : 26
```



```mermaid
pie showData
    title Symbols
"added_symbols_len" : 23
"deleted_symbols_len" : 7
```

## Strings



```mermaid
pie showData
    title Strings
"deleted_strings_len" : 0
"added_strings_len" : 3
```

### Strings Diff


```diff
--- deleted strings
+++ added strings
@@ -0,0 +1,3 @@
+u_%lu
+u_%lu_variant
+u_System\CurrentControlSet\Policie

```


### String References

#### Old



|String|Ref Count|Ref Func|
| :---: | :---: | :---: |

#### New



|String|Ref Count|Ref Func|
| :---: | :---: | :---: |
|u_%lu_variant|1|EvaluateCurrentStateFromRegistry|
|u_System\CurrentControlSet\Policie|1|EvaluateCurrentStateFromRegistry|
|u_%lu|1|EvaluateCurrentStateFromRegistry|

# Deleted

# Added

## EvaluateCurrentStateFromRegistry

### Function Meta



|Key|dhcpssvc-07.dll|
| :---: | :---: |
|name|EvaluateCurrentStateFromRegistry|
|fullname|EvaluateCurrentStateFromRegistry|
|refcount|2|
|length|452|
|called|ADVAPI32.DLL::RegCloseKey<br>ADVAPI32.DLL::RegOpenKeyExW<br>ADVAPI32.DLL::RegQueryValueExW<br>MSVCRT.DLL::swprintf_s<br>__security_check_cookie<br>memset|
|calling|EvaluateFeature|
|paramcount|5|
|address|18002d7d4|
|sig|bool __fastcall EvaluateCurrentStateFromRegistry(undefined8 param_1, int param_2, int param_3, undefined1 param_4, undefined1 * param_5)|
|sym_type|Function|
|sym_source|IMPORTED|
|external|False|


```diff
--- EvaluateCurrentStateFromRegistry
+++ EvaluateCurrentStateFromRegistry
@@ -0,0 +1,63 @@
+
+/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
+
+bool EvaluateCurrentStateFromRegistry
+               (undefined8 param_1,int param_2,int param_3,undefined1 param_4,undefined1 *param_5)
+
+{
+  bool bVar1;
+  bool bVar2;
+  LSTATUS LVar3;
+  uint uVar4;
+  bool bVar5;
+  undefined1 auStackY_a8 [32];
+  DWORD local_78;
+  uint local_74;
+  DWORD local_70 [2];
+  HKEY local_68;
+  wchar_t local_60 [24];
+  ulonglong local_30;
+  
+  local_30 = __security_cookie ^ (ulonglong)auStackY_a8;
+  local_78 = 4;
+  bVar5 = param_3 != 1;
+  uVar4 = 0x80000000;
+  *param_5 = param_4;
+  bVar1 = false;
+  bVar2 = false;
+  memset(local_60,0,0x2c);
+  LVar3 = RegOpenKeyExW((HKEY)0xffffffff80000002,
+                        L"System\\CurrentControlSet\\Policies\\Microsoft\\FeatureManagement\\Overrides"
+                        ,0,0x20019,&local_68);
+  if (LVar3 == 0) {
+    if (param_2 != 0) {
+      swprintf_s(local_60,0x16,L"%lu_variant");
+      LVar3 = RegQueryValueExW(local_68,local_60,(LPDWORD)0x0,local_70,(LPBYTE)&local_74,&local_78);
+      bVar1 = bVar2;
+      if ((((LVar3 == 0) && (local_70[0] == 4)) && (local_78 == 4)) && (local_74 < 0x100)) {
+        bVar1 = true;
+        uVar4 = local_74;
+      }
+    }
+    swprintf_s(local_60,0x16,L"%lu");
+    LVar3 = RegQueryValueExW(local_68,local_60,(LPDWORD)0x0,local_70,(LPBYTE)&local_74,&local_78);
+    if ((undefined1 *)((longlong)&local_68[-1].unused + 3U) < (undefined1 *)0xfffffffffffffffe) {
+      RegCloseKey(local_68);
+    }
+    if (((LVar3 == 0) && (local_70[0] == 4)) && (local_78 == 4)) {
+      if ((local_74 != 0) != 0xffffffff) {
+        bVar5 = (local_74 != 0) != 0;
+      }
+      goto LAB_18002d962;
+    }
+  }
+  if ((param_2 != 0) && (!bVar1)) {
+    return bVar5;
+  }
+LAB_18002d962:
+  if (uVar4 != 0x80000000) {
+    *param_5 = (char)uVar4;
+  }
+  return bVar5;
+}
+

```


## EvaluateFeature

### Function Meta



|Key|dhcpssvc-07.dll|
| :---: | :---: |
|name|EvaluateFeature|
|fullname|EvaluateFeature|
|refcount|2|
|length|112|
|called|EvaluateCurrentStateFromRegistry|
|calling|EvaluateCurrentState|
|paramcount|1|
|address|18002d9a0|
|sig|uint __fastcall EvaluateFeature(undefined8 * param_1)|
|sym_type|Function|
|sym_source|IMPORTED|
|external|False|


```diff
--- EvaluateFeature
+++ EvaluateFeature
@@ -0,0 +1,35 @@
+
+uint EvaluateFeature(undefined8 *param_1)
+
+{
+  uint *puVar1;
+  uint *puVar2;
+  bool bVar3;
+  uint uVar4;
+  undefined7 extraout_var;
+  byte local_res8 [8];
+  
+  puVar1 = (uint *)*param_1;
+  puVar2 = (uint *)param_1[3];
+  uVar4 = *puVar1;
+  local_res8[0] = *(byte *)(param_1 + 4);
+  if ((uVar4 == 0) && (*puVar2 == 0x80000000)) {
+    bVar3 = EvaluateCurrentStateFromRegistry
+                      ((ulonglong)*(uint *)(param_1 + 1),*(int *)(param_1 + 2),
+                       *(int *)((longlong)param_1 + 0xc),local_res8[0],local_res8);
+    LOCK();
+    if (*puVar1 == 0) {
+      *puVar1 = ((int)CONCAT71(extraout_var,bVar3) != 0) + 1;
+    }
+    UNLOCK();
+    LOCK();
+    uVar4 = *puVar2;
+    if (uVar4 == 0x80000000) {
+      *puVar2 = (uint)local_res8[0];
+      uVar4 = 0x80000000;
+    }
+    UNLOCK();
+  }
+  return uVar4;
+}
+

```


## EvaluateCurrentState

### Function Meta



|Key|dhcpssvc-07.dll|
| :---: | :---: |
|name|EvaluateCurrentState|
|fullname|EvaluateCurrentState|
|refcount|43|
|length|33|
|called|EvaluateFeature|
|calling|AddVendorOptDefsFunc<br>AddVendorOptDefsFunc6<br>DhcpFSMEnumRelationship<br>DhcpGetOptionV6ByOptClass<br>DhcpGetUnicodeNameFromWirePunycodeName<br>DhcpOptPolicyGetOption<br>DhcpParseOptionV6<br>DhcpParseRegistryOption<br>_fgs__DHCP_OPTION|
|paramcount|1|
|address|18002da18|
|sig|bool __fastcall EvaluateCurrentState(undefined8 * param_1)|
|sym_type|Function|
|sym_source|IMPORTED|
|external|False|


```diff
--- EvaluateCurrentState
+++ EvaluateCurrentState
@@ -0,0 +1,8 @@
+
+bool EvaluateCurrentState(undefined8 *param_1)
+
+{
+  EvaluateFeature(param_1);
+  return *(int *)*param_1 != 1;
+}
+

```


## MSVCRT.DLL::swprintf_s

### Function Meta



|Key|dhcpssvc-07.dll|
| :---: | :---: |
|name|swprintf_s|
|fullname|MSVCRT.DLL::swprintf_s|
|refcount|3|
|length|0|
|called||
|calling|EvaluateCurrentStateFromRegistry|
|paramcount|3|
|address|EXTERNAL:0000001e|
|sig|int __cdecl swprintf_s(wchar_t * _Dst, size_t _SizeInWords, wchar_t * _Format, ...)|
|sym_type|Function|
|sym_source|IMPORTED|
|external|True|


*No code available for MSVCRT.DLL::swprintf_s*
# Modified


*Modified functions contain code changes*
## DhcpParseOptionV6

### Match Info



|Key|dhcpssvc-06.dll - dhcpssvc-07.dll|
| :---: | :---: |
|diff_type|code,length,address,called|
|ratio|0.09|
|i_ratio|0.14|
|m_ratio|0.62|
|b_ratio|0.41|
|match_types|SymbolsHash|

### Function Meta Diff



|Key|dhcpssvc-06.dll|dhcpssvc-07.dll|
| :---: | :---: | :---: |
|name|DhcpParseOptionV6|DhcpParseOptionV6|
|fullname|DhcpParseOptionV6|DhcpParseOptionV6|
|refcount|2|2|
|`length`|719|1596|
|`called`|DhcpGetWireFormatNameFromUnicode<br>DhcpUnicodeToOem<br>DhcpUnicodeToOemSize<br>MemAddr6ConvertIPv6StringToByte<br>WPP_SF_<br>WS2_32.DLL::htonl<br>WS2_32.DLL::htons<br>memcpy|<details><summary>Expand for full list:<br>DhcpGetWireFormatNameFromUnicode<br>DhcpUnicodeToOem<br>DhcpUnicodeToOemSize<br>EvaluateCurrentState<br>MemAddr6ConvertIPv6StringToByte<br>WPP_SF_<br>WPP_SF_D<br>WPP_SF_dD<br>WS2_32.DLL::htonl<br>WS2_32.DLL::htons<br>memcpy</summary></details>|
|calling|DhcpGetOptionV6ByOptClass|DhcpGetOptionV6ByOptClass|
|paramcount|3|3|
|`address`|180034934|180034be4|
|sig|byte __fastcall DhcpParseOptionV6(uint * param_1, u_long * param_2, uint * param_3)|byte __fastcall DhcpParseOptionV6(uint * param_1, u_long * param_2, uint * param_3)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|False|False|

### DhcpParseOptionV6 Called Diff


```diff
--- DhcpParseOptionV6 called
+++ DhcpParseOptionV6 called
@@ -3,0 +4 @@
+EvaluateCurrentState
@@ -5,0 +7,2 @@
+WPP_SF_D
+WPP_SF_dD
```


### DhcpParseOptionV6 Diff


```diff
--- DhcpParseOptionV6
+++ DhcpParseOptionV6
@@ -1,145 +1,414 @@
 
 byte DhcpParseOptionV6(uint *param_1,u_long *param_2,uint *param_3)
 
 {
-  uint uVar1;
+  ushort uVar1;
   uint uVar2;
   uint uVar3;
-  longlong lVar4;
-  undefined2 uVar5;
-  u_short uVar6;
-  u_long uVar7;
-  undefined8 uVar8;
-  u_long *puVar9;
-  undefined6 extraout_var;
-  uint uVar10;
-  ulonglong uVar11;
-  uint uVar12;
-  u_long *puVar13;
+  uint uVar4;
+  longlong lVar5;
+  bool bVar6;
+  undefined2 uVar7;
+  u_short uVar8;
+  u_long uVar9;
+  undefined7 extraout_var;
+  undefined8 uVar10;
+  undefined7 extraout_var_00;
+  undefined7 extraout_var_01;
+  undefined7 extraout_var_02;
+  undefined7 extraout_var_03;
+  u_long *puVar11;
+  undefined6 extraout_var_16;
+  undefined7 extraout_var_04;
+  undefined7 extraout_var_05;
+  undefined7 extraout_var_06;
+  undefined7 extraout_var_07;
+  undefined7 extraout_var_08;
+  undefined7 extraout_var_09;
+  undefined7 extraout_var_10;
+  undefined7 extraout_var_11;
+  undefined7 extraout_var_12;
+  undefined7 extraout_var_13;
+  undefined7 extraout_var_14;
+  undefined7 extraout_var_15;
+  uint *puVar12;
+  ulonglong uVar13;
   uint uVar14;
+  uint uVar15;
+  u_long *puVar16;
+  uint uVar17;
   ulonglong _Size;
+  bool bVar18;
   uint local_48 [4];
   
   local_48[0] = 0;
-  lVar4 = *(longlong *)(param_1 + 4);
-  uVar1 = *param_3;
-  uVar11 = (ulonglong)uVar1;
-  uVar12 = 0;
+  lVar5 = *(longlong *)(param_1 + 4);
+  uVar2 = *param_3;
+  uVar13 = (ulonglong)uVar2;
   uVar14 = 0;
-  uVar2 = *(uint *)(lVar4 + 8);
-  puVar13 = (u_long *)(lVar4 + 0x10);
-  uVar3 = *(uint *)(lVar4 + 4);
-  if (uVar2 != 0) {
+  uVar15 = 0;
+  uVar3 = *(uint *)(lVar5 + 8);
+  puVar16 = (u_long *)(lVar5 + 0x10);
+  uVar4 = *(uint *)(lVar5 + 4);
+  if (uVar3 != 0) {
     do {
-      if (uVar3 == 0) {
-        if ((ulonglong)uVar12 + 1 <= uVar11) {
-          *(char *)param_2 = (char)*puVar13;
-          param_2 = (u_long *)((longlong)param_2 + 1);
-        }
-        puVar13 = puVar13 + 1;
-        uVar12 = uVar12 + 1;
+      if (uVar4 == 0) {
+        bVar6 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+        if ((int)CONCAT71(extraout_var_14,bVar6) == 0) {
+          bVar6 = (ulonglong)uVar14 + 1 < uVar13;
+          bVar18 = (ulonglong)uVar14 + 1 == uVar13;
+LAB_0:
+          if (bVar6 || bVar18) {
+            *(char *)param_2 = (char)*puVar16;
+            param_2 = (u_long *)((longlong)param_2 + 1);
+          }
+        }
+        else if (uVar2 != 0) {
+          bVar6 = (ulonglong)uVar14 < uVar13 - 1;
+          bVar18 = (ulonglong)uVar14 == uVar13 - 1;
+          goto LAB_0;
+        }
+        puVar16 = puVar16 + 1;
+        bVar6 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+        if ((int)CONCAT71(extraout_var_15,bVar6) == 0) {
+          uVar14 = uVar14 + 1;
+        }
+        else {
+          bVar6 = uVar14 + 1 < uVar14;
+          uVar14 = uVar14 + 1;
+          if (bVar6) {
+            if ((undefined **)WPP_GLOBAL_Control == &WPP_GLOBAL_Control) {
+              return 0x57;
+            }
+            if ((WPP_GLOBAL_Control[0x1c] & 8) == 0) {
+              return 0x57;
+            }
+            uVar7 = 10;
+LAB_1:
+            WPP_SF_D(*(undefined8 *)(WPP_GLOBAL_Control + 0x10),uVar7,
+                     &WPP_5814d2702f5a3452d562aef88d9f293e_Traceguids,0xffffffff);
+            return 0x57;
+          }
+        }
       }
-      else if (uVar3 == 1) {
-        if ((ulonglong)uVar12 + 2 <= uVar11) {
-          uVar6 = htons((u_short)*puVar13);
-          *(u_short *)param_2 = uVar6;
-          param_2 = (u_long *)((longlong)param_2 + 2);
-        }
-        puVar13 = puVar13 + 1;
-        uVar12 = uVar12 + 2;
+      else if (uVar4 == 1) {
+        bVar6 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+        if ((int)CONCAT71(extraout_var_12,bVar6) == 0) {
+          bVar6 = (ulonglong)uVar14 + 2 < uVar13;
+          bVar18 = (ulonglong)uVar14 + 2 == uVar13;
+LAB_2:
+          if (bVar6 || bVar18) {
+            uVar8 = htons((u_short)*puVar16);
+            *(u_short *)param_2 = uVar8;
+            param_2 = (u_long *)((longlong)param_2 + 2);
+          }
+        }
+        else if (1 < uVar2) {
+          bVar6 = (ulonglong)uVar14 < uVar13 - 2;
+          bVar18 = (ulonglong)uVar14 == uVar13 - 2;
+          goto LAB_2;
+        }
+        puVar16 = puVar16 + 1;
+        bVar6 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+        if ((int)CONCAT71(extraout_var_13,bVar6) == 0) {
+          uVar14 = uVar14 + 2;
+        }
+        else {
+          bVar6 = uVar14 + 2 < uVar14;
+          uVar14 = uVar14 + 2;
+          if (bVar6) {
+            if ((undefined **)WPP_GLOBAL_Control == &WPP_GLOBAL_Control) {
+              return 0x57;
+            }
+            if ((WPP_GLOBAL_Control[0x1c] & 8) == 0) {
+              return 0x57;
+            }
+            uVar7 = 0xb;
+            goto LAB_1;
+          }
+        }
       }
-      else if (uVar3 == 2) {
-LAB_0:
-        if ((ulonglong)uVar12 + 4 <= uVar11) {
-          uVar7 = htonl(*puVar13);
-          *param_2 = uVar7;
-          param_2 = param_2 + 1;
-        }
-        puVar13 = puVar13 + 1;
-        uVar12 = uVar12 + 4;
+      else if (uVar4 == 2) {
+        bVar6 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+        if ((int)CONCAT71(extraout_var_10,bVar6) == 0) {
+          bVar6 = (ulonglong)uVar14 + 4 < uVar13;
+          bVar18 = (ulonglong)uVar14 + 4 == uVar13;
+LAB_3:
+          if (bVar6 || bVar18) {
+            uVar9 = htonl(*puVar16);
+            *param_2 = uVar9;
+            param_2 = param_2 + 1;
+          }
+        }
+        else if (3 < uVar2) {
+          bVar6 = (ulonglong)uVar14 < uVar13 - 4;
+          bVar18 = (ulonglong)uVar14 == uVar13 - 4;
+          goto LAB_3;
+        }
+        bVar6 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+        if ((int)CONCAT71(extraout_var_11,bVar6) == 0) {
+LAB_4:
+          puVar16 = puVar16 + 1;
+          uVar14 = uVar14 + 4;
+        }
+        else {
+          bVar6 = uVar14 + 4 < uVar14;
+          puVar16 = puVar16 + 1;
+          uVar14 = uVar14 + 4;
+          if (bVar6) {
+            if ((undefined **)WPP_GLOBAL_Control == &WPP_GLOBAL_Control) {
+              return 0x57;
+            }
+            if ((WPP_GLOBAL_Control[0x1c] & 8) == 0) {
+              return 0x57;
+            }
+            uVar7 = 0xc;
+            goto LAB_1;
+          }
+        }
       }
-      else if (uVar3 == 3) {
-        if ((ulonglong)uVar12 + 8 <= uVar11) {
-          uVar7 = htonl(*puVar13);
-          *param_2 = uVar7;
-          uVar7 = htonl(puVar13[1]);
-          param_2[1] = uVar7;
-          param_2 = param_2 + 2;
-        }
-        puVar13 = puVar13 + 2;
-        uVar12 = uVar12 + 8;
+      else if (uVar4 == 3) {
+        bVar6 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+        if ((int)CONCAT71(extraout_var_08,bVar6) == 0) {
+          bVar6 = (ulonglong)uVar14 + 8 < uVar13;
+          bVar18 = (ulonglong)uVar14 + 8 == uVar13;
+LAB_5:
+          if (bVar6 || bVar18) {
+            uVar9 = htonl(*puVar16);
+            *param_2 = uVar9;
+            uVar9 = htonl(puVar16[1]);
+            param_2[1] = uVar9;
+            param_2 = param_2 + 2;
+          }
+        }
+        else if (7 < uVar2) {
+          bVar6 = (ulonglong)uVar14 < uVar13 - 8;
+          bVar18 = (ulonglong)uVar14 == uVar13 - 8;
+          goto LAB_5;
+        }
+        bVar6 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+        if ((int)CONCAT71(extraout_var_09,bVar6) == 0) {
+          puVar16 = puVar16 + 2;
+          uVar14 = uVar14 + 8;
+        }
+        else {
+          bVar6 = uVar14 + 8 < uVar14;
+          puVar16 = puVar16 + 2;
+          uVar14 = uVar14 + 8;
+          if (bVar6) {
+            if ((undefined **)WPP_GLOBAL_Control == &WPP_GLOBAL_Control) {
+              return 0x57;
+            }
+            if ((WPP_GLOBAL_Control[0x1c] & 8) == 0) {
+              return 0x57;
+            }
+            uVar7 = 0xd;
+            goto LAB_1;
+          }
+        }
       }
       else {
-        if (uVar3 == 4) goto LAB_0;
-        if (uVar3 == 5) {
-          uVar7 = *puVar13;
-          puVar13 = puVar13 + 1;
+        if (uVar4 == 4) {
+          bVar6 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+          if ((int)CONCAT71(extraout_var_06,bVar6) == 0) {
+            bVar6 = (ulonglong)uVar14 + 4 < uVar13;
+            bVar18 = (ulonglong)uVar14 + 4 == uVar13;
+LAB_6:
+            if (bVar6 || bVar18) {
+              uVar9 = htonl(*puVar16);
+              *param_2 = uVar9;
+              param_2 = param_2 + 1;
+            }
+          }
+          else if (3 < uVar2) {
+            bVar6 = (ulonglong)uVar14 < uVar13 - 4;
+            bVar18 = (ulonglong)uVar14 == uVar13 - 4;
+            goto LAB_6;
+          }
+          bVar6 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+          if ((int)CONCAT71(extraout_var_07,bVar6) != 0) {
+            bVar6 = uVar14 + 4 < uVar14;
+            puVar16 = puVar16 + 1;
+            uVar14 = uVar14 + 4;
+            if (bVar6) {
+              if ((undefined **)WPP_GLOBAL_Control == &WPP_GLOBAL_Control) {
+                return 0x57;
+              }
+              if ((WPP_GLOBAL_Control[0x1c] & 8) == 0) {
+                return 0x57;
+              }
+              uVar7 = 0xe;
+              goto LAB_1;
+            }
+            goto LAB_7;
+          }
+          goto LAB_4;
+        }
+        if (uVar4 == 5) {
+          uVar9 = *puVar16;
+          puVar16 = puVar16 + 1;
           if ((*param_1 < 0x1f) && ((0x61200000U >> (*param_1 & 0x1f) & 1) != 0)) {
-            puVar9 = (u_long *)
-                     DhcpGetWireFormatNameFromUnicode
-                               ((byte *)param_2,(byte *)((uVar11 - 1) + (longlong)param_2),
-                                (char *)puVar13,local_48);
-            uVar10 = local_48[0];
-            if (puVar9 != (u_long *)0x0) {
-              param_2 = puVar9;
+            bVar6 = EvaluateCurrentState(&g_Feature_4072909113_62320162_FeatureDescriptorDetails);
+            if ((int)CONCAT71(extraout_var_03,bVar6) == 0) {
+              puVar11 = (u_long *)
+                        DhcpGetWireFormatNameFromUnicode
+                                  ((byte *)param_2,(byte *)((uVar13 - 1) + (longlong)param_2),
+                                   (char *)puVar16,local_48);
+              uVar17 = local_48[0];
+              if (puVar11 != (u_long *)0x0) {
+                param_2 = puVar11;
+              }
+            }
+            else {
+              if ((uVar2 < uVar14) || (uVar2 - uVar14 == 0)) goto LAB_7;
+              puVar11 = (u_long *)
+                        DhcpGetWireFormatNameFromUnicode
+                                  ((byte *)param_2,
+                                   (byte *)(((ulonglong)(uVar2 - uVar14) - 1) + (longlong)param_2),
+                                   (char *)puVar16,local_48);
+              uVar17 = local_48[0];
+              if (puVar11 != (u_long *)0x0) {
+                param_2 = puVar11;
+              }
             }
           }
           else {
-            uVar5 = DhcpUnicodeToOemSize((longlong)puVar13);
-            uVar10 = (uint)CONCAT62(extraout_var,uVar5);
-            local_48[0] = uVar10;
-            if (uVar12 + uVar10 <= uVar1) {
-              DhcpUnicodeToOem(puVar13,param_2);
-              param_2 = (u_long *)((longlong)param_2 + (CONCAT62(extraout_var,uVar5) & 0xffffffff));
-            }
-          }
-          uVar12 = uVar12 + uVar10;
-          puVar13 = (u_long *)
-                    ((longlong)puVar13 + ((ulonglong)(ushort)uVar7 + 3 & 0xfffffffffffffffc));
-        }
-        else if (uVar3 < 6) {
-LAB_1:
-          if (((undefined **)WPP_GLOBAL_Control != &WPP_GLOBAL_Control) &&
-             ((WPP_GLOBAL_Control[0x1c] & 8) != 0)) {
-            uVar5 = 0xb;
-LAB_2:
-            WPP_SF_(*(undefined8 *)(WPP_GLOBAL_Control + 0x10),uVar5,
-                    &WPP_1a6dd3075aa33686746b35695dc7f08b_Traceguids);
-          }
-        }
-        else if (uVar3 < 8) {
-          _Size = (ulonglong)(ushort)*puVar13;
-          local_48[0] = (uint)(ushort)*puVar13;
-          uVar12 = uVar12 + local_48[0];
-          if (uVar12 <= uVar1) {
-            memcpy(param_2,puVar13 + 1,_Size);
-            param_2 = (u_long *)((longlong)param_2 + _Size);
-          }
-          puVar13 = (u_long *)((longlong)(puVar13 + 1) + (_Size + 3 & 0xfffffffffffffffc));
-          if (((uVar14 != 0) && ((undefined **)WPP_GLOBAL_Control != &WPP_GLOBAL_Control)) &&
-             ((WPP_GLOBAL_Control[0x1c] & 8) != 0)) {
-            uVar5 = 10;
-            goto LAB_2;
-          }
+            uVar7 = DhcpUnicodeToOemSize((longlong)puVar16);
+            uVar17 = (uint)CONCAT62(extraout_var_16,uVar7);
+            local_48[0] = uVar17;
+            bVar6 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+            if ((int)CONCAT71(extraout_var_04,bVar6) == 0) {
+              bVar6 = uVar14 + uVar17 < uVar2;
+              bVar18 = uVar14 + uVar17 == uVar2;
+            }
+            else {
+              if (uVar2 < uVar17) goto LAB_8;
+              bVar6 = uVar14 < uVar2 - uVar17;
+              bVar18 = uVar14 == uVar2 - uVar17;
+            }
+            if (bVar6 || bVar18) {
+              DhcpUnicodeToOem(puVar16,param_2);
+              param_2 = (u_long *)
+                        ((longlong)param_2 + (CONCAT62(extraout_var_16,uVar7) & 0xffffffff));
+            }
+          }
+LAB_8:
+          bVar6 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+          if (((int)CONCAT71(extraout_var_05,bVar6) != 0) && (uVar14 + uVar17 < uVar14)) {
+            if ((undefined **)WPP_GLOBAL_Control == &WPP_GLOBAL_Control) {
+              return 0x57;
+            }
+            if ((WPP_GLOBAL_Control[0x1c] & 8) == 0) {
+              return 0x57;
+            }
+            uVar7 = 0xf;
+            goto LAB_9;
+          }
+          uVar14 = uVar14 + uVar17;
+          puVar16 = (u_long *)
+                    ((longlong)puVar16 + ((ulonglong)(ushort)uVar9 + 3 & 0xfffffffffffffffc));
         }
         else {
-          if (uVar3 != 8) goto LAB_1;
-          uVar7 = *puVar13;
-          uVar12 = uVar12 + 0x10;
-          local_48[0] = 0x10;
-          if ((uVar12 <= uVar1) &&
-             (uVar8 = MemAddr6ConvertIPv6StringToByte(puVar13 + 1,param_1,(undefined8 *)param_2),
-             (int)uVar8 == 0)) {
-            param_2 = param_2 + 4;
-          }
-          puVar13 = (u_long *)
-                    ((longlong)(puVar13 + 1) + ((ulonglong)(ushort)uVar7 + 3 & 0xfffffffffffffffc));
+          if (uVar4 < 6) {
+LAB_10:
+            if (((undefined **)WPP_GLOBAL_Control == &WPP_GLOBAL_Control) ||
+               ((WPP_GLOBAL_Control[0x1c] & 8) == 0)) goto LAB_7;
+            uVar7 = 0x13;
+          }
+          else {
+            if (7 < uVar4) {
+              if (uVar4 != 8) goto LAB_10;
+              uVar9 = *puVar16;
+              local_48[0] = 0x10;
+              puVar12 = param_1;
+              bVar6 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+              if ((int)CONCAT71(extraout_var,bVar6) == 0) {
+                bVar6 = uVar14 + 0x10 < uVar2;
+                bVar18 = uVar14 + 0x10 == uVar2;
+LAB_11:
+                if ((bVar6 || bVar18) &&
+                   (uVar10 = MemAddr6ConvertIPv6StringToByte
+                                       (puVar16 + 1,puVar12,(undefined8 *)param_2), (int)uVar10 == 0
+                   )) {
+                  param_2 = param_2 + 4;
+                }
+              }
+              else if (0xf < uVar2) {
+                bVar6 = uVar14 < uVar2 - 0x10;
+                bVar18 = uVar14 == uVar2 - 0x10;
+                goto LAB_11;
+              }
+              bVar6 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+              if (((int)CONCAT71(extraout_var_00,bVar6) != 0) && (uVar14 + 0x10 < uVar14)) {
+                if ((undefined **)WPP_GLOBAL_Control == &WPP_GLOBAL_Control) {
+                  return 0x57;
+                }
+                if ((WPP_GLOBAL_Control[0x1c] & 8) == 0) {
+                  return 0x57;
+                }
+                uVar7 = 0x10;
+                goto LAB_9;
+              }
+              puVar16 = (u_long *)
+                        ((longlong)(puVar16 + 1) +
+                        ((ulonglong)(ushort)uVar9 + 3 & 0xfffffffffffffffc));
+              uVar14 = uVar14 + 0x10;
+              goto LAB_7;
+            }
+            uVar1 = (ushort)*puVar16;
+            _Size = (ulonglong)uVar1;
+            local_48[0] = (uint)uVar1;
+            bVar6 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+            uVar17 = (uint)uVar1;
+            if ((int)CONCAT71(extraout_var_01,bVar6) == 0) {
+              bVar6 = uVar14 + uVar1 < uVar2;
+              bVar18 = uVar14 + uVar1 == uVar2;
+LAB_12:
+              if (bVar6 || bVar18) {
+                memcpy(param_2,puVar16 + 1,_Size);
+                param_2 = (u_long *)((longlong)param_2 + _Size);
+              }
+            }
+            else if (uVar1 < uVar2 || uVar17 == uVar2) {
+              bVar6 = uVar14 < uVar2 - uVar17;
+              bVar18 = uVar14 == uVar2 - uVar17;
+              goto LAB_12;
+            }
+            puVar16 = (u_long *)((longlong)(puVar16 + 1) + (_Size + 3 & 0xfffffffffffffffc));
+            bVar6 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+            if ((int)CONCAT71(extraout_var_02,bVar6) == 0) {
+              uVar14 = uVar14 + uVar17;
+            }
+            else {
+              bVar6 = uVar14 + uVar1 < uVar14;
+              uVar14 = uVar14 + uVar1;
+              if (bVar6) {
+                if ((undefined **)WPP_GLOBAL_Control == &WPP_GLOBAL_Control) {
+                  return 0x57;
+                }
+                if ((WPP_GLOBAL_Control[0x1c] & 8) == 0) {
+                  return 0x57;
+                }
+                uVar7 = 0x11;
+LAB_9:
+                WPP_SF_dD(*(undefined8 *)(WPP_GLOBAL_Control + 0x10),uVar7,
+                          &WPP_5814d2702f5a3452d562aef88d9f293e_Traceguids,0xffffffff);
+                return 0x57;
+              }
+            }
+            if (((uVar15 == 0) || ((undefined **)WPP_GLOBAL_Control == &WPP_GLOBAL_Control)) ||
+               ((WPP_GLOBAL_Control[0x1c] & 8) == 0)) goto LAB_7;
+            uVar7 = 0x12;
+          }
+          WPP_SF_(*(undefined8 *)(WPP_GLOBAL_Control + 0x10),uVar7,
+                  &WPP_5814d2702f5a3452d562aef88d9f293e_Traceguids);
         }
       }
-      uVar14 = uVar14 + 1;
-    } while (uVar14 < uVar2);
+LAB_7:
+      uVar15 = uVar15 + 1;
+    } while (uVar15 < uVar3);
   }
-  *param_3 = uVar12;
-  return -(uVar1 < uVar12) & 0xea;
+  *param_3 = uVar14;
+  return -(uVar2 < uVar14) & 0xea;
 }
 

```


## DhcpParseRegistryOption

### Match Info



|Key|dhcpssvc-06.dll - dhcpssvc-07.dll|
| :---: | :---: |
|diff_type|code,length,sig,address,called|
|ratio|0.1|
|i_ratio|0.32|
|m_ratio|0.71|
|b_ratio|0.31|
|match_types|SymbolsHash|

### Function Meta Diff



|Key|dhcpssvc-06.dll|dhcpssvc-07.dll|
| :---: | :---: | :---: |
|name|DhcpParseRegistryOption|DhcpParseRegistryOption|
|fullname|DhcpParseRegistryOption|DhcpParseRegistryOption|
|refcount|3|3|
|`length`|923|1773|
|`called`|ConvertUnicodeToPunycode<br>DhcpUnicodeToOem<br>DhcpUnicodeToOemSize<br>KERNEL32.DLL::WideCharToMultiByte<br>WPP_SF_<br>WS2_32.DLL::htonl<br>WS2_32.DLL::htons<br>memcpy|<details><summary>Expand for full list:<br>ConvertUnicodeToPunycode<br>DhcpUnicodeToOem<br>DhcpUnicodeToOemSize<br>EvaluateCurrentState<br>KERNEL32.DLL::WideCharToMultiByte<br>WPP_SF_<br>WPP_SF_D<br>WPP_SF_dD<br>WS2_32.DLL::htonl<br>WS2_32.DLL::htons<br>memcpy</summary></details>|
|calling|DhcpOptPolicyGetOption|DhcpOptPolicyGetOption|
|paramcount|6|6|
|`address`|18007d308|18007d958|
|`sig`|byte __fastcall DhcpParseRegistryOption(int * param_1, int param_2, u_long * param_3, uint * param_4, int param_5, int param_6)|byte __fastcall DhcpParseRegistryOption(int * param_1, LPCWSTR param_2, LPCWSTR param_3, uint * param_4, int param_5, int param_6)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|False|False|

### DhcpParseRegistryOption Called Diff


```diff
--- DhcpParseRegistryOption called
+++ DhcpParseRegistryOption called
@@ -3,0 +4 @@
+EvaluateCurrentState
@@ -5,0 +7,2 @@
+WPP_SF_D
+WPP_SF_dD
```


### DhcpParseRegistryOption Diff


```diff
--- DhcpParseRegistryOption
+++ DhcpParseRegistryOption
@@ -1,205 +1,424 @@
 
 byte DhcpParseRegistryOption
-               (int *param_1,int param_2,u_long *param_3,uint *param_4,int param_5,int param_6)
+               (int *param_1,LPCWSTR param_2,LPCWSTR param_3,uint *param_4,int param_5,int param_6)
 
 {
-  ushort uVar1;
-  uint uVar2;
-  uint uVar3;
-  int iVar4;
-  byte bVar5;
-  undefined2 uVar6;
-  u_short uVar7;
+  uint uVar1;
+  int iVar2;
+  bool bVar3;
+  byte bVar4;
+  undefined2 uVar5;
+  WCHAR WVar6;
+  uint uVar7;
   DWORD DVar8;
-  u_long uVar9;
-  undefined6 extraout_var;
-  undefined6 extraout_var_00;
-  ulonglong uVar10;
+  uint uVar9;
+  u_long uVar10;
+  undefined7 extraout_var;
+  undefined7 extraout_var_00;
+  undefined7 extraout_var_01;
+  undefined6 extraout_var_14;
+  undefined6 extraout_var_15;
+  undefined7 extraout_var_02;
+  undefined7 extraout_var_03;
+  undefined7 extraout_var_04;
+  undefined7 extraout_var_05;
+  undefined7 extraout_var_06;
+  undefined7 extraout_var_07;
+  undefined7 extraout_var_08;
+  undefined7 extraout_var_09;
+  undefined7 extraout_var_10;
+  undefined7 extraout_var_11;
+  undefined7 extraout_var_12;
+  undefined7 extraout_var_13;
   ulonglong uVar11;
-  u_long *puVar12;
+  uint uVar12;
+  ulonglong uVar13;
+  LPCWSTR pWVar14;
   LPCWSTR lpWideCharStr;
-  uint uVar13;
-  ulonglong uVar14;
-  int iVar15;
-  uint uVar16;
-  bool bVar17;
+  bool bVar15;
+  bool bVar16;
   uint local_res8 [2];
   uint local_res10;
-  u_long *local_res18;
+  LPCWSTR local_res18;
   uint *local_res20;
+  uint local_58;
   
-  uVar2 = *param_4;
-  uVar14 = (ulonglong)uVar2;
-  uVar10 = 0;
-  uVar16 = 0;
+  uVar1 = *param_4;
+  uVar13 = (ulonglong)uVar1;
+  uVar12 = 0;
   *param_4 = 0;
   local_res18 = param_3;
   local_res20 = param_4;
-  if (*param_1 == param_2) {
-    uVar3 = param_1[2];
-    puVar12 = (u_long *)(param_1 + 4);
-    iVar4 = param_1[1];
-    local_res10 = 0;
-    uVar11 = uVar10;
-    if (uVar3 != 0) {
+  if (*param_1 == (int)param_2) {
+    uVar9 = param_1[2];
+    local_58 = 0;
+    iVar2 = param_1[1];
+    pWVar14 = (LPCWSTR)(param_1 + 4);
+    local_res10 = uVar9;
+    if (uVar9 != 0) {
       do {
-        uVar13 = (uint)uVar10;
-        bVar17 = false;
-        iVar15 = (int)uVar11;
-        if (iVar4 == 0) {
-          if (uVar11 + 1 <= uVar14) {
-            *(char *)param_3 = (char)*puVar12;
-            param_3 = (u_long *)((longlong)param_3 + 1);
-            local_res18 = param_3;
-          }
-          puVar12 = puVar12 + 1;
-          uVar11 = (ulonglong)(iVar15 + 1);
+        if (iVar2 == 0) {
+          bVar3 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+          if ((int)CONCAT71(extraout_var_12,bVar3) == 0) {
+            bVar3 = (ulonglong)uVar12 + 1 < uVar13;
+            bVar15 = (ulonglong)uVar12 + 1 == uVar13;
+LAB_0:
+            if (bVar3 || bVar15) {
+              *(char *)param_3 = (char)*pWVar14;
+              param_3 = (LPCWSTR)((longlong)param_3 + 1);
+              local_res18 = param_3;
+            }
+          }
+          else if (uVar1 != 0) {
+            bVar3 = (ulonglong)uVar12 < uVar13 - 1;
+            bVar15 = (ulonglong)uVar12 == uVar13 - 1;
+            goto LAB_0;
+          }
+          lpWideCharStr = pWVar14 + 2;
+          bVar3 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+          if ((int)CONCAT71(extraout_var_13,bVar3) == 0) {
+            uVar12 = uVar12 + 1;
+          }
+          else {
+            bVar3 = uVar12 + 1 < uVar12;
+            uVar12 = uVar12 + 1;
+            if (bVar3) {
+              if (((undefined **)WPP_GLOBAL_Control != &WPP_GLOBAL_Control) &&
+                 ((WPP_GLOBAL_Control[0x1c] & 8) != 0)) {
+                uVar5 = 0xb;
+                goto LAB_1;
+              }
+              goto LAB_2;
+            }
+          }
         }
-        else if (iVar4 == 1) {
-          if (uVar11 + 2 <= uVar14) {
-            uVar7 = htons((u_short)*puVar12);
-            *(u_short *)param_3 = uVar7;
-            param_3 = (u_long *)((longlong)param_3 + 2);
-            local_res18 = param_3;
-            uVar13 = local_res10;
-          }
-          puVar12 = puVar12 + 1;
-          uVar11 = (ulonglong)(iVar15 + 2);
-        }
-        else if (iVar4 == 2) {
-LAB_0:
-          if (uVar11 + 4 <= uVar14) {
-            uVar9 = htonl(*puVar12);
-            *param_3 = uVar9;
-            param_3 = param_3 + 1;
-            local_res18 = param_3;
-            uVar13 = local_res10;
-          }
-          puVar12 = puVar12 + 1;
-          uVar11 = (ulonglong)(iVar15 + 4);
-        }
-        else if (iVar4 == 3) {
-          if (uVar11 + 8 <= uVar14) {
-            uVar9 = htonl(*puVar12);
-            *param_3 = uVar9;
-            uVar9 = htonl(puVar12[1]);
-            param_3[1] = uVar9;
-            param_3 = param_3 + 2;
-            local_res18 = param_3;
-            uVar13 = local_res10;
-          }
-          puVar12 = puVar12 + 2;
-          uVar11 = (ulonglong)(iVar15 + 8);
+        else if (iVar2 == 1) {
+          bVar3 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+          if ((int)CONCAT71(extraout_var_10,bVar3) == 0) {
+            bVar3 = (ulonglong)uVar12 + 2 < uVar13;
+            bVar15 = (ulonglong)uVar12 + 2 == uVar13;
+LAB_3:
+            if (bVar3 || bVar15) {
+              WVar6 = htons(*pWVar14);
+              *param_3 = WVar6;
+              param_3 = param_3 + 1;
+              local_res18 = param_3;
+            }
+          }
+          else if (1 < uVar1) {
+            bVar3 = (ulonglong)uVar12 < uVar13 - 2;
+            bVar15 = (ulonglong)uVar12 == uVar13 - 2;
+            goto LAB_3;
+          }
+          lpWideCharStr = pWVar14 + 2;
+          bVar3 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+          if ((int)CONCAT71(extraout_var_11,bVar3) == 0) {
+            uVar12 = uVar12 + 2;
+          }
+          else {
+            bVar3 = uVar12 + 2 < uVar12;
+            uVar12 = uVar12 + 2;
+            if (bVar3) {
+              if (((undefined **)WPP_GLOBAL_Control != &WPP_GLOBAL_Control) &&
+                 ((WPP_GLOBAL_Control[0x1c] & 8) != 0)) {
+                uVar5 = 0xc;
+                goto LAB_1;
+              }
+              goto LAB_2;
+            }
+          }
         }
         else {
-          if (iVar4 == 4) goto LAB_0;
-          if (iVar4 != 5) {
-            if (iVar4 - 6U < 2) {
-              uVar1 = (ushort)*puVar12;
-              uVar16 = iVar15 + (uint)uVar1;
-              uVar11 = (ulonglong)uVar16;
-              if (uVar16 <= uVar2) {
-                memcpy(param_3,puVar12 + 1,(ulonglong)(uint)uVar1);
-                param_3 = (u_long *)((longlong)param_3 + (ulonglong)uVar1);
+          if (iVar2 == 2) {
+            bVar3 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+            if ((int)CONCAT71(extraout_var_08,bVar3) == 0) {
+              bVar3 = (ulonglong)uVar12 + 4 < uVar13;
+              bVar15 = (ulonglong)uVar12 + 4 == uVar13;
+LAB_4:
+              if (bVar3 || bVar15) {
+                uVar10 = htonl(*(u_long *)pWVar14);
+                *(u_long *)param_3 = uVar10;
+                param_3 = param_3 + 2;
                 local_res18 = param_3;
-                uVar13 = local_res10;
-              }
-              puVar12 = (u_long *)
-                        ((longlong)(puVar12 + 1) + ((ulonglong)uVar1 + 3 & 0xfffffffffffffffc));
-              if (((uVar13 != 0) && ((undefined **)WPP_GLOBAL_Control != &WPP_GLOBAL_Control)) &&
+              }
+            }
+            else if (3 < uVar1) {
+              bVar3 = (ulonglong)uVar12 < uVar13 - 4;
+              bVar15 = (ulonglong)uVar12 == uVar13 - 4;
+              goto LAB_4;
+            }
+            lpWideCharStr = pWVar14 + 2;
+            bVar3 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+            if ((int)CONCAT71(extraout_var_09,bVar3) == 0) {
+LAB_5:
+              lpWideCharStr = pWVar14 + 2;
+              uVar12 = uVar12 + 4;
+              goto LAB_6;
+            }
+            bVar3 = uVar12 <= uVar12 + 4;
+            uVar12 = uVar12 + 4;
+            if (bVar3) goto LAB_6;
+            if (((undefined **)WPP_GLOBAL_Control != &WPP_GLOBAL_Control) &&
+               ((WPP_GLOBAL_Control[0x1c] & 8) != 0)) {
+              uVar5 = 0xd;
+LAB_1:
+              WPP_SF_D(*(undefined8 *)(WPP_GLOBAL_Control + 0x10),uVar5,
+                       &WPP_99c5e7b870933bc41cfe6ed97357e08f_Traceguids,0xffffffff);
+            }
+            goto LAB_2;
+          }
+          if (iVar2 == 3) {
+            bVar3 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+            if ((int)CONCAT71(extraout_var_06,bVar3) == 0) {
+              bVar3 = (ulonglong)uVar12 + 8 < uVar13;
+              bVar15 = (ulonglong)uVar12 + 8 == uVar13;
+LAB_7:
+              if (bVar3 || bVar15) {
+                uVar10 = htonl(*(u_long *)pWVar14);
+                *(u_long *)param_3 = uVar10;
+                uVar10 = htonl(*(u_long *)(pWVar14 + 2));
+                *(u_long *)(param_3 + 2) = uVar10;
+                param_3 = param_3 + 4;
+                local_res18 = param_3;
+              }
+            }
+            else if (7 < uVar1) {
+              bVar3 = (ulonglong)uVar12 < uVar13 - 8;
+              bVar15 = (ulonglong)uVar12 == uVar13 - 8;
+              goto LAB_7;
+            }
+            lpWideCharStr = pWVar14 + 4;
+            bVar3 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+            if ((int)CONCAT71(extraout_var_07,bVar3) == 0) {
+              uVar12 = uVar12 + 8;
+            }
+            else {
+              bVar3 = uVar12 + 8 < uVar12;
+              uVar12 = uVar12 + 8;
+              if (bVar3) {
+                if (((undefined **)WPP_GLOBAL_Control != &WPP_GLOBAL_Control) &&
+                   ((WPP_GLOBAL_Control[0x1c] & 8) != 0)) {
+                  uVar5 = 0xe;
+                  goto LAB_1;
+                }
+                goto LAB_2;
+              }
+            }
+          }
+          else {
+            if (iVar2 == 4) {
+              bVar3 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+              if ((int)CONCAT71(extraout_var_04,bVar3) == 0) {
+                bVar3 = (ulonglong)uVar12 + 4 < uVar13;
+                bVar15 = (ulonglong)uVar12 + 4 == uVar13;
+LAB_8:
+                if (bVar3 || bVar15) {
+                  uVar10 = htonl(*(u_long *)pWVar14);
+                  *(u_long *)param_3 = uVar10;
+                  param_3 = param_3 + 2;
+                  local_res18 = param_3;
+                }
+              }
+              else if (3 < uVar1) {
+                bVar3 = (ulonglong)uVar12 < uVar13 - 4;
+                bVar15 = (ulonglong)uVar12 == uVar13 - 4;
+                goto LAB_8;
+              }
+              lpWideCharStr = pWVar14 + 2;
+              bVar3 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+              if ((int)CONCAT71(extraout_var_05,bVar3) == 0) goto LAB_5;
+              bVar3 = uVar12 <= uVar12 + 4;
+              uVar12 = uVar12 + 4;
+              if (bVar3) goto LAB_6;
+              if (((undefined **)WPP_GLOBAL_Control != &WPP_GLOBAL_Control) &&
                  ((WPP_GLOBAL_Control[0x1c] & 8) != 0)) {
-                uVar6 = 0xb;
-LAB_1:
-                WPP_SF_(*(undefined8 *)(WPP_GLOBAL_Control + 0x10),uVar6,
-                        &WPP_dbd43005a11136f0ba5d64ae0a4dbce6_Traceguids);
-                uVar13 = local_res10;
-              }
-            }
-            else if (((undefined **)WPP_GLOBAL_Control != &WPP_GLOBAL_Control) &&
-                    ((WPP_GLOBAL_Control[0x1c] & 8) != 0)) {
-              uVar6 = 0xc;
-              goto LAB_1;
-            }
-            goto LAB_2;
-          }
-          uVar10 = (ulonglong)(ushort)*puVar12;
-          lpWideCharStr = (LPCWSTR)(puVar12 + 1);
-          if (param_6 == 0) {
-            if (param_5 == 0) {
-              uVar6 = DhcpUnicodeToOemSize((longlong)lpWideCharStr);
-              uVar16 = (uint)CONCAT62(extraout_var_00,uVar6);
-              goto LAB_3;
-            }
-            uVar16 = WideCharToMultiByte(0xfde9,0,lpWideCharStr,-1,(LPSTR)0x0,0,(LPCSTR)0x0,
-                                         (LPBOOL)0x0);
-            uVar11 = (ulonglong)uVar16;
-LAB_4:
-            uVar16 = (uint)uVar11;
-            if (uVar16 + iVar15 <= uVar2) {
-              if (param_5 == 0) {
-                DhcpUnicodeToOem(lpWideCharStr,param_3);
+                uVar5 = 0xf;
+                goto LAB_1;
+              }
+              goto LAB_2;
+            }
+            if (iVar2 == 5) {
+              WVar6 = *pWVar14;
+              bVar3 = false;
+              lpWideCharStr = pWVar14 + 2;
+              if (param_6 == 0) {
+                if (param_5 == 0) {
+                  uVar5 = DhcpUnicodeToOemSize((longlong)lpWideCharStr);
+                  uVar9 = (uint)CONCAT62(extraout_var_15,uVar5);
+                  goto LAB_9;
+                }
+                param_2 = (LPCWSTR)0x0;
+                uVar9 = WideCharToMultiByte(0xfde9,0,lpWideCharStr,-1,(LPSTR)0x0,0,(LPCSTR)0x0,
+                                            (LPBOOL)0x0);
+                uVar11 = (ulonglong)uVar9;
+LAB_10:
+                bVar15 = EvaluateCurrentState
+                                   (&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+                uVar7 = (uint)uVar11;
+                if ((int)CONCAT71(extraout_var_02,bVar15) == 0) {
+                  bVar15 = uVar7 + uVar12 < uVar1;
+                  bVar16 = uVar7 + uVar12 == uVar1;
+                }
+                else {
+                  if (uVar1 < uVar7) goto LAB_11;
+                  bVar15 = uVar12 < uVar1 - uVar7;
+                  bVar16 = uVar12 == uVar1 - uVar7;
+                }
+                if (bVar15 || bVar16) {
+                  if (param_5 == 0) {
+                    param_2 = param_3;
+                    DhcpUnicodeToOem(lpWideCharStr,param_3);
+                  }
+                  else {
+                    param_2 = (LPCWSTR)0x0;
+                    WideCharToMultiByte(0xfde9,0,lpWideCharStr,-1,(LPSTR)param_3,uVar7,(LPCSTR)0x0,
+                                        (LPBOOL)0x0);
+                  }
+                  param_3 = (LPCWSTR)((longlong)param_3 + (uVar11 & 0xffffffff));
+                  local_res18 = param_3;
+                }
               }
               else {
-                WideCharToMultiByte(0xfde9,0,lpWideCharStr,-1,(LPSTR)param_3,uVar16,(LPCSTR)0x0,
-                                    (LPBOOL)0x0);
-              }
-              param_3 = (u_long *)((longlong)param_3 + (uVar11 & 0xffffffff));
-              local_res18 = param_3;
-            }
-          }
-          else {
-            local_res8[0] = uVar2;
-            DVar8 = ConvertUnicodeToPunycode
-                              (lpWideCharStr,&WPP_GLOBAL_Control,&local_res18,local_res8);
-            if (DVar8 == 0) {
-              uVar11 = (ulonglong)(int)local_res8[0];
-              param_3 = (u_long *)((longlong)local_res18 + uVar11);
-              local_res18 = param_3;
+                bVar15 = EvaluateCurrentState
+                                   (&g_Feature_3788214586_62401766_FeatureDescriptorDetails);
+                uVar7 = uVar1;
+                if ((int)CONCAT71(extraout_var_01,bVar15) != 0) {
+                  if (uVar1 < uVar12) goto LAB_6;
+                  uVar7 = uVar1 - uVar12;
+                  if (0x7fffffff < uVar1 - uVar12) {
+                    if (((undefined **)WPP_GLOBAL_Control != &WPP_GLOBAL_Control) &&
+                       ((WPP_GLOBAL_Control[0x1c] & 8) != 0)) {
+                      WPP_SF_(*(undefined8 *)(WPP_GLOBAL_Control + 0x10),0x10,
+                              &WPP_99c5e7b870933bc41cfe6ed97357e08f_Traceguids);
+                    }
+                    return 8;
+                  }
+                }
+                local_res8[0] = uVar7;
+                DVar8 = ConvertUnicodeToPunycode(lpWideCharStr,param_2,&local_res18,local_res8);
+                if (DVar8 == 0) {
+                  uVar11 = (ulonglong)(int)local_res8[0];
+                  param_3 = (LPCWSTR)((longlong)local_res18 + uVar11);
+                  local_res18 = param_3;
+                }
+                else {
+                  bVar3 = true;
+                  if (param_5 == 0) {
+                    uVar5 = DhcpUnicodeToOemSize((longlong)lpWideCharStr);
+                    uVar9 = (uint)CONCAT62(extraout_var_14,uVar5);
+                    param_3 = local_res18;
+                  }
+                  else {
+                    param_2 = (LPCWSTR)0x0;
+                    uVar9 = WideCharToMultiByte(0xfde9,0,lpWideCharStr,-1,(LPSTR)0x0,0,(LPCSTR)0x0,
+                                                (LPBOOL)0x0);
+                    param_3 = local_res18;
+                  }
+LAB_9:
+                  uVar11 = (ulonglong)uVar9;
+                }
+                uVar7 = (uint)uVar11;
+                if ((param_6 == 0) || (bVar3)) goto LAB_10;
+              }
+LAB_11:
+              bVar15 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+              if (((int)CONCAT71(extraout_var_03,bVar15) != 0) && (uVar7 + uVar12 < uVar12)) {
+                if (((undefined **)WPP_GLOBAL_Control != &WPP_GLOBAL_Control) &&
+                   ((WPP_GLOBAL_Control[0x1c] & 8) != 0)) {
+                  uVar5 = 0x11;
+LAB_12:
+                  WPP_SF_dD(*(undefined8 *)(WPP_GLOBAL_Control + 0x10),uVar5,
+                            &WPP_99c5e7b870933bc41cfe6ed97357e08f_Traceguids,0xffffffff);
+                }
+                goto LAB_2;
+              }
+              if ((param_6 == 0) || (bVar3)) {
+                if (0xffffffff < (ulonglong)uVar7 * 2) goto LAB_2;
+                uVar11 = (ulonglong)uVar7 * 2 & 0xffffffff;
+              }
+              else {
+                uVar11 = (ulonglong)(ushort)WVar6;
+              }
+              lpWideCharStr = (LPCWSTR)((longlong)lpWideCharStr + (uVar11 + 3 & 0xfffffffffffffffc))
+              ;
+              uVar9 = local_res10;
+              uVar12 = uVar7 + uVar12;
+            }
+            else if (iVar2 - 6U < 2) {
+              WVar6 = *pWVar14;
+              uVar11 = (ulonglong)(ushort)WVar6;
+              pWVar14 = pWVar14 + 2;
+              bVar3 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+              if ((int)CONCAT71(extraout_var,bVar3) == 0) {
+                bVar3 = (ushort)WVar6 + uVar12 < uVar1;
+                bVar15 = (ushort)WVar6 + uVar12 == uVar1;
+LAB_13:
+                if (bVar3 || bVar15) {
+                  param_2 = pWVar14;
+                  memcpy(param_3,pWVar14,uVar11);
+                  param_3 = (LPCWSTR)((longlong)param_3 + uVar11);
+                  uVar9 = local_res10;
+                  local_res18 = param_3;
+                }
+              }
+              else if ((ushort)WVar6 <= uVar1) {
+                uVar7 = uVar1 - (ushort)WVar6;
+                bVar3 = uVar12 < uVar7;
+                bVar15 = uVar12 == uVar7;
+                goto LAB_13;
+              }
+              pWVar14 = (LPCWSTR)((longlong)pWVar14 + (uVar11 + 3 & 0xfffffffffffffffc));
+              bVar3 = EvaluateCurrentState(&g_Feature_661624120_62489943_FeatureDescriptorDetails);
+              if ((int)CONCAT71(extraout_var_00,bVar3) != 0) {
+                bVar3 = uVar12 <= (ushort)WVar6 + uVar12;
+                uVar12 = (ushort)WVar6 + uVar12;
+                if (bVar3) goto LAB_14;
+                if (((undefined **)WPP_GLOBAL_Control != &WPP_GLOBAL_Control) &&
+                   ((WPP_GLOBAL_Control[0x1c] & 8) != 0)) {
+                  uVar5 = 0x12;
+                  goto LAB_12;
+                }
+                goto LAB_2;
+              }
+              uVar12 = uVar12 + (ushort)WVar6;
+LAB_14:
+              lpWideCharStr = pWVar14;
+              if (((local_58 != 0) && ((undefined **)WPP_GLOBAL_Control != &WPP_GLOBAL_Control)) &&
+                 ((WPP_GLOBAL_Control[0x1c] & 8) != 0)) {
+                param_2 = (LPCWSTR)0x13;
+                goto LAB_15;
+              }
             }
             else {
-              bVar17 = true;
-              if (param_5 == 0) {
-                uVar6 = DhcpUnicodeToOemSize((longlong)lpWideCharStr);
-                uVar16 = (uint)CONCAT62(extraout_var,uVar6);
-                param_3 = local_res18;
-              }
-              else {
-                uVar16 = WideCharToMultiByte(0xfde9,0,lpWideCharStr,-1,(LPSTR)0x0,0,(LPCSTR)0x0,
-                                             (LPBOOL)0x0);
-                param_3 = local_res18;
-              }
-LAB_3:
-              uVar11 = (ulonglong)uVar16;
-            }
-            uVar16 = (uint)uVar11;
-            if ((param_6 == 0) || (bVar17)) goto LAB_4;
-          }
-          uVar11 = (ulonglong)(iVar15 + uVar16);
-          if ((param_6 == 0) || (bVar17)) {
-            if (0xffffffff < (ulonglong)uVar16 * 2) goto LAB_5;
-            uVar10 = (ulonglong)uVar16 * 2 & 0xffffffff;
-          }
-          puVar12 = (u_long *)((longlong)lpWideCharStr + (uVar10 + 3 & 0xfffffffffffffffc));
-          uVar13 = local_res10;
+              lpWideCharStr = pWVar14;
+              if (((undefined **)WPP_GLOBAL_Control != &WPP_GLOBAL_Control) &&
+                 ((WPP_GLOBAL_Control[0x1c] & 8) != 0)) {
+                param_2 = (LPCWSTR)0x14;
+LAB_15:
+                WPP_SF_(*(undefined8 *)(WPP_GLOBAL_Control + 0x10),(short)param_2,
+                        &WPP_99c5e7b870933bc41cfe6ed97357e08f_Traceguids);
+                lpWideCharStr = pWVar14;
+              }
+            }
+          }
         }
-LAB_2:
-        uVar16 = (uint)uVar11;
-        local_res10 = uVar13 + 1;
-        uVar10 = (ulonglong)local_res10;
-      } while (local_res10 < uVar3);
+LAB_6:
+        local_58 = local_58 + 1;
+        pWVar14 = lpWideCharStr;
+      } while (local_58 < uVar9);
     }
-    *local_res20 = uVar16;
-    bVar5 = -(uVar2 < uVar16) & 0xea;
+    *local_res20 = uVar12;
+    bVar4 = -(uVar1 < uVar12) & 0xea;
   }
   else {
     if (((undefined **)WPP_GLOBAL_Control != &WPP_GLOBAL_Control) &&
        ((WPP_GLOBAL_Control[0x1c] & 0x10) != 0)) {
       WPP_SF_(*(undefined8 *)(WPP_GLOBAL_Control + 0x10),10,
-              &WPP_dbd43005a11136f0ba5d64ae0a4dbce6_Traceguids);
+              &WPP_99c5e7b870933bc41cfe6ed97357e08f_Traceguids);
     }
-LAB_5:
-    bVar5 = 0x57;
+LAB_2:
+    bVar4 = 0x57;
   }
-  return bVar5;
+  return bVar4;
 }
 

```


## AddVendorOptDefsFunc6

### Match Info



|Key|dhcpssvc-06.dll - dhcpssvc-07.dll|
| :---: | :---: |
|diff_type|code,length,address,called|
|ratio|0.69|
|i_ratio|0.61|
|m_ratio|0.95|
|b_ratio|0.95|
|match_types|SymbolsHash|

### Function Meta Diff



|Key|dhcpssvc-06.dll|dhcpssvc-07.dll|
| :---: | :---: | :---: |
|name|AddVendorOptDefsFunc6|AddVendorOptDefsFunc6|
|fullname|AddVendorOptDefsFunc6|AddVendorOptDefsFunc6|
|refcount|3|3|
|`length`|270|302|
|`called`|CloneLPWSTR<br>DhcpGetOptionDef6Internal<br>KERNEL32.DLL::LocalFree<br>MemServer6GetClassDef|CloneLPWSTR<br>DhcpGetOptionDef6Internal<br>EvaluateCurrentState<br>KERNEL32.DLL::LocalFree<br>MemServer6GetClassDef|
|calling|||
|paramcount|6|6|
|`address`|18003ab00|18003b130|
|sig|undefined __fastcall AddVendorOptDefsFunc6(uint * param_1, undefined8 param_2, int param_3, uint * param_4, uint * param_5, longlong param_6)|undefined __fastcall AddVendorOptDefsFunc6(uint * param_1, undefined8 param_2, int param_3, uint * param_4, uint * param_5, longlong param_6)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|False|False|

### AddVendorOptDefsFunc6 Called Diff


```diff
--- AddVendorOptDefsFunc6 called
+++ AddVendorOptDefsFunc6 called
@@ -2,0 +3 @@
+EvaluateCurrentState
```


### AddVendorOptDefsFunc6 Diff


```diff
--- AddVendorOptDefsFunc6
+++ AddVendorOptDefsFunc6
@@ -1,63 +1,69 @@
 
 void AddVendorOptDefsFunc6
                (uint *param_1,undefined8 param_2,int param_3,uint *param_4,uint *param_5,
                longlong param_6)
 
 {
   uint uVar1;
-  int iVar2;
+  bool bVar2;
+  int iVar3;
   STRSAFE_LPWSTR hMem;
-  uint *puVar4;
-  ulonglong uVar5;
+  undefined7 extraout_var;
+  uint *puVar5;
+  ulonglong uVar6;
   longlong local_res20;
-  undefined8 uVar3;
+  undefined8 uVar4;
   
   uVar1 = *param_4;
-  uVar5 = (ulonglong)uVar1;
+  uVar6 = (ulonglong)uVar1;
   hMem = (STRSAFE_LPWSTR)0x0;
   if (uVar1 == 0) {
     return;
   }
   if (0x1ffff < *param_1) {
     return;
   }
   if (*param_1 < 0x10000) {
     return;
   }
   if (*param_5 < uVar1) {
-    puVar4 = param_1;
+    puVar5 = param_1;
     if (param_3 != 0) {
       if (DhcpGlobalThisServerV6 == 0) {
-        iVar2 = 0x57;
+        iVar3 = 0x57;
       }
       else {
-        uVar3 = MemServer6GetClassDef
+        uVar4 = MemServer6GetClassDef
                           (DhcpGlobalThisServerV6,param_3,0,0,(void *)0x0,0,0,&local_res20);
-        iVar2 = (int)uVar3;
+        iVar3 = (int)uVar4;
       }
-      if (iVar2 != 0) {
+      if (iVar3 != 0) {
         *param_4 = 0;
         return;
       }
       hMem = CloneLPWSTR(*(STRSAFE_LPCWSTR *)(local_res20 + 0x10));
-      puVar4 = *(uint **)(param_6 + 0x18);
-      uVar5 = (ulonglong)*param_5 * 0x40;
-      *(STRSAFE_LPWSTR *)(puVar4 + (ulonglong)*param_5 * 0x10 + 0xc) = hMem;
+      puVar5 = *(uint **)(param_6 + 0x18);
+      uVar6 = (ulonglong)*param_5 * 0x40;
+      *(STRSAFE_LPWSTR *)(puVar5 + (ulonglong)*param_5 * 0x10 + 0xc) = hMem;
       if (hMem == (STRSAFE_LPWSTR)0x0) {
         *param_4 = 0;
         return;
       }
     }
-    uVar5 = DhcpGetOptionDef6Internal
-                      (puVar4,uVar5,param_1,
+    uVar6 = DhcpGetOptionDef6Internal
+                      (puVar5,uVar6,param_1,
                        (uint *)((ulonglong)*param_5 * 0x40 + *(longlong *)(param_6 + 0x18)),
                        (int *)0x0);
-    if (((int)uVar5 != 0) && (*param_4 = 0, hMem != (STRSAFE_LPWSTR)0x0)) {
+    if (((int)uVar6 != 0) && (*param_4 = 0, hMem != (STRSAFE_LPWSTR)0x0)) {
       LocalFree(hMem);
+      bVar2 = EvaluateCurrentState(&g_Feature_4257976632_62401633_FeatureDescriptorDetails);
+      if ((int)CONCAT71(extraout_var,bVar2) != 0) {
+        *(undefined8 *)((ulonglong)*param_5 * 0x40 + 0x30 + *(longlong *)(param_6 + 0x18)) = 0;
+      }
     }
     *param_5 = *param_5 + 1;
     return;
   }
   return;
 }
 

```


## DhcpGetUnicodeNameFromWirePunycodeName

### Match Info



|Key|dhcpssvc-06.dll - dhcpssvc-07.dll|
| :---: | :---: |
|diff_type|code,length,address,called|
|ratio|0.69|
|i_ratio|0.57|
|m_ratio|0.96|
|b_ratio|0.94|
|match_types|SymbolsHash|

### Function Meta Diff



|Key|dhcpssvc-06.dll|dhcpssvc-07.dll|
| :---: | :---: | :---: |
|name|DhcpGetUnicodeNameFromWirePunycodeName|DhcpGetUnicodeNameFromWirePunycodeName|
|fullname|DhcpGetUnicodeNameFromWirePunycodeName|DhcpGetUnicodeNameFromWirePunycodeName|
|refcount|3|3|
|`length`|323|357|
|`called`|ConvertPunycodeToUnicode|ConvertPunycodeToUnicode<br>EvaluateCurrentState|
|calling|DhcpDetermineHostName<br>ExtractOptions|DhcpDetermineHostName<br>ExtractOptions|
|paramcount|3|3|
|`address`|1800be928|1800bf574|
|sig|undefined2 * __fastcall DhcpGetUnicodeNameFromWirePunycodeName(byte * param_1, uint param_2, undefined2 * param_3)|undefined2 * __fastcall DhcpGetUnicodeNameFromWirePunycodeName(byte * param_1, uint param_2, undefined2 * param_3)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|False|False|

### DhcpGetUnicodeNameFromWirePunycodeName Called Diff


```diff
--- DhcpGetUnicodeNameFromWirePunycodeName called
+++ DhcpGetUnicodeNameFromWirePunycodeName called
@@ -1,0 +2 @@
+EvaluateCurrentState
```


### DhcpGetUnicodeNameFromWirePunycodeName Diff


```diff
--- DhcpGetUnicodeNameFromWirePunycodeName
+++ DhcpGetUnicodeNameFromWirePunycodeName
@@ -1,71 +1,83 @@
 
 undefined2 * DhcpGetUnicodeNameFromWirePunycodeName(byte *param_1,uint param_2,undefined2 *param_3)
 
 {
   byte bVar1;
-  DWORD DVar2;
+  bool bVar2;
   uint uVar3;
-  bool bVar4;
+  DWORD DVar4;
+  int iVar5;
+  undefined7 extraout_var;
+  uint uVar6;
+  bool bVar7;
   
-  bVar4 = true;
+  bVar7 = true;
   if (param_2 == 0) {
     return (undefined2 *)0x0;
   }
   if (0x1fe < (param_2 & 0xfffffffe)) {
     return (undefined2 *)0x0;
   }
   if (param_1 == (byte *)0x0) {
     return (undefined2 *)0x0;
   }
   if (0x100 < param_2) {
     return (undefined2 *)0x0;
   }
-  uVar3 = 0x200;
+  uVar6 = 0x200;
   if (1 < param_2) {
     do {
       bVar1 = *param_1;
       if (bVar1 == 0) break;
       if (0x3f < bVar1) {
         return (undefined2 *)0x0;
       }
       if (param_2 - 1 < (uint)bVar1) {
         return (undefined2 *)0x0;
       }
-      DVar2 = ConvertPunycodeToUnicode((LPCSTR)(param_1 + 1),(uint)bVar1,param_3);
-      if (DVar2 != 0) {
+      uVar3 = uVar6 >> 1;
+      DVar4 = ConvertPunycodeToUnicode((LPCSTR)(param_1 + 1),(uint)bVar1,param_3);
+      if (DVar4 != 0) {
         return (undefined2 *)0x0;
       }
+      param_2 = (param_2 - 1) - (uint)bVar1;
+      param_3 = param_3 + (int)uVar3;
       param_1 = param_1 + 1 + bVar1;
-      param_3 = param_3 + (int)(uVar3 >> 1);
-      uVar3 = uVar3 + (uVar3 >> 1) * -2 + 2;
-      param_2 = (param_2 - 1) - (uint)bVar1;
+      bVar2 = EvaluateCurrentState(&g_Feature_2907675961_62590261_FeatureDescriptorDetails);
+      if ((int)CONCAT71(extraout_var,bVar2) == 0) {
+        iVar5 = uVar3 * -2 + 2;
+      }
+      else {
+        iVar5 = uVar3 * -2;
+      }
+      uVar6 = uVar6 + iVar5;
       if ((param_2 != 0) && (*param_1 != 0)) {
-        if (uVar3 < 2) {
+        if (uVar6 < 2) {
           return (undefined2 *)0x0;
         }
-        bVar4 = false;
+        bVar7 = false;
         *param_3 = 0x2e;
         param_3 = param_3 + 1;
-        uVar3 = uVar3 - 2;
+        uVar6 = uVar6 - 2;
       }
-      if (uVar3 < 2) {
+      if (uVar6 < 2) {
         return (undefined2 *)0x0;
       }
     } while (1 < param_2);
-    if (!bVar4) {
+    if (!bVar7) {
       if (param_2 != 1) {
         return (undefined2 *)0x0;
       }
-      bVar4 = *param_1 == 0;
+      bVar7 = *param_1 == 0;
       goto LAB_0;
     }
   }
-  bVar4 = param_2 == 0;
+  bVar7 = param_2 == 0;
 LAB_0:
-  if ((bVar4) && (1 < uVar3)) {
+  if ((bVar7) && (1 < uVar6)) {
     *param_3 = 0;
     return param_3;
   }
   return (undefined2 *)0x0;
 }
 

```


## DhcpGetOptionV6ByOptClass

### Match Info



|Key|dhcpssvc-06.dll - dhcpssvc-07.dll|
| :---: | :---: |
|diff_type|code,length,sig,address,called|
|ratio|0.38|
|i_ratio|0.45|
|m_ratio|0.95|
|b_ratio|0.88|
|match_types|SymbolsHash|

### Function Meta Diff



|Key|dhcpssvc-06.dll|dhcpssvc-07.dll|
| :---: | :---: | :---: |
|name|DhcpGetOptionV6ByOptClass|DhcpGetOptionV6ByOptClass|
|fullname|DhcpGetOptionV6ByOptClass|DhcpGetOptionV6ByOptClass|
|refcount|4|4|
|`length`|494|555|
|`called`|DhcpParseOptionV6<br>KERNEL32.DLL::HeapAlloc<br>MemOptClassFindClassOptions<br>MemOptList6FindOption<br>MemServer6GetClassDef|DhcpParseOptionV6<br>EvaluateCurrentState<br>KERNEL32.DLL::HeapAlloc<br>KERNEL32.DLL::HeapFree<br>MemOptClassFindClassOptions<br>MemOptList6FindOption<br>MemServer6GetClassDef|
|calling|DhcpGetOptionV6|DhcpGetOptionV6|
|paramcount|8|8|
|`address`|18002f094|18002f300|
|`sig`|int __fastcall DhcpGetOptionV6ByOptClass(uint * param_1, uint * param_2, int param_3, undefined8 * param_4, uint * param_5, longlong param_6, undefined8 param_7, uint * param_8)|int __fastcall DhcpGetOptionV6ByOptClass(uint * param_1, uint * param_2, int param_3, longlong * param_4, uint * param_5, longlong param_6, undefined8 param_7, uint * param_8)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|False|False|

### DhcpGetOptionV6ByOptClass Called Diff


```diff
--- DhcpGetOptionV6ByOptClass called
+++ DhcpGetOptionV6ByOptClass called
@@ -1,0 +2 @@
+EvaluateCurrentState
@@ -2,0 +4 @@
+KERNEL32.DLL::HeapFree
```


### DhcpGetOptionV6ByOptClass Diff


```diff
--- DhcpGetOptionV6ByOptClass
+++ DhcpGetOptionV6ByOptClass
@@ -1,102 +1,111 @@
 
 int DhcpGetOptionV6ByOptClass
-              (uint *param_1,uint *param_2,int param_3,undefined8 *param_4,uint *param_5,
+              (uint *param_1,uint *param_2,int param_3,longlong *param_4,uint *param_5,
               longlong param_6,undefined8 param_7,uint *param_8)
 
 {
-  byte bVar1;
-  int iVar2;
-  undefined8 uVar3;
-  u_long *puVar4;
+  bool bVar1;
+  byte bVar2;
+  int iVar3;
+  undefined8 uVar4;
   undefined7 extraout_var;
-  uint *puVar5;
-  int iVar6;
-  uint uVar7;
-  uint *puVar8;
+  LPVOID pvVar5;
+  undefined7 extraout_var_00;
+  undefined7 extraout_var_01;
+  uint *puVar6;
+  int iVar7;
+  uint uVar8;
   uint uVar9;
   uint uVar10;
-  uint *local_38;
-  uint *local_30;
+  uint *puVar11;
+  uint *local_res20;
+  uint *local_48 [2];
   
-  puVar8 = (uint *)0x0;
-  local_38 = (uint *)0x0;
-  if (param_4 == (undefined8 *)0x0) {
+  puVar11 = (uint *)0x0;
+  local_res20 = (uint *)0x0;
+  if (param_4 == (longlong *)0x0) {
     return 0x57;
   }
+  uVar8 = 0;
   uVar9 = 0;
+  iVar7 = 0x57;
   uVar10 = 0;
-  iVar6 = 0x57;
-  uVar7 = 0;
-  if ((param_1 != (uint *)0x0) && (uVar7 = uVar10, *param_1 != 0)) {
+  if ((param_1 != (uint *)0x0) && (uVar10 = uVar9, *param_1 != 0)) {
     if (param_6 == 0) {
-      iVar2 = 0x57;
+      iVar3 = 0x57;
     }
     else {
-      uVar3 = MemServer6GetClassDef
-                        (param_6,0,0,*param_1,*(void **)(param_1 + 2),param_1[1],1,&local_30);
-      iVar2 = (int)uVar3;
+      uVar4 = MemServer6GetClassDef
+                        (param_6,0,0,*param_1,*(void **)(param_1 + 2),param_1[1],1,local_48);
+      iVar3 = (int)uVar4;
     }
-    if (((iVar2 == 0) && (local_30 != (uint *)0x0)) && (local_30[2] == 1)) {
-      uVar7 = local_30[1];
+    if (((iVar3 == 0) && (local_48[0] != (uint *)0x0)) && (local_48[0][2] == 1)) {
+      uVar10 = local_48[0][1];
     }
   }
-  uVar10 = 0;
-  if ((param_2 != (uint *)0x0) && (uVar10 = uVar9, *param_2 != 0)) {
+  uVar9 = 0;
+  if ((param_2 != (uint *)0x0) && (uVar9 = uVar8, *param_2 != 0)) {
     if (param_6 == 0) {
-      iVar2 = 0x57;
+      iVar3 = 0x57;
     }
     else {
-      uVar3 = MemServer6GetClassDef(param_6,0,0,*param_2,*(void **)(param_2 + 2),0,0,&local_30);
-      iVar2 = (int)uVar3;
+      uVar4 = MemServer6GetClassDef(param_6,0,0,*param_2,*(void **)(param_2 + 2),0,0,local_48);
+      iVar3 = (int)uVar4;
     }
-    if (((iVar2 == 0) && (local_30 != (uint *)0x0)) && (local_30[2] != 1)) {
-      uVar10 = local_30[1];
+    if (((iVar3 == 0) && (local_48[0] != (uint *)0x0)) && (local_48[0][2] != 1)) {
+      uVar9 = local_48[0][1];
     }
   }
-  iVar2 = iVar6;
+  iVar3 = iVar7;
   if (param_8 != (uint *)0x0) {
-    iVar2 = MemOptClassFindClassOptions(param_8,uVar10,uVar7,&local_30);
+    iVar3 = MemOptClassFindClassOptions(param_8,uVar9,uVar10,local_48);
   }
-  puVar5 = local_30;
-  if (iVar2 == 0) {
-    if (local_30 != (uint *)0x0) {
-      iVar6 = MemOptList6FindOption(local_30,param_3,&local_38);
-      puVar8 = local_38;
+  puVar6 = local_48[0];
+  if (iVar3 == 0) {
+    if (local_48[0] != (uint *)0x0) {
+      iVar7 = MemOptList6FindOption(local_48[0],param_3,&local_res20);
+      puVar11 = local_res20;
     }
-    if (iVar6 == 0) goto LAB_0;
+    if (iVar7 == 0) goto LAB_0;
   }
   if (param_8 == (uint *)0x0) {
-    iVar6 = 0x57;
+    iVar7 = 0x57;
   }
   else {
-    iVar6 = MemOptClassFindClassOptions(param_8,0,uVar7,&local_30);
-    puVar5 = local_30;
+    iVar7 = MemOptClassFindClassOptions(param_8,0,uVar10,local_48);
+    puVar6 = local_48[0];
   }
-  if (iVar6 != 0) {
-    return iVar6;
+  if (iVar7 != 0) {
+    return iVar7;
   }
-  if (puVar5 == (uint *)0x0) {
-    iVar6 = 0x57;
+  if (puVar6 == (uint *)0x0) {
+    iVar7 = 0x57;
   }
   else {
-    iVar6 = MemOptList6FindOption(puVar5,param_3,&local_38);
-    puVar8 = local_38;
+    iVar7 = MemOptList6FindOption(puVar6,param_3,&local_res20);
+    puVar11 = local_res20;
   }
-  if (iVar6 != 0) {
-    return iVar6;
+  if (iVar7 != 0) {
+    return iVar7;
   }
 LAB_0:
-  iVar6 = 8;
-  puVar4 = HeapAlloc(gDhcpHeap,8,(ulonglong)puVar8[1]);
-  *param_4 = puVar4;
-  if (puVar4 == (u_long *)0x0) {
-    *param_5 = 0;
+  bVar1 = EvaluateCurrentState(&g_Feature_3178725690_62653425_FeatureDescriptorDetails);
+  if (((int)CONCAT71(extraout_var,bVar1) == 0) || (*param_4 == 0)) {
+    pvVar5 = HeapAlloc(gDhcpHeap,8,(ulonglong)puVar11[1]);
+    *param_4 = (longlong)pvVar5;
+    if (pvVar5 == (LPVOID)0x0) {
+      *param_5 = 0;
+      return 8;
+    }
+    *param_5 = puVar11[1];
   }
-  else {
-    *param_5 = puVar8[1];
-    bVar1 = DhcpParseOptionV6(puVar8,puVar4,param_5);
-    iVar6 = (int)CONCAT71(extraout_var,bVar1);
+  bVar2 = DhcpParseOptionV6(puVar11,(u_long *)*param_4,param_5);
+  iVar7 = (int)CONCAT71(extraout_var_00,bVar2);
+  bVar1 = EvaluateCurrentState(&g_Feature_3178725690_62653425_FeatureDescriptorDetails);
+  if (((int)CONCAT71(extraout_var_01,bVar1) != 0) && (iVar7 != 0)) {
+    HeapFree(gDhcpHeap,0,(LPVOID)*param_4);
+    *param_4 = 0;
   }
-  return iVar6;
+  return iVar7;
 }
 

```


## DhcpOptPolicyGetOption

### Match Info



|Key|dhcpssvc-06.dll - dhcpssvc-07.dll|
| :---: | :---: |
|diff_type|code,length,sig,address,called|
|ratio|0.43|
|i_ratio|0.35|
|m_ratio|0.97|
|b_ratio|0.96|
|match_types|SymbolsHash|

### Function Meta Diff



|Key|dhcpssvc-06.dll|dhcpssvc-07.dll|
| :---: | :---: | :---: |
|name|DhcpOptPolicyGetOption|DhcpOptPolicyGetOption|
|fullname|DhcpOptPolicyGetOption|DhcpOptPolicyGetOption|
|refcount|4|4|
|`length`|594|641|
|`called`|DhcpParseRegistryOption<br>MemOptClassFindClassOptions|DhcpParseRegistryOption<br>EvaluateCurrentState<br>MemOptClassFindClassOptions|
|calling|DhcpGetPolicyOptionByContext|DhcpGetPolicyOptionByContext|
|paramcount|9|9|
|`address`|18007d6ac|18007e04c|
|`sig`|byte __fastcall DhcpOptPolicyGetOption(uint * param_1, int param_2, uint * param_3, int param_4, u_long * param_5, uint * param_6, int param_7, int param_8, int * param_9)|byte __fastcall DhcpOptPolicyGetOption(uint * param_1, int param_2, uint * param_3, int param_4, LPCWSTR param_5, uint * param_6, int param_7, int param_8, int * param_9)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|False|False|

### DhcpOptPolicyGetOption Called Diff


```diff
--- DhcpOptPolicyGetOption called
+++ DhcpOptPolicyGetOption called
@@ -1,0 +2 @@
+EvaluateCurrentState
```


### DhcpOptPolicyGetOption Diff


```diff
--- DhcpOptPolicyGetOption
+++ DhcpOptPolicyGetOption
@@ -1,103 +1,115 @@
 
 byte DhcpOptPolicyGetOption
-               (uint *param_1,int param_2,uint *param_3,int param_4,u_long *param_5,uint *param_6,
+               (uint *param_1,int param_2,uint *param_3,int param_4,LPCWSTR param_5,uint *param_6,
                int param_7,int param_8,int *param_9)
 
 {
-  byte bVar1;
-  int iVar2;
+  bool bVar1;
+  byte bVar2;
+  int iVar3;
   undefined7 extraout_var;
-  int *piVar3;
-  uint *puVar4;
-  uint uVar5;
+  undefined7 extraout_var_00;
+  int *piVar4;
+  uint *puVar5;
   uint uVar6;
   uint uVar7;
   uint uVar8;
+  uint uVar9;
+  ulonglong uVar10;
   uint local_res18;
   undefined4 uStackX_1c;
   int local_res20;
-  int *local_40;
+  int *local_50;
   
   if (param_9 != (int *)0x0) {
     *param_9 = 0;
   }
-  uVar5 = (uint)param_9;
-  if ((param_3 == (uint *)0x0) || (uVar5 = 0, *param_3 != 0)) {
-    puVar4 = (uint *)CONCAT44(uStackX_1c,local_res18);
-    uVar7 = (uint)param_9;
+  uVar7 = (uint)param_9;
+  if ((param_3 == (uint *)0x0) || (uVar7 = 0, *param_3 != 0)) {
+    puVar5 = (uint *)CONCAT44(uStackX_1c,local_res18);
+    uVar6 = (uint)param_9;
     local_res20 = param_4;
     do {
-      local_40 = (int *)0x0;
+      local_50 = (int *)0x0;
       if (param_3 != (uint *)0x0) {
-        local_40 = *(int **)(*(longlong *)(param_3 + 2) + (ulonglong)uVar5 * 8);
+        local_50 = *(int **)(*(longlong *)(param_3 + 2) + (ulonglong)uVar7 * 8);
       }
       if (param_1 == (uint *)0x0) {
-        iVar2 = 0x57;
+        iVar3 = 0x57;
       }
       else {
-        iVar2 = MemOptClassFindClassOptions
-                          (param_1,*local_40,local_res20,(undefined8 *)&local_res18);
-        puVar4 = (uint *)CONCAT44(uStackX_1c,local_res18);
+        iVar3 = MemOptClassFindClassOptions
+                          (param_1,*local_50,local_res20,(undefined8 *)&local_res18);
+        puVar5 = (uint *)CONCAT44(uStackX_1c,local_res18);
       }
-      if (iVar2 == 0) {
-        uVar6 = uVar7;
-        if ((puVar4 == (uint *)0x0) || (uVar7 = 0, uVar6 = uVar7, *puVar4 != 0)) {
+      if (iVar3 == 0) {
+        uVar8 = uVar6;
+        if ((puVar5 == (uint *)0x0) || (uVar6 = 0, uVar8 = uVar6, *puVar5 != 0)) {
           do {
-            uVar7 = uVar6;
-            piVar3 = (int *)0x0;
-            if (puVar4 != (uint *)0x0) {
-              piVar3 = *(int **)(*(longlong *)(puVar4 + 2) + (ulonglong)uVar7 * 8);
+            uVar6 = uVar8;
+            piVar4 = (int *)0x0;
+            if (puVar5 != (uint *)0x0) {
+              piVar4 = *(int **)(*(longlong *)(puVar5 + 2) + (ulonglong)uVar6 * 8);
             }
-            if (param_2 == *piVar3) {
-              bVar1 = DhcpParseRegistryOption(piVar3 + 3,piVar3[1],param_5,param_6,param_7,param_8);
+            if (param_2 == *piVar4) {
+              bVar2 = DhcpParseRegistryOption
+                                (piVar4 + 3,(LPCWSTR)(ulonglong)(uint)piVar4[1],param_5,param_6,
+                                 param_7,param_8);
               if (param_9 != (int *)0x0) {
-                *param_9 = *local_40;
-                return bVar1;
+                *param_9 = *local_50;
+                return bVar2;
               }
-              return bVar1;
+              return bVar2;
             }
-            uVar6 = uVar7;
-          } while ((puVar4 == (uint *)0x0) || (uVar6 = uVar7 + 1, uVar7 + 1 < *puVar4));
+            uVar8 = uVar6;
+          } while ((puVar5 == (uint *)0x0) || (uVar8 = uVar6 + 1, uVar6 + 1 < *puVar5));
         }
         if (param_2 == 0x2b) {
-          uVar6 = 0;
           uVar8 = 0;
-          uVar5 = *param_6;
-          uVar7 = uVar5;
-          if (*puVar4 == 0) {
+          uVar10 = 0;
+          uVar7 = *param_6;
+          uVar6 = uVar7;
+          if (*puVar5 == 0) {
             return 2;
           }
           do {
-            piVar3 = *(int **)(*(longlong *)(puVar4 + 2) + (ulonglong)uVar8 * 8);
-            if (*piVar3 - 0x101U < 0xa7d3) {
-              if (uVar6 + 2 < *param_6) {
-                *(char *)param_5 = (char)*piVar3;
+            piVar4 = *(int **)(*(longlong *)(puVar5 + 2) + uVar10 * 8);
+            if (*piVar4 - 0x101U < 0xa7d3) {
+              if (uVar8 + 2 < *param_6) {
+                *(char *)param_5 = (char)*piVar4;
               }
-              local_res18 = uVar7 - 2;
-              bVar1 = DhcpParseRegistryOption
-                                (piVar3 + 3,piVar3[1],(u_long *)((longlong)param_5 + 2),&local_res18
-                                 ,param_7,param_8);
-              uVar6 = uVar6 + 2 + local_res18;
-              if (((int)CONCAT71(extraout_var,bVar1) == 0) && (local_res18 + 2 <= uVar7)) {
+              bVar1 = EvaluateCurrentState(&g_Feature_2128058682_62581697_FeatureDescriptorDetails);
+              if (((int)CONCAT71(extraout_var,bVar1) == 0) || (2 < uVar6)) {
+                local_res18 = uVar6 - 2;
+              }
+              else {
+                local_res18 = 0;
+              }
+              bVar2 = DhcpParseRegistryOption
+                                (piVar4 + 3,(LPCWSTR)(ulonglong)(uint)piVar4[1],param_5 + 1,
+                                 &local_res18,param_7,param_8);
+              uVar8 = uVar8 + 2 + local_res18;
+              if (((int)CONCAT71(extraout_var_00,bVar2) == 0) && (local_res18 + 2 <= uVar6)) {
                 *(char *)((longlong)param_5 + 1) = (char)local_res18;
-                uVar7 = uVar7 + (-2 - local_res18);
-                param_5 = (u_long *)((longlong)param_5 + (ulonglong)(local_res18 + 2));
+                uVar6 = uVar6 + (-2 - local_res18);
+                param_5 = (LPCWSTR)((longlong)param_5 + (ulonglong)(local_res18 + 2));
               }
             }
-            uVar8 = uVar8 + 1;
-          } while (uVar8 < *puVar4);
-          if (uVar6 == 0) {
+            uVar9 = (int)uVar10 + 1;
+            uVar10 = (ulonglong)uVar9;
+          } while (uVar9 < *puVar5);
+          if (uVar8 == 0) {
             return 2;
           }
-          *param_6 = uVar6;
+          *param_6 = uVar8;
           if (param_9 != (int *)0x0) {
-            *param_9 = *local_40;
+            *param_9 = *local_50;
           }
-          return -(uVar5 < uVar6) & 0xea;
+          return -(uVar7 < uVar8) & 0xea;
         }
       }
-    } while ((param_3 == (uint *)0x0) || (uVar5 = uVar5 + 1, uVar5 < *param_3));
+    } while ((param_3 == (uint *)0x0) || (uVar7 = uVar7 + 1, uVar7 < *param_3));
   }
   return 2;
 }
 

```


## AddVendorOptDefsFunc

### Match Info



|Key|dhcpssvc-06.dll - dhcpssvc-07.dll|
| :---: | :---: |
|diff_type|code,length,address,called|
|ratio|0.6|
|i_ratio|0.75|
|m_ratio|0.95|
|b_ratio|0.95|
|match_types|SymbolsHash|

### Function Meta Diff



|Key|dhcpssvc-06.dll|dhcpssvc-07.dll|
| :---: | :---: | :---: |
|name|AddVendorOptDefsFunc|AddVendorOptDefsFunc|
|fullname|AddVendorOptDefsFunc|AddVendorOptDefsFunc|
|refcount|3|3|
|`length`|289|321|
|`called`|CloneLPWSTR<br>DhcpGetOptionDefInternal<br>KERNEL32.DLL::LocalFree<br>MemClassDefListFindClassDefInternal|CloneLPWSTR<br>DhcpGetOptionDefInternal<br>EvaluateCurrentState<br>KERNEL32.DLL::LocalFree<br>MemClassDefListFindClassDefInternal|
|calling|||
|paramcount|6|6|
|`address`|18003a9d0|18003afe0|
|sig|undefined __fastcall AddVendorOptDefsFunc(uint * param_1, longlong param_2, int param_3, uint * param_4, uint * param_5, longlong param_6)|undefined __fastcall AddVendorOptDefsFunc(uint * param_1, longlong param_2, int param_3, uint * param_4, uint * param_5, longlong param_6)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|False|False|

### AddVendorOptDefsFunc Called Diff


```diff
--- AddVendorOptDefsFunc called
+++ AddVendorOptDefsFunc called
@@ -2,0 +3 @@
+EvaluateCurrentState
```


### AddVendorOptDefsFunc Diff


```diff
--- AddVendorOptDefsFunc
+++ AddVendorOptDefsFunc
@@ -1,72 +1,78 @@
 
 void AddVendorOptDefsFunc
                (uint *param_1,longlong param_2,int param_3,uint *param_4,uint *param_5,
                longlong param_6)
 
 {
   longlong lVar1;
-  int iVar2;
-  undefined8 uVar3;
+  bool bVar2;
+  int iVar3;
+  undefined8 uVar4;
   STRSAFE_LPWSTR hMem;
-  ulonglong uVar4;
-  longlong lVar5;
-  uint *puVar6;
+  ulonglong uVar5;
+  undefined7 extraout_var;
+  longlong lVar6;
+  uint *puVar7;
   uint local_res20;
   undefined4 uStackX_24;
   
   lVar1 = DhcpGlobalThisServer;
   hMem = (STRSAFE_LPWSTR)0x0;
   if (*param_4 == 0) {
     return;
   }
   if (*param_1 < 0x100) {
     return;
   }
   if (*param_4 <= *param_5) {
     return;
   }
-  puVar6 = param_1;
+  puVar7 = param_1;
   if (param_3 == 0) {
 LAB_0:
-    uVar4 = DhcpGetOptionDefInternal
-                      (puVar6,param_2,param_1,
+    uVar5 = DhcpGetOptionDefInternal
+                      (puVar7,param_2,param_1,
                        (uint *)((ulonglong)*param_5 * 0x40 + *(longlong *)(param_6 + 0x18)),
                        (int *)0x0);
-    if (((int)uVar4 != 0) && (*param_4 = 0, hMem != (STRSAFE_LPWSTR)0x0)) {
+    if (((int)uVar5 != 0) && (*param_4 = 0, hMem != (STRSAFE_LPWSTR)0x0)) {
       LocalFree(hMem);
+      bVar2 = EvaluateCurrentState(&g_Feature_4257976632_62401633_FeatureDescriptorDetails);
+      if ((int)CONCAT71(extraout_var,bVar2) != 0) {
+        *(undefined8 *)((ulonglong)*param_5 * 0x40 + 0x30 + *(longlong *)(param_6 + 0x18)) = 0;
+      }
     }
     *param_5 = *param_5 + 1;
   }
   else {
     if (DhcpGlobalThisServer == 0) {
-      lVar5 = CONCAT44(uStackX_24,local_res20);
+      lVar6 = CONCAT44(uStackX_24,local_res20);
 LAB_1:
-      iVar2 = 0x57;
+      iVar3 = 0x57;
     }
     else {
-      puVar6 = (uint *)(DhcpGlobalThisServer + 0x78);
-      uVar3 = MemClassDefListFindClassDefInternal
-                        (puVar6,param_3,(wchar_t *)0x0,(void *)0x0,0,(int *)0x0,&local_res20);
-      iVar2 = (int)uVar3;
-      if (iVar2 == 0) {
-        lVar5 = 0;
-        if (puVar6 == (uint *)0x0) goto LAB_1;
-        lVar5 = *(longlong *)(*(longlong *)(lVar1 + 0x80) + (ulonglong)local_res20 * 8);
-        iVar2 = 0;
+      puVar7 = (uint *)(DhcpGlobalThisServer + 0x78);
+      uVar4 = MemClassDefListFindClassDefInternal
+                        (puVar7,param_3,(wchar_t *)0x0,(void *)0x0,0,(int *)0x0,&local_res20);
+      iVar3 = (int)uVar4;
+      if (iVar3 == 0) {
+        lVar6 = 0;
+        if (puVar7 == (uint *)0x0) goto LAB_1;
+        lVar6 = *(longlong *)(*(longlong *)(lVar1 + 0x80) + (ulonglong)local_res20 * 8);
+        iVar3 = 0;
       }
       else {
-        lVar5 = CONCAT44(uStackX_24,local_res20);
+        lVar6 = CONCAT44(uStackX_24,local_res20);
       }
     }
-    if (iVar2 == 0) {
-      hMem = CloneLPWSTR(*(STRSAFE_LPCWSTR *)(lVar5 + 0x10));
-      puVar6 = *(uint **)(param_6 + 0x18);
+    if (iVar3 == 0) {
+      hMem = CloneLPWSTR(*(STRSAFE_LPCWSTR *)(lVar6 + 0x10));
+      puVar7 = *(uint **)(param_6 + 0x18);
       param_2 = (ulonglong)*param_5 * 0x40;
-      *(STRSAFE_LPWSTR *)(puVar6 + (ulonglong)*param_5 * 0x10 + 0xc) = hMem;
+      *(STRSAFE_LPWSTR *)(puVar7 + (ulonglong)*param_5 * 0x10 + 0xc) = hMem;
       if (hMem != (STRSAFE_LPWSTR)0x0) goto LAB_0;
     }
     *param_4 = 0;
   }
   return;
 }
 

```


## DhcpFSMEnumRelationship

### Match Info



|Key|dhcpssvc-06.dll - dhcpssvc-07.dll|
| :---: | :---: |
|diff_type|code,length,address,called|
|ratio|0.21|
|i_ratio|0.27|
|m_ratio|0.76|
|b_ratio|0.59|
|match_types|SymbolsHash|

### Function Meta Diff



|Key|dhcpssvc-06.dll|dhcpssvc-07.dll|
| :---: | :---: | :---: |
|name|DhcpFSMEnumRelationship|DhcpFSMEnumRelationship|
|fullname|DhcpFSMEnumRelationship|DhcpFSMEnumRelationship|
|refcount|3|3|
|`length`|1052|1642|
|`called`|FSMFreeRelationshipMemoryArray<br>FSMUpdateRelationship<br>KERNEL32.DLL::AcquireSRWLockShared<br>KERNEL32.DLL::EnterCriticalSection<br>KERNEL32.DLL::LeaveCriticalSection<br>KERNEL32.DLL::LocalAlloc<br>KERNEL32.DLL::LocalFree<br>KERNEL32.DLL::ReleaseSRWLockShared<br>memset|EvaluateCurrentState<br>FSMFreeRelationshipMemoryArray<br>FSMUpdateRelationship<br>KERNEL32.DLL::AcquireSRWLockShared<br>KERNEL32.DLL::EnterCriticalSection<br>KERNEL32.DLL::LeaveCriticalSection<br>KERNEL32.DLL::LocalAlloc<br>KERNEL32.DLL::LocalFree<br>KERNEL32.DLL::ReleaseSRWLockShared<br>memset|
|calling|DhcpTelemetryReportFailoverParams<br>R_DhcpV4FailoverEnumRelationship|DhcpTelemetryReportFailoverParams<br>R_DhcpV4FailoverEnumRelationship|
|paramcount|5|5|
|`address`|180098a6c|18009943c|
|sig|uint __fastcall DhcpFSMEnumRelationship(uint * param_1, uint param_2, longlong * param_3, uint * param_4, int * param_5)|uint __fastcall DhcpFSMEnumRelationship(uint * param_1, uint param_2, longlong * param_3, uint * param_4, int * param_5)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|False|False|

### DhcpFSMEnumRelationship Called Diff


```diff
--- DhcpFSMEnumRelationship called
+++ DhcpFSMEnumRelationship called
@@ -0,0 +1 @@
+EvaluateCurrentState
```


### DhcpFSMEnumRelationship Diff


```diff
--- DhcpFSMEnumRelationship
+++ DhcpFSMEnumRelationship
@@ -1,223 +1,352 @@
 
 uint DhcpFSMEnumRelationship
                (uint *param_1,uint param_2,longlong *param_3,uint *param_4,int *param_5)
 
 {
   LONG *pLVar1;
   uint uVar2;
   int *piVar3;
-  HLOCAL pvVar4;
   LPCRITICAL_SECTION lpCriticalSection;
+  bool bVar4;
   undefined8 *puVar5;
   HLOCAL _Dst;
+  undefined7 extraout_var;
   undefined4 *puVar6;
   ulonglong uVar7;
   short *psVar8;
-  longlong lVar9;
-  int iVar10;
-  uint uVar11;
-  ulonglong uVar12;
-  uint uVar13;
-  ulonglong uVar14;
+  undefined7 extraout_var_00;
+  ulonglong uVar9;
+  longlong lVar10;
+  HLOCAL pvVar11;
+  uint uVar12;
+  ulonglong uVar13;
+  longlong lVar14;
   uint uVar15;
   uint uVar16;
+  uint uVar17;
+  int iVar18;
+  uint uVar19;
   uint local_78;
-  uint local_70;
-  ulonglong uVar17;
+  ulonglong local_68;
   
-  uVar12 = 0;
+  uVar19 = 0;
   *param_3 = 0;
   lpCriticalSection = g_FailoverEndpoints;
   *param_5 = 0;
   *param_4 = 0;
   if (lpCriticalSection == (LPCRITICAL_SECTION)0x0) {
     return 0x103;
   }
   pLVar1 = &lpCriticalSection[1].LockCount;
   EnterCriticalSection(lpCriticalSection);
   if (((pLVar1 == (LONG *)0x0) || (uVar2 = *pLVar1, uVar2 == 0)) || (uVar2 <= *param_1)) {
     LeaveCriticalSection(g_FailoverEndpoints);
     return 0x103;
   }
   local_78 = 0;
-  uVar7 = uVar12;
-  uVar17 = uVar12;
+  uVar17 = uVar19;
+  uVar12 = uVar19;
   if (*param_1 != 0) {
     do {
-      uVar15 = (int)uVar17 + 1;
-      uVar17 = (ulonglong)uVar15;
-      if (uVar2 <= uVar15) {
-        uVar15 = 2;
+      uVar17 = uVar17 + 1;
+      if (uVar2 <= uVar17) {
+        uVar12 = 2;
         goto LAB_0;
       }
-      local_78 = (int)uVar7 + 1;
-      uVar7 = (ulonglong)local_78;
-    } while (uVar15 < *param_1);
-  }
-  uVar16 = (uint)uVar17;
+      local_78 = uVar12 + 1;
+      uVar12 = local_78;
+    } while (uVar17 < *param_1);
+  }
   if (param_2 < 0x10) {
-    uVar15 = 0x216;
+    uVar12 = 0x216;
   }
   else {
-    local_70 = param_2 - 0x10;
-    uVar15 = local_70 / 0x50;
-    if (uVar15 == 0) {
-LAB_1:
-      uVar15 = 0x7a;
+    uVar9 = (ulonglong)(param_2 - 0x10);
+    uVar12 = (uint)(uVar9 / 0x50);
+    if (uVar12 == 0) {
+      uVar12 = 0x7a;
     }
     else {
-      uVar13 = uVar2 - uVar16;
-      if (uVar15 < uVar2 - uVar16) {
-        uVar13 = uVar15;
+      uVar13 = (ulonglong)(uVar2 - uVar17);
+      if (uVar12 < uVar2 - uVar17) {
+        uVar13 = uVar9 / 0x50;
       }
       puVar5 = LocalAlloc(0x40,0x10);
       *param_3 = (longlong)puVar5;
       if (puVar5 != (undefined8 *)0x0) {
         *puVar5 = 0;
         puVar5[1] = 0;
-        _Dst = LocalAlloc(0x40,(ulonglong)uVar13 * 0x50);
+        _Dst = LocalAlloc(0x40,uVar13 * 0x50);
         if (_Dst != (HLOCAL)0x0) {
-          memset(_Dst,0,(ulonglong)uVar13 * 0x50);
-          uVar14 = 0;
-          uVar13 = 0;
+          memset(_Dst,0,uVar13 * 0x50);
+          uVar12 = 0;
           *(HLOCAL *)(*param_3 + 8) = _Dst;
-          uVar15 = 0;
-          if (uVar16 < uVar2) {
-            do {
-              uVar16 = (uint)uVar17;
-              puVar5 = *(undefined8 **)((longlong)lpCriticalSection[1].OwningThread + uVar7 * 8);
-              AcquireSRWLockShared((PSRWLOCK)(puVar5 + 9));
-              uVar13 = (uint)uVar14;
-              puVar6 = (undefined4 *)(uVar14 * 0x50 + (longlong)_Dst);
-              uVar7 = FSMUpdateRelationship(puVar6,puVar5);
-              uVar11 = 0;
-              uVar15 = (uint)uVar7;
-              if (uVar15 != 0) {
-LAB_2:
+          bVar4 = EvaluateCurrentState(&g_Feature_3777210683_62264998_FeatureDescriptorDetails);
+          uVar16 = 0;
+          if ((int)CONCAT71(extraout_var,bVar4) == 0) {
+            if (uVar17 < uVar2) {
+              do {
+                puVar5 = *(undefined8 **)
+                          ((longlong)lpCriticalSection[1].OwningThread + (ulonglong)local_78 * 8);
+                AcquireSRWLockShared((PSRWLOCK)(puVar5 + 9));
+                puVar6 = (undefined4 *)((ulonglong)uVar16 * 0x50 + (longlong)_Dst);
+                uVar7 = FSMUpdateRelationship(puVar6,puVar5);
+                uVar15 = 0;
+                uVar12 = (uint)uVar7;
+                if (uVar12 != 0) goto LAB_1;
+                psVar8 = (short *)puVar5[3];
+                iVar18 = uVar19 + 0x50;
+                if (psVar8 != (short *)0x0) {
+                  lVar10 = 0x7ffffffe;
+                  do {
+                    if (*psVar8 == 0) break;
+                    psVar8 = psVar8 + 1;
+                    lVar10 = lVar10 + -1;
+                  } while (lVar10 != 0);
+                  if (lVar10 == 0) {
+                    local_68 = 0;
+                    uVar12 = 0x80070057;
+                  }
+                  else {
+                    local_68 = 0x7ffffffe - lVar10;
+                    uVar12 = uVar15;
+                  }
+                  if ((int)uVar12 < 0) goto LAB_2;
+                  uVar9 = local_68 & 0xffffffff;
+                  iVar18 = iVar18 + (int)local_68 * 2 + 2;
+                }
+                psVar8 = (short *)*puVar5;
+                if (psVar8 == (short *)0x0) {
+                  uVar12 = 0x80070057;
+                }
+                else {
+                  lVar10 = 0x7ffffffe;
+                  do {
+                    if (*psVar8 == 0) break;
+                    psVar8 = psVar8 + 1;
+                    lVar10 = lVar10 + -1;
+                  } while (lVar10 != 0);
+                  if (lVar10 == 0) {
+                    local_68 = 0;
+                    uVar12 = 0x80070057;
+                  }
+                  else {
+                    local_68 = 0x7ffffffe - lVar10;
+                    uVar12 = uVar15;
+                  }
+                  uVar9 = local_68 & 0xffffffff;
+                }
+                if ((int)uVar12 < 0) goto LAB_3;
+                psVar8 = (short *)puVar5[4];
+                uVar19 = iVar18 + (int)uVar9 * 2 + 2;
+                if (psVar8 != (short *)0x0) {
+                  lVar10 = 0x7ffffffe;
+                  do {
+                    if (*psVar8 == 0) break;
+                    psVar8 = psVar8 + 1;
+                    lVar10 = lVar10 + -1;
+                  } while (lVar10 != 0);
+                  if (lVar10 == 0) {
+                    local_68 = 0;
+                    uVar12 = 0x80070057;
+                  }
+                  else {
+                    local_68 = 0x7ffffffe - lVar10;
+                    uVar12 = uVar15;
+                  }
+                  if ((int)uVar12 < 0) goto LAB_2;
+                  uVar9 = local_68 & 0xffffffff;
+                  uVar19 = uVar19 + (int)local_68 * 2 + 2;
+                }
+                piVar3 = *(int **)(puVar6 + 0xe);
+                if ((piVar3 != (int *)0x0) && (*(longlong *)(piVar3 + 2) != 0)) {
+                  uVar19 = uVar19 + *piVar3 * 4 + 0x10;
+                }
                 ReleaseSRWLockShared((PSRWLOCK)(puVar5 + 9));
-                goto LAB_0;
+                if (param_2 < uVar19) {
+                  uVar9 = (ulonglong)uVar16;
+                  lVar14 = uVar9 * 10;
+                  LocalFree(*(HLOCAL *)((longlong)_Dst + uVar9 * 0x50 + 0x20));
+                  *(undefined8 *)((longlong)_Dst + uVar9 * 0x50 + 0x20) = 0;
+                  LocalFree(*(HLOCAL *)((longlong)_Dst + uVar9 * 0x50 + 0x28));
+                  *(undefined8 *)((longlong)_Dst + uVar9 * 0x50 + 0x28) = 0;
+                  LocalFree(*(HLOCAL *)((longlong)_Dst + uVar9 * 0x50 + 0x30));
+                  lVar10 = *(longlong *)((longlong)_Dst + uVar9 * 0x50 + 0x38);
+                  *(undefined8 *)((longlong)_Dst + uVar9 * 0x50 + 0x30) = 0;
+                  if ((lVar10 == 0) || (pvVar11 = *(HLOCAL *)(lVar10 + 8), pvVar11 == (HLOCAL)0x0))
+                  goto LAB_4;
+                  goto LAB_5;
+                }
+                uVar16 = uVar16 + 1;
+                uVar17 = uVar17 + 1;
+                local_78 = local_78 + 1;
+                if ((uint)*pLVar1 <= local_78) goto LAB_6;
+              } while (uVar17 < uVar2);
+LAB_7:
+              uVar12 = 0;
+            }
+          }
+          else {
+            uVar12 = 0;
+            if (uVar17 < uVar2) {
+LAB_8:
+              if (uVar16 < (uint)uVar13) {
+                puVar5 = *(undefined8 **)
+                          ((longlong)lpCriticalSection[1].OwningThread + (ulonglong)local_78 * 8);
+                AcquireSRWLockShared((PSRWLOCK)(puVar5 + 9));
+                puVar6 = (undefined4 *)((ulonglong)uVar16 * 0x50 + (longlong)_Dst);
+                uVar7 = FSMUpdateRelationship(puVar6,puVar5);
+                uVar15 = 0;
+                uVar12 = (uint)uVar7;
+                if (uVar12 != 0) goto LAB_1;
+                psVar8 = (short *)puVar5[3];
+                iVar18 = uVar19 + 0x50;
+                if (psVar8 != (short *)0x0) {
+                  lVar10 = 0x7ffffffe;
+                  do {
+                    if (*psVar8 == 0) break;
+                    psVar8 = psVar8 + 1;
+                    lVar10 = lVar10 + -1;
+                  } while (lVar10 != 0);
+                  if (lVar10 == 0) {
+                    local_68 = 0;
+                    uVar12 = 0x80070057;
+                  }
+                  else {
+                    local_68 = 0x7ffffffe - lVar10;
+                    uVar12 = uVar15;
+                  }
+                  if ((int)uVar12 < 0) goto LAB_2;
+                  uVar9 = local_68 & 0xffffffff;
+                  iVar18 = iVar18 + (int)local_68 * 2 + 2;
+                }
+                psVar8 = (short *)*puVar5;
+                if (psVar8 == (short *)0x0) {
+                  uVar12 = 0x80070057;
+                }
+                else {
+                  lVar10 = 0x7ffffffe;
+                  do {
+                    if (*psVar8 == 0) break;
+                    psVar8 = psVar8 + 1;
+                    lVar10 = lVar10 + -1;
+                  } while (lVar10 != 0);
+                  if (lVar10 == 0) {
+                    local_68 = 0;
+                    uVar12 = 0x80070057;
+                  }
+                  else {
+                    local_68 = 0x7ffffffe - lVar10;
+                    uVar12 = uVar15;
+                  }
+                  uVar9 = local_68 & 0xffffffff;
+                }
+                if ((int)uVar12 < 0) goto LAB_3;
+                psVar8 = (short *)puVar5[4];
+                uVar19 = iVar18 + (int)uVar9 * 2 + 2;
+                if (psVar8 != (short *)0x0) {
+                  lVar10 = 0x7ffffffe;
+                  do {
+                    if (*psVar8 == 0) break;
+                    psVar8 = psVar8 + 1;
+                    lVar10 = lVar10 + -1;
+                  } while (lVar10 != 0);
+                  if (lVar10 == 0) {
+                    local_68 = 0;
+                    uVar12 = 0x80070057;
+                  }
+                  else {
+                    local_68 = 0x7ffffffe - lVar10;
+                    uVar12 = uVar15;
+                  }
+                  if ((int)uVar12 < 0) goto LAB_2;
+                  uVar9 = local_68 & 0xffffffff;
+                  uVar19 = uVar19 + (int)local_68 * 2 + 2;
+                }
+                piVar3 = *(int **)(puVar6 + 0xe);
+                if ((piVar3 != (int *)0x0) && (*(longlong *)(piVar3 + 2) != 0)) {
+                  uVar19 = uVar19 + *piVar3 * 4 + 0x10;
+                }
+                ReleaseSRWLockShared((PSRWLOCK)(puVar5 + 9));
+                if (param_2 < uVar19) {
+                  uVar9 = (ulonglong)uVar16;
+                  lVar14 = uVar9 * 10;
+                  LocalFree(*(HLOCAL *)((longlong)_Dst + uVar9 * 0x50 + 0x20));
+                  *(undefined8 *)((longlong)_Dst + uVar9 * 0x50 + 0x20) = 0;
+                  LocalFree(*(HLOCAL *)((longlong)_Dst + uVar9 * 0x50 + 0x28));
+                  *(undefined8 *)((longlong)_Dst + uVar9 * 0x50 + 0x28) = 0;
+                  LocalFree(*(HLOCAL *)((longlong)_Dst + uVar9 * 0x50 + 0x30));
+                  *(undefined8 *)((longlong)_Dst + uVar9 * 0x50 + 0x30) = 0;
+                  if ((*(longlong *)((longlong)_Dst + uVar9 * 0x50 + 0x38) != 0) &&
+                     (*(longlong *)(*(longlong *)((longlong)_Dst + uVar9 * 0x50 + 0x38) + 8) != 0))
+                  {
+                    pvVar11 = *(HLOCAL *)(*(longlong *)((longlong)_Dst + uVar9 * 0x50 + 0x38) + 8);
+LAB_5:
+                    LocalFree(pvVar11);
+                  }
+LAB_4:
+                  pvVar11 = *(HLOCAL *)((longlong)_Dst + lVar14 * 8 + 0x38);
+                  if (pvVar11 != (HLOCAL)0x0) {
+                    LocalFree(pvVar11);
+                    *(undefined8 *)((longlong)_Dst + lVar14 * 8 + 0x38) = 0;
+                  }
+                  uVar12 = (-(uint)(uVar16 != 0) & 0x70) + 0x7a;
+                }
+                else {
+                  uVar16 = uVar16 + 1;
+                  uVar17 = uVar17 + 1;
+                  local_78 = local_78 + 1;
+                  if (local_78 < (uint)*pLVar1) goto code_r0x000180099734;
+LAB_6:
+                  uVar12 = 0;
+                }
+                goto LAB_9;
               }
-              psVar8 = (short *)puVar5[3];
-              iVar10 = (int)uVar12 + 0x50;
-              if (psVar8 != (short *)0x0) {
-                lVar9 = 0x7ffffffe;
-                do {
-                  if (*psVar8 == 0) break;
-                  psVar8 = psVar8 + 1;
-                  lVar9 = lVar9 + -1;
-                } while (lVar9 != 0);
-                if (lVar9 == 0) {
-                  local_70 = 0;
-                  uVar15 = 0x80070057;
-                }
-                else {
-                  local_70 = 0x7ffffffe - (int)lVar9;
-                  uVar15 = 0;
-                }
-                if (-1 < (int)uVar15) {
-                  iVar10 = iVar10 + local_70 * 2 + 2;
-                  goto LAB_3;
-                }
-LAB_4:
-                ReleaseSRWLockShared((PSRWLOCK)(puVar5 + 9));
-                uVar15 = uVar15 & 0xffff;
-                goto LAB_0;
-              }
-LAB_3:
-              psVar8 = (short *)*puVar5;
-              if (psVar8 == (short *)0x0) {
-                uVar11 = 0x80070057;
-              }
-              else {
-                lVar9 = 0x7ffffffe;
-                do {
-                  if (*psVar8 == 0) break;
-                  psVar8 = psVar8 + 1;
-                  lVar9 = lVar9 + -1;
-                } while (lVar9 != 0);
-                if (lVar9 == 0) {
-                  uVar11 = 0x80070057;
-                  local_70 = 0;
-                }
-                else {
-                  local_70 = 0x7ffffffe - (int)lVar9;
-                }
-              }
-              if ((int)uVar11 < 0) {
-                uVar15 = uVar11 & 0xffff;
-                goto LAB_2;
-              }
-              psVar8 = (short *)puVar5[4];
-              uVar11 = iVar10 + local_70 * 2 + 2;
-              if (psVar8 != (short *)0x0) {
-                lVar9 = 0x7ffffffe;
-                do {
-                  if (*psVar8 == 0) break;
-                  psVar8 = psVar8 + 1;
-                  lVar9 = lVar9 + -1;
-                } while (lVar9 != 0);
-                if (lVar9 == 0) {
-                  local_70 = 0;
-                  uVar15 = 0x80070057;
-                }
-                else {
-                  local_70 = 0x7ffffffe - (int)lVar9;
-                  uVar15 = 0;
-                }
-                if ((int)uVar15 < 0) goto LAB_4;
-                uVar11 = uVar11 + local_70 * 2 + 2;
-              }
-              uVar12 = (ulonglong)uVar11;
-              piVar3 = *(int **)(puVar6 + 0xe);
-              if ((piVar3 != (int *)0x0) && (*(longlong *)(piVar3 + 2) != 0)) {
-                uVar12 = (ulonglong)(uVar11 + *piVar3 * 4 + 0x10);
-              }
-              ReleaseSRWLockShared((PSRWLOCK)(puVar5 + 9));
-              if (param_2 < (uint)uVar12) {
-                LocalFree(*(HLOCAL *)((longlong)_Dst + uVar14 * 0x50 + 0x20));
-                *(undefined8 *)((longlong)_Dst + uVar14 * 0x50 + 0x20) = 0;
-                LocalFree(*(HLOCAL *)((longlong)_Dst + uVar14 * 0x50 + 0x28));
-                *(undefined8 *)((longlong)_Dst + uVar14 * 0x50 + 0x28) = 0;
-                LocalFree(*(HLOCAL *)((longlong)_Dst + uVar14 * 0x50 + 0x30));
-                lVar9 = *(longlong *)((longlong)_Dst + uVar14 * 0x50 + 0x38);
-                *(undefined8 *)((longlong)_Dst + uVar14 * 0x50 + 0x30) = 0;
-                if ((lVar9 != 0) && (pvVar4 = *(HLOCAL *)(lVar9 + 8), pvVar4 != (HLOCAL)0x0)) {
-                  LocalFree(pvVar4);
-                }
-                pvVar4 = *(HLOCAL *)((longlong)_Dst + uVar14 * 0x50 + 0x38);
-                if (pvVar4 != (HLOCAL)0x0) {
-                  LocalFree(pvVar4);
-                  *(undefined8 *)((longlong)_Dst + uVar14 * 0x50 + 0x38) = 0;
-                }
-                if (uVar13 == 0) goto LAB_1;
-                uVar15 = 0xea;
-                break;
-              }
-              uVar13 = uVar13 + 1;
-              uVar14 = (ulonglong)uVar13;
-              uVar16 = uVar16 + 1;
-              uVar17 = (ulonglong)uVar16;
-              local_78 = local_78 + 1;
-              uVar7 = (ulonglong)local_78;
-              uVar15 = 0;
-              if (((uint)*pLVar1 <= local_78) || (uVar15 = 0, uVar2 <= uVar16)) break;
-            } while( true );
+              goto LAB_7;
+            }
           }
-          *param_4 = uVar13;
+LAB_9:
+          bVar4 = EvaluateCurrentState(&g_Feature_3777210683_62264998_FeatureDescriptorDetails);
+          uVar19 = uVar12;
+          if ((int)CONCAT71(extraout_var_00,bVar4) == 0) {
+LAB_10:
+            uVar12 = uVar19;
+            if (uVar12 != 0) {
+LAB_11:
+              if (uVar12 != 0xea) goto LAB_0;
+            }
+          }
+          else {
+            if (uVar12 != 0) goto LAB_11;
+            if (((uint)uVar13 <= uVar16) && (uVar19 = 0xea, uVar17 < uVar2)) goto LAB_10;
+          }
+          *param_4 = uVar16;
           *param_5 = uVar2 - *param_1;
-          *param_1 = uVar16;
-          *(uint *)*param_3 = uVar13;
-          goto LAB_5;
+          *param_1 = uVar17;
+          *(uint *)*param_3 = uVar16;
+          goto LAB_12;
         }
       }
-      uVar15 = 8;
+      uVar12 = 8;
     }
   }
+  goto LAB_0;
+LAB_2:
+  ReleaseSRWLockShared((PSRWLOCK)(puVar5 + 9));
+  uVar12 = uVar12 & 0xffff;
+  goto LAB_0;
+code_r0x000180099734:
+  if (uVar2 <= uVar17) goto LAB_7;
+  goto LAB_8;
+LAB_3:
+  uVar12 = uVar12 & 0xffff;
+LAB_1:
+  ReleaseSRWLockShared((PSRWLOCK)(puVar5 + 9));
 LAB_0:
   FSMFreeRelationshipMemoryArray((uint *)*param_3);
   *param_3 = 0;
-LAB_5:
+LAB_12:
   LeaveCriticalSection(g_FailoverEndpoints);
-  return uVar15;
+  return uVar12;
 }
 

```


## _fgs__DHCP_OPTION

### Match Info



|Key|dhcpssvc-06.dll - dhcpssvc-07.dll|
| :---: | :---: |
|diff_type|code,length,address,called|
|ratio|0.68|
|i_ratio|0.61|
|m_ratio|0.78|
|b_ratio|0.78|
|match_types|SymbolsHash|

### Function Meta Diff



|Key|dhcpssvc-06.dll|dhcpssvc-07.dll|
| :---: | :---: | :---: |
|name|_fgs__DHCP_OPTION|_fgs__DHCP_OPTION|
|fullname|_fgs__DHCP_OPTION|_fgs__DHCP_OPTION|
|refcount|8|8|
|`length`|61|103|
|`called`|KERNEL32.DLL::LocalFree<br>_fgs__DHCP_OPTION_DATA|EvaluateCurrentState<br>KERNEL32.DLL::LocalFree<br>_fgs__DHCP_OPTION_DATA|
|calling|DhcpEnumRPCOptionDefs<br>DhcpEnumRPCOptionDefs6<br>DhcpGetAllOptions<br>DhcpGetAllOptionsV6<br>DhcpGetOptionDef6Internal<br>DhcpGetOptionDefInternal<br>_fgs__DHCP_OPTION_ARRAY|DhcpEnumRPCOptionDefs<br>DhcpEnumRPCOptionDefs6<br>DhcpGetAllOptions<br>DhcpGetAllOptionsV6<br>DhcpGetOptionDef6Internal<br>DhcpGetOptionDefInternal<br>_fgs__DHCP_OPTION_ARRAY|
|paramcount|1|1|
|`address`|1800bdb1c|1800be73c|
|sig|undefined __fastcall _fgs__DHCP_OPTION(longlong param_1)|undefined __fastcall _fgs__DHCP_OPTION(longlong param_1)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|False|False|

### _fgs__DHCP_OPTION Called Diff


```diff
--- _fgs__DHCP_OPTION called
+++ _fgs__DHCP_OPTION called
@@ -0,0 +1 @@
+EvaluateCurrentState
```


### _fgs__DHCP_OPTION Diff


```diff
--- _fgs__DHCP_OPTION
+++ _fgs__DHCP_OPTION
@@ -1,16 +1,28 @@
 
 void _fgs__DHCP_OPTION(longlong param_1)
 
 {
+  bool bVar1;
+  undefined3 extraout_var;
+  undefined3 extraout_var_00;
+  
   if (*(HLOCAL *)(param_1 + 8) != (HLOCAL)0x0) {
     LocalFree(*(HLOCAL *)(param_1 + 8));
+    bVar1 = EvaluateCurrentState(&g_Feature_4257976632_62401633_FeatureDescriptorDetails);
+    if (CONCAT31(extraout_var,bVar1) != 0) {
+      *(undefined8 *)(param_1 + 8) = 0;
+    }
   }
   if (*(HLOCAL *)(param_1 + 0x10) != (HLOCAL)0x0) {
     LocalFree(*(HLOCAL *)(param_1 + 0x10));
+    bVar1 = EvaluateCurrentState(&g_Feature_4257976632_62401633_FeatureDescriptorDetails);
+    if (CONCAT31(extraout_var_00,bVar1) != 0) {
+      *(undefined8 *)(param_1 + 0x10) = 0;
+    }
   }
   if (*(longlong *)(param_1 + 0x20) != 0) {
     _fgs__DHCP_OPTION_DATA((uint *)(param_1 + 0x18));
   }
   return;
 }
 

```


# Modified (No Code Changes)


*Slightly modified functions have no code changes, rather differnces in:*
- refcount
- length
- called
- calling
- name
- fullname

## KERNEL32.DLL::HeapFree

### Match Info



|Key|dhcpssvc-06.dll - dhcpssvc-07.dll|
| :---: | :---: |
|diff_type|refcount,address,calling|
|ratio|1.0|
|i_ratio|1.0|
|m_ratio|1.0|
|b_ratio|1.0|
|match_types|SymbolsHash,ExternalsName|

### Function Meta Diff



|Key|dhcpssvc-06.dll|dhcpssvc-07.dll|
| :---: | :---: | :---: |
|name|HeapFree|HeapFree|
|fullname|KERNEL32.DLL::HeapFree|KERNEL32.DLL::HeapFree|
|`refcount`|569|570|
|length|0|0|
|called|||
|`calling`|<details><summary>Expand for full list:<br>AddBindingInfo<br>AddSScopeToList<br>AddSocketToGArray<br>AddToBadList<br>AddressCacherIPv6Scavenger<br>AppendClustersToList<br>AppendFixUpServerInClasslessRoutesForQuarantine<br>AppendMadcapRequestedParameters<br>AppendSOHVendorSpecific<br>AppendValue<br>AppendVendorSpecificOptions</summary>AssembleQuarantineUserClass<br>AuditIPAddressUsage<br>AuditLogStart<br>CalculateSuperScopeStats<br>CheckScopeLevelOption<br>CheckScopeV6LevelOption<br>CleanUpQuarDecisionPacket<br>CleanupData<br>CleanupIpDatabase<br>CleanupOptionContext<br>ConsiderAppendingOption<br>ConvertAnsiToUtf8<br>ConvertOptionInfoRPCToMemFormat<br>ConvertUnicodeToPunycode<br>ConvertUnicodeToWideCharPunycode<br>ConvertUtf8ToAnsi<br>CreateClientInfoEx<br>CreateDirectoryPathOem<br>CreateRegistryWithSharedSecretInfo<br>CreateStatelessIndexes<br>DeleteSocketFromGArray<br>DhcpAAInitSubnetsForDBLoss<br>DhcpAddPendingCtxtV6<br>DhcpAppendClassList<br>DhcpAppendDnsRelatedOptions6<br>DhcpAuthenticateMessage<br>DhcpBNDCleanup<br>DhcpBNDCleanupCoreMessage<br>DhcpBNDGetPendingBndUpdates<br>DhcpBNDInsertInDbBndQ<br>DhcpBNDProcessDeletedAddresses<br>DhcpBNDProcessIncomingBndUpdates<br>DhcpBNDProcessOutStandingUpdateFromDB<br>DhcpBNDProcessUpdReqORUpdReqAll<br>DhcpBNDUpdateEventsInCommInt<br>DhcpBackupConfiguration<br>DhcpCMCloseConnection<br>DhcpCMCloseConnectionUnclaimedSocket<br>DhcpCMCloseListeningSocket<br>DhcpCMReceiveFailoverMessage<br>DhcpCMSendConnectAckRejected<br>DhcpCMSendFailoverMessage<br>DhcpCMUpdateListeningRelName<br>DhcpCalculateBase64Dhcid<br>DhcpCalculateHash<br>DhcpCheckPathForRegKey<br>DhcpCleanupDnsMemory<br>DhcpComputeMessageDigest<br>DhcpConcatenateFQDN<br>DhcpCreateAndLookupSid<br>DhcpDALJetGetValue<br>DhcpDeletePendingCtxt<br>DhcpDeleteSubnet<br>DhcpDetermineHostName6<br>DhcpDnsAsyncAdd<br>DhcpDnsAsyncDelete<br>DhcpDnsCallBack<br>DhcpDnsDecideOptionsForClient6<br>DhcpDnsFreeMemory<br>DhcpDoDynDnsCheckDelete<br>DhcpDoDynDnsCreateEntryWork<br>DhcpDoDynDnsRefresh<br>DhcpEnumerateFailoverConfiguration<br>DhcpFOOpenDeletedAddressTable<br>DhcpFSMAddEndpoint<br>DhcpFSMCreateAddressAllocationThread<br>DhcpFSMModuleCleanup<br>DhcpFSMProcessChangedState<br>DhcpFSMProcessFailoverMessage<br>DhcpFSMSendConnect<br>DhcpFSMSendConnectAck<br>DhcpFSMSendSimpleMessage<br>DhcpFSMSendState<br>DhcpFSMSendUpdReqForScopes<br>DhcpFSMUpdateEndpoint<br>DhcpFailoverReadRegKeyParams<br>DhcpFailoverSubnetStatistics<br>DhcpFlipRegisteredBit<br>DhcpFormatDhcpFailoverMessageDigest<br>DhcpGetBootpInfo<br>DhcpGetDhcidRR<br>DhcpGetFailoverLeaseDuration<br>DhcpGetParameter6<br>DhcpGetParameterEx<br>DhcpInitializeFailoverConfiguration<br>DhcpIsDhcidEnabled<br>DhcpJetLoadConfig6<br>DhcpLookupDatabaseByHardwareAddress<br>DhcpLookupReservationByHardwareAddress<br>DhcpMessageCheckFilter<br>DhcpOemToUnicodeN<br>DhcpOpenFailoverBitmaskTable<br>DhcpOpenFailoverDbTable<br>DhcpRealDeleteClient<br>DhcpRegFillQuickBindInfo<br>DhcpRegFillQuickBindInfoV6<br>DhcpRegGetExpandValue<br>DhcpRegKeyToIpAddress<br>DhcpRemoveClientEntry<br>DhcpRemoveReservation<br>DhcpRespondToDiscover<br>DhcpScopeFailState<br>DhcpServerTraceFilter<br>DhcpSetOptionValue<br>DhcpSetOptionValue6<br>DhcpSubnetAddReservation<br>DhcpSubnetGetPolicyMibCount<br>DhcpTelemetryReportInfo<br>DhcpUnicodeToOem<br>DhcpUpdateAuditLogBlindQuar<br>DhcpV6AddBindingInfo<br>DhcpV6AuditLogCleanup<br>DhcpV6AuditLogStart<br>DhcpV6CleanupData<br>DhcpV6CleanupHeaderOptions<br>DhcpV6CleanupQData<br>DhcpV6CleanupReceivedOptions<br>DhcpV6EndPointChangeHandler<br>DhcpV6GetUserClassList<br>DhcpV6InsertFreePacket<br>DhcpV6IpTblCleanup<br>DhcpV6IsIpAddressBound<br>DhcpV6IsUpdateTableNeeded<br>DhcpV6MakeServerDuid<br>DhcpV6MessageLoop<br>DhcpV6ProcessConfirmMessage<br>DhcpV6ProcessRebindMessage<br>DhcpV6ProcessReceivedPacket<br>DhcpV6ProcessRenewMessage<br>DhcpV6ProcessRequestMessage<br>DhcpV6ProcessSolicitMessage<br>DhcpV6SetBindingInfo<br>DhcpV6UpdateAuditLogBlind<br>DhcpV6UpdateTable<br>DhcpV6WaitForMessageThreadToQuit<br>Dhcpv6CleanupDnsMemory<br>Dhcpv6DnsAsyncAdd<br>Dhcpv6DnsAsyncDelete<br>Dhcpv6DnsCallBack<br>Dhcpv6DnsFreeMemory<br>Dhcpv6DoDynDnsCheckDelete<br>Dhcpv6DoDynDnsCreateEntryWork<br>Dhcpv6DoDynDnsRefresh<br>Dhcpv6FlipRegisteredBit<br>Dhcpv6GetDnsServerList<br>Dhcpv6IsDhcidEnabled<br>Dhcpv6LeaseAddress<br>Dhcpv6RealDeleteClient<br>ExtractOptions<br>FSMAddScopesToEndpoint<br>FSMDeleteScopeFromEndpoint<br>FSMFreeEndpointMemory<br>FailoverDbGetConfiguration<br>FailoverDbReadBitmaskConfiguration<br>FailoverDbSetConfiguration<br>FailoverDbSetConfigurationColumns<br>FiniteStateMachine<br>FixBadEntries<br>FormatExclusionRange<br>FormatExclusionRangeV6<br>FormatIPV6andName<br>FormatIPandName<br>FormatOptionName<br>FormatOptionValue<br>FormatPhysicalAddress<br>FormatPolicyConditions<br>FreeDBEntry6<br>FreeFailoverPacket<br>FreeFreePacket<br>FreeQuarDecisionPacket<br>GetAlternateDnsServerList<br>GetDatabaseList<br>GetDnsServerList<br>GetFriendlyNameFromGuid<br>GetLeaseInfo<br>GetMCastDatabaseList<br>GetMCastLeaseInfo<br>HandlePingCallback<br>HandleRepliesEvent<br>HandleRequestsEvent<br>InitializeFreePacketPool<br>IpTblCleanup<br>IsStringTroublesome<br>LogETWEvent<br>LogETWEventV6<br>LogETWPolicyEvent<br>LogETWPolicyOptionEvent<br>LogETWStatelessInventoryEvent<br>LogETW_LLF_Event<br>LogLeaseUpdateEventV6<br>LogOptionRemoveEvent<br>LogOptionRemoveEventV6<br>LogOptionUpdateEvent<br>LogOptionUpdateEventV6<br>LogReservationOptionUpdateEvent<br>LogScavengeStats<br>MadcapDeletePendingCtxt<br>MadcapGetMScopeListOption<br>MemFree<br>MessageQCleanup<br>ParseOptionIana_Server<br>ParseOptionIata_Server<br>ParseVendorSpecific<br>ParseVendorSpecificContent<br>PassAttrToIAS<br>PerformRestore<br>PingCleanup<br>PlumbQuarantineDecisionFromIASResponse<br>ProcessBootpRequest<br>ProcessDhcpDecline<br>ProcessDhcpDiscover<br>ProcessDhcpInform<br>ProcessDhcpRelease<br>ProcessDhcpRequest<br>ProcessInfoRequestMessage<br>ProcessMadcapDiscoverAndRequest<br>ProcessMadcapRenew<br>ProcessMessage<br>PutASCIIStringInBuffer<br>PutBranch<br>QuarPacketLoop<br>QuarantineDecisionCallback<br>R_DhcpBackupDatabase<br>R_DhcpCreateClientInfoVQ<br>R_DhcpCreateOptionV5<br>R_DhcpCreateOptionV6<br>R_DhcpRestoreDatabase<br>R_DhcpServerSetConfigVQ<br>R_DhcpSetClientInfoV4<br>R_DhcpSetClientInfoVQ<br>R_DhcpSetOptionInfoV5<br>R_DhcpSetOptionInfoV6<br>R_DhcpV4FailoverAddScopeToRelationship<br>R_DhcpV4FailoverCreateRelationship<br>R_DhcpV4FailoverSetRelationship<br>R_DhcpV4SetPolicyEnforcement<br>ReadDBEntry6<br>ReadDbEntriesInternal<br>ReadDbEntry<br>RebindProcessIANA<br>RenewProcessIANA<br>RequestProcessIANA<br>ResetAndRestoreInFreePacketPool<br>RogueNetworkStop<br>RogueNetworkStopV6<br>RogueReceiveAck<br>ScanDatabase<br>ScavengeStatelessEntries<br>SetDwordOptionValue<br>Shutdown<br>SolicitProcessIANA<br>UnInitializeFreePacketPool<br>UpdateArpCache<br>UpdatePolicyParams<br>UpdateTable<br>Util_DhcpUnicodeToAnsi<br>ValidateCondnsAndExprs<br>VerifyLists</details>|<details><summary>Expand for full list:<br>AddBindingInfo<br>AddSScopeToList<br>AddSocketToGArray<br>AddToBadList<br>AddressCacherIPv6Scavenger<br>AppendClustersToList<br>AppendFixUpServerInClasslessRoutesForQuarantine<br>AppendMadcapRequestedParameters<br>AppendSOHVendorSpecific<br>AppendValue<br>AppendVendorSpecificOptions</summary>AssembleQuarantineUserClass<br>AuditIPAddressUsage<br>AuditLogStart<br>CalculateSuperScopeStats<br>CheckScopeLevelOption<br>CheckScopeV6LevelOption<br>CleanUpQuarDecisionPacket<br>CleanupData<br>CleanupIpDatabase<br>CleanupOptionContext<br>ConsiderAppendingOption<br>ConvertAnsiToUtf8<br>ConvertOptionInfoRPCToMemFormat<br>ConvertUnicodeToPunycode<br>ConvertUnicodeToWideCharPunycode<br>ConvertUtf8ToAnsi<br>CreateClientInfoEx<br>CreateDirectoryPathOem<br>CreateRegistryWithSharedSecretInfo<br>CreateStatelessIndexes<br>DeleteSocketFromGArray<br>DhcpAAInitSubnetsForDBLoss<br>DhcpAddPendingCtxtV6<br>DhcpAppendClassList<br>DhcpAppendDnsRelatedOptions6<br>DhcpAuthenticateMessage<br>DhcpBNDCleanup<br>DhcpBNDCleanupCoreMessage<br>DhcpBNDGetPendingBndUpdates<br>DhcpBNDInsertInDbBndQ<br>DhcpBNDProcessDeletedAddresses<br>DhcpBNDProcessIncomingBndUpdates<br>DhcpBNDProcessOutStandingUpdateFromDB<br>DhcpBNDProcessUpdReqORUpdReqAll<br>DhcpBNDUpdateEventsInCommInt<br>DhcpBackupConfiguration<br>DhcpCMCloseConnection<br>DhcpCMCloseConnectionUnclaimedSocket<br>DhcpCMCloseListeningSocket<br>DhcpCMReceiveFailoverMessage<br>DhcpCMSendConnectAckRejected<br>DhcpCMSendFailoverMessage<br>DhcpCMUpdateListeningRelName<br>DhcpCalculateBase64Dhcid<br>DhcpCalculateHash<br>DhcpCheckPathForRegKey<br>DhcpCleanupDnsMemory<br>DhcpComputeMessageDigest<br>DhcpConcatenateFQDN<br>DhcpCreateAndLookupSid<br>DhcpDALJetGetValue<br>DhcpDeletePendingCtxt<br>DhcpDeleteSubnet<br>DhcpDetermineHostName6<br>DhcpDnsAsyncAdd<br>DhcpDnsAsyncDelete<br>DhcpDnsCallBack<br>DhcpDnsDecideOptionsForClient6<br>DhcpDnsFreeMemory<br>DhcpDoDynDnsCheckDelete<br>DhcpDoDynDnsCreateEntryWork<br>DhcpDoDynDnsRefresh<br>DhcpEnumerateFailoverConfiguration<br>DhcpFOOpenDeletedAddressTable<br>DhcpFSMAddEndpoint<br>DhcpFSMCreateAddressAllocationThread<br>DhcpFSMModuleCleanup<br>DhcpFSMProcessChangedState<br>DhcpFSMProcessFailoverMessage<br>DhcpFSMSendConnect<br>DhcpFSMSendConnectAck<br>DhcpFSMSendSimpleMessage<br>DhcpFSMSendState<br>DhcpFSMSendUpdReqForScopes<br>DhcpFSMUpdateEndpoint<br>DhcpFailoverReadRegKeyParams<br>DhcpFailoverSubnetStatistics<br>DhcpFlipRegisteredBit<br>DhcpFormatDhcpFailoverMessageDigest<br>DhcpGetBootpInfo<br>DhcpGetDhcidRR<br>DhcpGetFailoverLeaseDuration<br>DhcpGetOptionV6ByOptClass<br>DhcpGetParameter6<br>DhcpGetParameterEx<br>DhcpInitializeFailoverConfiguration<br>DhcpIsDhcidEnabled<br>DhcpJetLoadConfig6<br>DhcpLookupDatabaseByHardwareAddress<br>DhcpLookupReservationByHardwareAddress<br>DhcpMessageCheckFilter<br>DhcpOemToUnicodeN<br>DhcpOpenFailoverBitmaskTable<br>DhcpOpenFailoverDbTable<br>DhcpRealDeleteClient<br>DhcpRegFillQuickBindInfo<br>DhcpRegFillQuickBindInfoV6<br>DhcpRegGetExpandValue<br>DhcpRegKeyToIpAddress<br>DhcpRemoveClientEntry<br>DhcpRemoveReservation<br>DhcpRespondToDiscover<br>DhcpScopeFailState<br>DhcpServerTraceFilter<br>DhcpSetOptionValue<br>DhcpSetOptionValue6<br>DhcpSubnetAddReservation<br>DhcpSubnetGetPolicyMibCount<br>DhcpTelemetryReportInfo<br>DhcpUnicodeToOem<br>DhcpUpdateAuditLogBlindQuar<br>DhcpV6AddBindingInfo<br>DhcpV6AuditLogCleanup<br>DhcpV6AuditLogStart<br>DhcpV6CleanupData<br>DhcpV6CleanupHeaderOptions<br>DhcpV6CleanupQData<br>DhcpV6CleanupReceivedOptions<br>DhcpV6EndPointChangeHandler<br>DhcpV6GetUserClassList<br>DhcpV6InsertFreePacket<br>DhcpV6IpTblCleanup<br>DhcpV6IsIpAddressBound<br>DhcpV6IsUpdateTableNeeded<br>DhcpV6MakeServerDuid<br>DhcpV6MessageLoop<br>DhcpV6ProcessConfirmMessage<br>DhcpV6ProcessRebindMessage<br>DhcpV6ProcessReceivedPacket<br>DhcpV6ProcessRenewMessage<br>DhcpV6ProcessRequestMessage<br>DhcpV6ProcessSolicitMessage<br>DhcpV6SetBindingInfo<br>DhcpV6UpdateAuditLogBlind<br>DhcpV6UpdateTable<br>DhcpV6WaitForMessageThreadToQuit<br>Dhcpv6CleanupDnsMemory<br>Dhcpv6DnsAsyncAdd<br>Dhcpv6DnsAsyncDelete<br>Dhcpv6DnsCallBack<br>Dhcpv6DnsFreeMemory<br>Dhcpv6DoDynDnsCheckDelete<br>Dhcpv6DoDynDnsCreateEntryWork<br>Dhcpv6DoDynDnsRefresh<br>Dhcpv6FlipRegisteredBit<br>Dhcpv6GetDnsServerList<br>Dhcpv6IsDhcidEnabled<br>Dhcpv6LeaseAddress<br>Dhcpv6RealDeleteClient<br>ExtractOptions<br>FSMAddScopesToEndpoint<br>FSMDeleteScopeFromEndpoint<br>FSMFreeEndpointMemory<br>FailoverDbGetConfiguration<br>FailoverDbReadBitmaskConfiguration<br>FailoverDbSetConfiguration<br>FailoverDbSetConfigurationColumns<br>FiniteStateMachine<br>FixBadEntries<br>FormatExclusionRange<br>FormatExclusionRangeV6<br>FormatIPV6andName<br>FormatIPandName<br>FormatOptionName<br>FormatOptionValue<br>FormatPhysicalAddress<br>FormatPolicyConditions<br>FreeDBEntry6<br>FreeFailoverPacket<br>FreeFreePacket<br>FreeQuarDecisionPacket<br>GetAlternateDnsServerList<br>GetDatabaseList<br>GetDnsServerList<br>GetFriendlyNameFromGuid<br>GetLeaseInfo<br>GetMCastDatabaseList<br>GetMCastLeaseInfo<br>HandlePingCallback<br>HandleRepliesEvent<br>HandleRequestsEvent<br>InitializeFreePacketPool<br>IpTblCleanup<br>IsStringTroublesome<br>LogETWEvent<br>LogETWEventV6<br>LogETWPolicyEvent<br>LogETWPolicyOptionEvent<br>LogETWStatelessInventoryEvent<br>LogETW_LLF_Event<br>LogLeaseUpdateEventV6<br>LogOptionRemoveEvent<br>LogOptionRemoveEventV6<br>LogOptionUpdateEvent<br>LogOptionUpdateEventV6<br>LogReservationOptionUpdateEvent<br>LogScavengeStats<br>MadcapDeletePendingCtxt<br>MadcapGetMScopeListOption<br>MemFree<br>MessageQCleanup<br>ParseOptionIana_Server<br>ParseOptionIata_Server<br>ParseVendorSpecific<br>ParseVendorSpecificContent<br>PassAttrToIAS<br>PerformRestore<br>PingCleanup<br>PlumbQuarantineDecisionFromIASResponse<br>ProcessBootpRequest<br>ProcessDhcpDecline<br>ProcessDhcpDiscover<br>ProcessDhcpInform<br>ProcessDhcpRelease<br>ProcessDhcpRequest<br>ProcessInfoRequestMessage<br>ProcessMadcapDiscoverAndRequest<br>ProcessMadcapRenew<br>ProcessMessage<br>PutASCIIStringInBuffer<br>PutBranch<br>QuarPacketLoop<br>QuarantineDecisionCallback<br>R_DhcpBackupDatabase<br>R_DhcpCreateClientInfoVQ<br>R_DhcpCreateOptionV5<br>R_DhcpCreateOptionV6<br>R_DhcpRestoreDatabase<br>R_DhcpServerSetConfigVQ<br>R_DhcpSetClientInfoV4<br>R_DhcpSetClientInfoVQ<br>R_DhcpSetOptionInfoV5<br>R_DhcpSetOptionInfoV6<br>R_DhcpV4FailoverAddScopeToRelationship<br>R_DhcpV4FailoverCreateRelationship<br>R_DhcpV4FailoverSetRelationship<br>R_DhcpV4SetPolicyEnforcement<br>ReadDBEntry6<br>ReadDbEntriesInternal<br>ReadDbEntry<br>RebindProcessIANA<br>RenewProcessIANA<br>RequestProcessIANA<br>ResetAndRestoreInFreePacketPool<br>RogueNetworkStop<br>RogueNetworkStopV6<br>RogueReceiveAck<br>ScanDatabase<br>ScavengeStatelessEntries<br>SetDwordOptionValue<br>Shutdown<br>SolicitProcessIANA<br>UnInitializeFreePacketPool<br>UpdateArpCache<br>UpdatePolicyParams<br>UpdateTable<br>Util_DhcpUnicodeToAnsi<br>ValidateCondnsAndExprs<br>VerifyLists</details>|
|paramcount|3|3|
|`address`|EXTERNAL:000001a3|EXTERNAL:000001a4|
|sig|BOOL __stdcall HeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem)|BOOL __stdcall HeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|True|True|

### KERNEL32.DLL::HeapFree Calling Diff


```diff
--- KERNEL32.DLL::HeapFree calling
+++ KERNEL32.DLL::HeapFree calling
@@ -93,0 +94 @@
+DhcpGetOptionV6ByOptClass
```


## WS2_32.DLL::htonl

### Match Info



|Key|dhcpssvc-06.dll - dhcpssvc-07.dll|
| :---: | :---: |
|diff_type|refcount,address|
|ratio|1.0|
|i_ratio|1.0|
|m_ratio|1.0|
|b_ratio|1.0|
|match_types|SymbolsHash,ExternalsName|

### Function Meta Diff



|Key|dhcpssvc-06.dll|dhcpssvc-07.dll|
| :---: | :---: | :---: |
|name|htonl|htonl|
|fullname|WS2_32.DLL::htonl|WS2_32.DLL::htonl|
|`refcount`|163|165|
|length|0|0|
|called|||
|calling|<details><summary>Expand for full list:<br>AppendFixUpServerInClasslessRoutesForQuarantine<br>AuditIPAddressUsage<br>CalculateSuperScopeStats<br>CleanupIpDatabase<br>CleanupMCastDatabase<br>ConsiderAppendingOption<br>CreateClientInfoEx<br>DhcpBNDProcessIncomingBndUpdates<br>DhcpCMProcessNewConnectionRequests<br>DhcpDeleteExpiredCtxt<br>DhcpDnsAsyncAdd</summary>DhcpDnsAsyncDelete<br>DhcpDnsCallBack<br>DhcpInitializeFailoverConfiguration<br>DhcpIsClientValid<br>DhcpLogAuthRelatedETWEvents<br>DhcpParseOptionV6<br>DhcpParseRegistryOption<br>DhcpRespondToDiscover<br>DhcpRetractOffer<br>DhcpSubnetGetPolicyMibCount<br>DhcpUpdateAuditLogBlindQuar<br>DhcpV4GetClientInfoExInternal<br>DhcpV4UALLogEvent<br>DhcpV6MakeServerDuid<br>Dhcpv6AddOptionIAAddr<br>Dhcpv6AddOptionIAPrefix<br>Dhcpv6AddOptionIana<br>Dhcpv6AddOptionIapd<br>Dhcpv6AddOptionIata<br>Dhcpv6AddVendorSpecInfo<br>Dhcpv6AppendOption<br>DoIcmpRequestForDynBootp<br>ExpandMadcapAddressList<br>FSMFailoverRelationshipInit<br>FiniteStateMachine<br>FixBadEntries<br>HandleIcmpResult<br>LogETWFailoverAdminEvent<br>LogETWFailoverBNDUPDAdminEvent<br>LogETWFailoverEvent<br>MFFormatBndAckRecord<br>MFFormatBndUpdRecord<br>MFFormatConnectAckMessage<br>MFFormatConnectMessage<br>MFFormatDhcpFailoverMessageHeader<br>MFFormatStateMessage<br>MadcapGetMScopeListOption<br>MadcapRetractOffer<br>PassAttrToIAS<br>ProcessBootpRequest<br>ProcessDhcpDecline<br>ProcessDhcpInform<br>ProcessDhcpRelease<br>ProcessDhcpRequest<br>ProcessMadcapDiscoverAndRequest<br>ProcessMadcapInform<br>ProcessMadcapRelease<br>ProcessMadcapRenew<br>R_DhcpCreateClientInfoVQ<br>R_DhcpDeleteClientInfo<br>R_DhcpDeleteMClientInfo<br>R_DhcpEnumSubnetClientsFilterStatusInfo<br>R_DhcpEnumSubnetClientsV4<br>R_DhcpEnumSubnetClientsV5<br>R_DhcpEnumSubnetClientsVQ<br>R_DhcpGetMClientInfo<br>R_DhcpSetClientInfoV4<br>R_DhcpSetClientInfoVQ<br>R_DhcpV4CreateClientInfo<br>R_DhcpV4CreateClientInfoEx<br>R_DhcpV4EnumSubnetClients<br>R_DhcpV4EnumSubnetClientsEx<br>R_DhcpV4FailoverGetClientInfo<br>RogueEventLog<br>RogueReceiveAck<br>ValidateMadcapMessage</details>|<details><summary>Expand for full list:<br>AppendFixUpServerInClasslessRoutesForQuarantine<br>AuditIPAddressUsage<br>CalculateSuperScopeStats<br>CleanupIpDatabase<br>CleanupMCastDatabase<br>ConsiderAppendingOption<br>CreateClientInfoEx<br>DhcpBNDProcessIncomingBndUpdates<br>DhcpCMProcessNewConnectionRequests<br>DhcpDeleteExpiredCtxt<br>DhcpDnsAsyncAdd</summary>DhcpDnsAsyncDelete<br>DhcpDnsCallBack<br>DhcpInitializeFailoverConfiguration<br>DhcpIsClientValid<br>DhcpLogAuthRelatedETWEvents<br>DhcpParseOptionV6<br>DhcpParseRegistryOption<br>DhcpRespondToDiscover<br>DhcpRetractOffer<br>DhcpSubnetGetPolicyMibCount<br>DhcpUpdateAuditLogBlindQuar<br>DhcpV4GetClientInfoExInternal<br>DhcpV4UALLogEvent<br>DhcpV6MakeServerDuid<br>Dhcpv6AddOptionIAAddr<br>Dhcpv6AddOptionIAPrefix<br>Dhcpv6AddOptionIana<br>Dhcpv6AddOptionIapd<br>Dhcpv6AddOptionIata<br>Dhcpv6AddVendorSpecInfo<br>Dhcpv6AppendOption<br>DoIcmpRequestForDynBootp<br>ExpandMadcapAddressList<br>FSMFailoverRelationshipInit<br>FiniteStateMachine<br>FixBadEntries<br>HandleIcmpResult<br>LogETWFailoverAdminEvent<br>LogETWFailoverBNDUPDAdminEvent<br>LogETWFailoverEvent<br>MFFormatBndAckRecord<br>MFFormatBndUpdRecord<br>MFFormatConnectAckMessage<br>MFFormatConnectMessage<br>MFFormatDhcpFailoverMessageHeader<br>MFFormatStateMessage<br>MadcapGetMScopeListOption<br>MadcapRetractOffer<br>PassAttrToIAS<br>ProcessBootpRequest<br>ProcessDhcpDecline<br>ProcessDhcpInform<br>ProcessDhcpRelease<br>ProcessDhcpRequest<br>ProcessMadcapDiscoverAndRequest<br>ProcessMadcapInform<br>ProcessMadcapRelease<br>ProcessMadcapRenew<br>R_DhcpCreateClientInfoVQ<br>R_DhcpDeleteClientInfo<br>R_DhcpDeleteMClientInfo<br>R_DhcpEnumSubnetClientsFilterStatusInfo<br>R_DhcpEnumSubnetClientsV4<br>R_DhcpEnumSubnetClientsV5<br>R_DhcpEnumSubnetClientsVQ<br>R_DhcpGetMClientInfo<br>R_DhcpSetClientInfoV4<br>R_DhcpSetClientInfoVQ<br>R_DhcpV4CreateClientInfo<br>R_DhcpV4CreateClientInfoEx<br>R_DhcpV4EnumSubnetClients<br>R_DhcpV4EnumSubnetClientsEx<br>R_DhcpV4FailoverGetClientInfo<br>RogueEventLog<br>RogueReceiveAck<br>ValidateMadcapMessage</details>|
|paramcount|1|1|
|`address`|EXTERNAL:00000107|EXTERNAL:00000108|
|sig|u_long __stdcall htonl(u_long hostlong)|u_long __stdcall htonl(u_long hostlong)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|True|True|

## ADVAPI32.DLL::RegQueryValueExW

### Match Info



|Key|dhcpssvc-06.dll - dhcpssvc-07.dll|
| :---: | :---: |
|diff_type|refcount,address,calling|
|ratio|1.0|
|i_ratio|1.0|
|m_ratio|1.0|
|b_ratio|1.0|
|match_types|SymbolsHash,ExternalsName|

### Function Meta Diff



|Key|dhcpssvc-06.dll|dhcpssvc-07.dll|
| :---: | :---: | :---: |
|name|RegQueryValueExW|RegQueryValueExW|
|fullname|ADVAPI32.DLL::RegQueryValueExW|ADVAPI32.DLL::RegQueryValueExW|
|`refcount`|36|38|
|length|0|0|
|called|||
|`calling`|<details><summary>Expand for full list:<br>DhcpCMSendFailoverMessage<br>DhcpCheckIfSystemUpgraded<br>DhcpFailoverReadRegKeyParams<br>DhcpInitializeDatabaseEx<br>DhcpInitializeIas<br>DhcpRegGetValue<br>DhcpRetrievePrivateDataFromRegistryInternal<br>DhcpV6ReadOrWriteServerDUID<br>LoadBootFileTable<br>MoveBootpTable<br>ProcessQuarantinePacket</summary>PutBranch<br>QRGetGlobalQuarantineDefFailure<br>ReadServerDuidFromRegistry<br>UpgradeNotNeeded</details>|<details><summary>Expand for full list:<br>DhcpCMSendFailoverMessage<br>DhcpCheckIfSystemUpgraded<br>DhcpFailoverReadRegKeyParams<br>DhcpInitializeDatabaseEx<br>DhcpInitializeIas<br>DhcpRegGetValue<br>DhcpRetrievePrivateDataFromRegistryInternal<br>DhcpV6ReadOrWriteServerDUID<br>EvaluateCurrentStateFromRegistry<br>LoadBootFileTable<br>MoveBootpTable</summary>ProcessQuarantinePacket<br>PutBranch<br>QRGetGlobalQuarantineDefFailure<br>ReadServerDuidFromRegistry<br>UpgradeNotNeeded</details>|
|paramcount|6|6|
|`address`|EXTERNAL:0000008c|EXTERNAL:0000008d|
|sig|LSTATUS __stdcall RegQueryValueExW(HKEY hKey, LPCWSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData)|LSTATUS __stdcall RegQueryValueExW(HKEY hKey, LPCWSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|True|True|

### ADVAPI32.DLL::RegQueryValueExW Calling Diff


```diff
--- ADVAPI32.DLL::RegQueryValueExW calling
+++ ADVAPI32.DLL::RegQueryValueExW calling
@@ -8,0 +9 @@
+EvaluateCurrentStateFromRegistry
```


## __GSHandlerCheck

### Match Info



|Key|dhcpssvc-06.dll - dhcpssvc-07.dll|
| :---: | :---: |
|diff_type|refcount,address|
|ratio|1.0|
|i_ratio|0.88|
|m_ratio|1.0|
|b_ratio|1.0|
|match_types|SymbolsHash|

### Function Meta Diff



|Key|dhcpssvc-06.dll|dhcpssvc-07.dll|
| :---: | :---: | :---: |
|name|__GSHandlerCheck|__GSHandlerCheck|
|fullname|__GSHandlerCheck|__GSHandlerCheck|
|`refcount`|249|250|
|length|29|29|
|called|__GSHandlerCheckCommon|__GSHandlerCheckCommon|
|calling|||
|paramcount|4|4|
|`address`|1800c2a14|1800c3674|
|sig|undefined8 __fastcall __GSHandlerCheck(undefined8 param_1, undefined8 param_2, undefined8 param_3, longlong param_4)|undefined8 __fastcall __GSHandlerCheck(undefined8 param_1, undefined8 param_2, undefined8 param_3, longlong param_4)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|False|False|

## ADVAPI32.DLL::RegCloseKey

### Match Info



|Key|dhcpssvc-06.dll - dhcpssvc-07.dll|
| :---: | :---: |
|diff_type|refcount,address,calling|
|ratio|1.0|
|i_ratio|1.0|
|m_ratio|1.0|
|b_ratio|1.0|
|match_types|SymbolsHash,ExternalsName|

### Function Meta Diff



|Key|dhcpssvc-06.dll|dhcpssvc-07.dll|
| :---: | :---: | :---: |
|name|RegCloseKey|RegCloseKey|
|fullname|ADVAPI32.DLL::RegCloseKey|ADVAPI32.DLL::RegCloseKey|
|`refcount`|39|40|
|length|0|0|
|called|||
|`calling`|<details><summary>Expand for full list:<br>AddBindingInfo<br>CalloutInit<br>DhcpCMSendFailoverMessage<br>DhcpCheckIfSystemUpgraded<br>DhcpCleanupRegistry<br>DhcpFailoverReadRegKeyParams<br>DhcpGetFailoverLeaseDuration<br>DhcpInitializeDatabaseEx<br>DhcpInitializeRegistry<br>DhcpRegDeleteKey<br>DhcpRegFillQuickBindInfo</summary>DhcpRegFillQuickBindInfoV6<br>DhcpSetBindingInfo<br>DhcpV6IsIpAddressBound<br>DhcpV6ReadOrWriteServerDUID<br>DhcpV6SetBindingInfo<br>ExportWinNT50RegFileFromPath<br>FiniteStateMachine<br>GetAlternateDnsServerList<br>ImportNewerRegFile<br>IsAlternateDnsServerEnabled<br>IsIpAddressBound<br>MoveBootpTable<br>OpenGlobalRegKeys<br>PutBranch<br>ReadRegistry<br>UpgradeDhcpDatabase<br>UpgradeNotNeeded</details>|<details><summary>Expand for full list:<br>AddBindingInfo<br>CalloutInit<br>DhcpCMSendFailoverMessage<br>DhcpCheckIfSystemUpgraded<br>DhcpCleanupRegistry<br>DhcpFailoverReadRegKeyParams<br>DhcpGetFailoverLeaseDuration<br>DhcpInitializeDatabaseEx<br>DhcpInitializeRegistry<br>DhcpRegDeleteKey<br>DhcpRegFillQuickBindInfo</summary>DhcpRegFillQuickBindInfoV6<br>DhcpSetBindingInfo<br>DhcpV6IsIpAddressBound<br>DhcpV6ReadOrWriteServerDUID<br>DhcpV6SetBindingInfo<br>EvaluateCurrentStateFromRegistry<br>ExportWinNT50RegFileFromPath<br>FiniteStateMachine<br>GetAlternateDnsServerList<br>ImportNewerRegFile<br>IsAlternateDnsServerEnabled<br>IsIpAddressBound<br>MoveBootpTable<br>OpenGlobalRegKeys<br>PutBranch<br>ReadRegistry<br>UpgradeDhcpDatabase<br>UpgradeNotNeeded</details>|
|paramcount|1|1|
|`address`|EXTERNAL:0000008a|EXTERNAL:0000008b|
|sig|LSTATUS __stdcall RegCloseKey(HKEY hKey)|LSTATUS __stdcall RegCloseKey(HKEY hKey)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|True|True|

### ADVAPI32.DLL::RegCloseKey Calling Diff


```diff
--- ADVAPI32.DLL::RegCloseKey calling
+++ ADVAPI32.DLL::RegCloseKey calling
@@ -16,0 +17 @@
+EvaluateCurrentStateFromRegistry
```


## __security_check_cookie

### Match Info



|Key|dhcpssvc-06.dll - dhcpssvc-07.dll|
| :---: | :---: |
|diff_type|refcount,address,calling|
|ratio|1.0|
|i_ratio|0.62|
|m_ratio|1.0|
|b_ratio|1.0|
|match_types|SymbolsHash|

### Function Meta Diff



|Key|dhcpssvc-06.dll|dhcpssvc-07.dll|
| :---: | :---: | :---: |
|name|__security_check_cookie|__security_check_cookie|
|fullname|__security_check_cookie|__security_check_cookie|
|`refcount`|283|284|
|length|30|30|
|called|__report_gsfailure|__report_gsfailure|
|`calling`|<details><summary>Expand for full list:<br>AddBindingInfo<br>AddConditionEntries<br>AddDbEntry<br>AddEntriesRoutine<br>AddExprEntry<br>AddOrUpdateStatelessEntry<br>AddPolicyEntry<br>AddPolicyRangeEntries<br>AddressCacherScavengeLeases<br>AppendMadcapRequestedParameters<br>AuditIPAddressUsage</summary>AuditIPV6AddressUsage<br>CalculateSuperScopeStats<br>CheckKeyForBindability<br>CheckScopeLevelOption<br>CleanupDatabase<br>ConfirmProcessIANA<br>ConvertGuidFromIfNameString<br>ConvertPunycodeToUnicode<br>CountSubnetClientsV6<br>CreateBitmaskTable<br>CreateConditionTableIndices<br>CreateExpressionTableIndices<br>CreatePolicyTableIndices<br>DebugLog<br>DeclineProcessIANA<br>DhcpAddSubnetElement<br>DhcpAppendDnsRelatedOptions6<br>DhcpAppendEnterpriseName<br>DhcpAuditLogInit<br>DhcpBackupDatabase<br>DhcpCMAcceptIncomingConnections<br>DhcpCMMainThread<br>DhcpCMProcessNewConnectionRequests<br>DhcpCMReceiveFailoverMessage<br>DhcpCMSendFailoverMessage<br>DhcpCalculateAndReportPolicyInfo<br>DhcpCalculatePastTime<br>DhcpCalculateTime<br>DhcpCheckPathForRegKey<br>DhcpCleanupDatabase<br>DhcpConcatenateFQDN<br>DhcpConvertAddressToDBFormat<br>DhcpConvertSystemTime<br>DhcpCountStatelessRecordsPerSubnet<br>DhcpCreateAllStandardOptions<br>DhcpCreateAndInitDatabase<br>DhcpCreateClientV6EntryEx<br>DhcpCreateFailoverBitmaskConfiguration<br>DhcpCreateFilterIndexes<br>DhcpCreateFilterTable<br>DhcpCreateMScope<br>DhcpCreateSecurityObjects<br>DhcpCreateV6LeaseTable<br>DhcpDALCreateDbTable<br>DhcpDALOpenDbTable<br>DhcpDeleteClientInfo6Entry<br>DhcpDeleteFailoverBitmaskConfiguration<br>DhcpDeleteFiles<br>DhcpDeleteSomeFailoverBitmaskRecords<br>DhcpDeleteSubnetClientsV6<br>DhcpDetermineHostName<br>DhcpDetermineHostName6<br>DhcpDnsCallBack<br>DhcpDoDynDnsCheckDelete<br>DhcpEnumFilterV4<br>DhcpFSMModuleCleanup<br>DhcpFSMProcessFailoverMessage<br>DhcpFailoverUpdateBitmaskDatabase<br>DhcpFindOldAddress<br>DhcpGetAddressRecord<br>DhcpGetBootpInfo<br>DhcpGetCurrentClientInfoV6<br>DhcpGetCurrentLeaseEntry<br>DhcpGetDateTime<br>DhcpGetNextFreeAddressEx<br>DhcpGetWireFormatNameFromUnicode<br>DhcpHandleFailoverRequest<br>DhcpInitJetV6<br>DhcpInitV6AttachToDBFile<br>DhcpInitV6LeaseTable<br>DhcpInitializeDatabaseEx<br>DhcpJetCreatePlainConfigTable6<br>DhcpJetInitConfigTable6<br>DhcpJetPrepareSearchScopeIDV6<br>DhcpOpenConditionTable<br>DhcpOpenConfigTable<br>DhcpOpenDebugFile<br>DhcpOpenExpressionTable<br>DhcpOpenFilterDbTable<br>DhcpOpenInterfaceByName<br>DhcpOpenInterfaceByNameV6<br>DhcpOpenMCastDbTable<br>DhcpOpenPolicyRangeTable<br>DhcpOpenPolicyTable<br>DhcpPolicyWildCardLenListInit<br>DhcpPurgeStatelessRecords<br>DhcpReadFailoverBitmaskConfiguration<br>DhcpRegDeleteKey<br>DhcpRegFillQuickBindInfo<br>DhcpRegFillQuickBindInfoV6<br>DhcpRemoveClientEntry<br>DhcpRespondToDiscover<br>DhcpRestoreConfiguration<br>DhcpRestoreDatabase<br>DhcpServerEventLog<br>DhcpServerEventLogPort<br>DhcpServerEventLogREC<br>DhcpSetAuthStatus<br>DhcpSetBindingInfo<br>DhcpSetJetParameters<br>DhcpSetSecretUnamePasswd<br>DhcpSubnetGetPolicyMibCount<br>DhcpTelemetryReportInfo<br>DhcpTelemetryReportPolicyUsage<br>DhcpUALStart<br>DhcpUALStop<br>DhcpUpdateAuditLogBlindQuar<br>DhcpUpgradeAddDbEntry<br>DhcpV4UALLogEvent<br>DhcpV6AddBindingInfo<br>DhcpV6AuditLogInit<br>DhcpV6InitializeSocket<br>DhcpV6IsAddressStatic<br>DhcpV6IsIpAddressBound<br>DhcpV6ProcessConfirmMessage<br>DhcpV6ProcessDeclineMessage<br>DhcpV6ProcessRebindMessage<br>DhcpV6ProcessReleaseMessage<br>DhcpV6ProcessRenewMessage<br>DhcpV6ProcessRequestMessage<br>DhcpV6ProcessSolicitMessage<br>DhcpV6ReservationEntryToLeaseTable<br>DhcpV6SearchForEntry<br>DhcpV6ServerEventLog<br>DhcpV6ServerEventLogIPV6Addr<br>DhcpV6SetBindingInfo<br>DhcpV6UALLogEvent<br>DhcpV6UpdateAuditLogBlind<br>DhcpV6WaitForMessage<br>DhcpValidateDnsServers<br>DhcpWaitForMessage<br>Dhcpv6DnsCallBack<br>Dhcpv6DoDynDnsCheckDelete<br>Dhcpv6DoDynDnsCreateEntryWork<br>Dhcpv6DoDynDnsRefresh<br>Dhcpv6FlipRegisteredBit<br>Dhcpv6LeaseAddress<br>Dhcpv6RealDeleteClient<br>Dns_GetBufferLengthForStringCopy<br>Dns_StringCopy<br>Dns_StringCopyAllocate<br>Dns_Utf8ToOrFromAnsi<br>DumpLeaseTableEntry<br>DumpLeaseV6Entries<br>DumpOpt<br>DumpOptDefn<br>DynamicDnsInit<br>ExportWinNT50RegFileFromPath<br>FilterAllowed<br>FiniteStateMachine<br>FixBadEntries<br>FormatDhcpAck<br>FormatExclusionRange<br>FormatExclusionRangeV6<br>FormatIPV6andName<br>FormatIPandName<br>FormatPolicyConditions<br>GetAlternateDnsServerList<br>GetContainerExprIds<br>GetCurrentExpressionRecord<br>GetCurrentPolicyRecord<br>GetDnsServerList<br>GetFriendlyNameGUIDFromEntry<br>GetLangTag<br>GetOptionValuesInternal6<br>GetReadableSocket<br>GetReadableSocketV6<br>GetUserAndDomainName<br>GetWSARecvFunc<br>GetWSARecvFuncPtr<br>HandleRogueStart<br>HasDayChanged<br>Initialize<br>InitializeSocket<br>InsertAndCheck<br>Ipv6UnicastAddressScope<br>IsAddressFree<br>IsFileTooBigOrDiskFull<br>IsIpAddressBound<br>IsRunningOnDc<br>IsThisTheComputerName<br>MadcapGetMScopeListOption<br>MemAddr6ConvertIPv6StringToByte<br>MemAddr6ConvertIpv6AddrToString<br>MemMScopeInit<br>OpenBitmaskCleanFlagTable<br>OpenExisting<br>OpenTextFile<br>ParseHeader<br>PassAttrToIAS<br>PerformAccessCheckAgainstFileObject<br>PlumbQuarantineDecisionFromIASResponse<br>ProcessBootpRequest<br>ProcessDhcpDecline<br>ProcessDhcpDiscover<br>ProcessMadcapDiscoverAndRequest<br>ProcessMadcapInform<br>ProcessMadcapMessage<br>ProcessMadcapRelease<br>ProcessMadcapRenew<br>PutBranch<br>QuickBoundV6<br>R_DhcpAddSubnetElementV6<br>R_DhcpCreateSubnetV6<br>R_DhcpDeleteClientInfoV6<br>R_DhcpEnumMScopeClients<br>R_DhcpEnumSubnetClientsFilterStatusInfo<br>R_DhcpEnumSubnetClientsV4<br>R_DhcpEnumSubnetClientsV5<br>R_DhcpEnumSubnetClientsV6<br>R_DhcpEnumSubnetClientsVQ<br>R_DhcpGetClientInfoV6<br>R_DhcpGetVersion<br>R_DhcpQueryDnsRegCredentials<br>R_DhcpRemoveSubnetElementV6<br>R_DhcpSetClientInfoV4<br>R_DhcpSetClientInfoVQ<br>R_DhcpSetSubnetDelayOffer<br>R_DhcpV4EnumSubnetClients<br>R_DhcpV4EnumSubnetClientsEx<br>R_DhcpV6CreateClientInfo<br>R_DhcpV6GetFreeIPAddress<br>ReadBitmasksFromDb<br>ReadDbEntry<br>ReadString<br>RebindProcessIANA<br>ReleaseProcessIANA<br>RemoveExprIdFromContainerList<br>RenewProcessIANA<br>RequestProcessIANA<br>RogueEventLog<br>RogueEventLog6<br>RogueReceiveAck<br>RogueReceiveAckV6<br>RogueSendDhcpInform<br>ScanBootFileTable<br>Scavenger<br>SearchStatefulEntries<br>ServiceEntry<br>SetDefaultConfigInfo<br>SetDefaultConfigInfoV6<br>SetFilterTableRecord<br>SolicitCheckIAAddr<br>SolicitProcessIANA<br>Template_q<br>Template_qqz<br>Template_qqzz<br>Template_qqzzz<br>Template_qz<br>Template_qzz<br>Template_qzzz<br>Template_qzzzz<br>Template_z<br>Template_zq<br>Template_zqb<br>Template_zqz<br>Template_zz<br>Template_zzq<br>Template_zzqq<br>Template_zzqz<br>Template_zzz<br>Template_zzzq<br>Template_zzzqqq<br>Template_zzzqqqz<br>Template_zzzz<br>TestDhcpInitV6AttachToDBFile<br>TestLeaseTable<br>UpdateTable<br>UtilValidateIpv6Address<br>WriteDBEntry6<br>__GSHandlerCheckCommon</details>|<details><summary>Expand for full list:<br>AddBindingInfo<br>AddConditionEntries<br>AddDbEntry<br>AddEntriesRoutine<br>AddExprEntry<br>AddOrUpdateStatelessEntry<br>AddPolicyEntry<br>AddPolicyRangeEntries<br>AddressCacherScavengeLeases<br>AppendMadcapRequestedParameters<br>AuditIPAddressUsage</summary>AuditIPV6AddressUsage<br>CalculateSuperScopeStats<br>CheckKeyForBindability<br>CheckScopeLevelOption<br>CleanupDatabase<br>ConfirmProcessIANA<br>ConvertGuidFromIfNameString<br>ConvertPunycodeToUnicode<br>CountSubnetClientsV6<br>CreateBitmaskTable<br>CreateConditionTableIndices<br>CreateExpressionTableIndices<br>CreatePolicyTableIndices<br>DebugLog<br>DeclineProcessIANA<br>DhcpAddSubnetElement<br>DhcpAppendDnsRelatedOptions6<br>DhcpAppendEnterpriseName<br>DhcpAuditLogInit<br>DhcpBackupDatabase<br>DhcpCMAcceptIncomingConnections<br>DhcpCMMainThread<br>DhcpCMProcessNewConnectionRequests<br>DhcpCMReceiveFailoverMessage<br>DhcpCMSendFailoverMessage<br>DhcpCalculateAndReportPolicyInfo<br>DhcpCalculatePastTime<br>DhcpCalculateTime<br>DhcpCheckPathForRegKey<br>DhcpCleanupDatabase<br>DhcpConcatenateFQDN<br>DhcpConvertAddressToDBFormat<br>DhcpConvertSystemTime<br>DhcpCountStatelessRecordsPerSubnet<br>DhcpCreateAllStandardOptions<br>DhcpCreateAndInitDatabase<br>DhcpCreateClientV6EntryEx<br>DhcpCreateFailoverBitmaskConfiguration<br>DhcpCreateFilterIndexes<br>DhcpCreateFilterTable<br>DhcpCreateMScope<br>DhcpCreateSecurityObjects<br>DhcpCreateV6LeaseTable<br>DhcpDALCreateDbTable<br>DhcpDALOpenDbTable<br>DhcpDeleteClientInfo6Entry<br>DhcpDeleteFailoverBitmaskConfiguration<br>DhcpDeleteFiles<br>DhcpDeleteSomeFailoverBitmaskRecords<br>DhcpDeleteSubnetClientsV6<br>DhcpDetermineHostName<br>DhcpDetermineHostName6<br>DhcpDnsCallBack<br>DhcpDoDynDnsCheckDelete<br>DhcpEnumFilterV4<br>DhcpFSMModuleCleanup<br>DhcpFSMProcessFailoverMessage<br>DhcpFailoverUpdateBitmaskDatabase<br>DhcpFindOldAddress<br>DhcpGetAddressRecord<br>DhcpGetBootpInfo<br>DhcpGetCurrentClientInfoV6<br>DhcpGetCurrentLeaseEntry<br>DhcpGetDateTime<br>DhcpGetNextFreeAddressEx<br>DhcpGetWireFormatNameFromUnicode<br>DhcpHandleFailoverRequest<br>DhcpInitJetV6<br>DhcpInitV6AttachToDBFile<br>DhcpInitV6LeaseTable<br>DhcpInitializeDatabaseEx<br>DhcpJetCreatePlainConfigTable6<br>DhcpJetInitConfigTable6<br>DhcpJetPrepareSearchScopeIDV6<br>DhcpOpenConditionTable<br>DhcpOpenConfigTable<br>DhcpOpenDebugFile<br>DhcpOpenExpressionTable<br>DhcpOpenFilterDbTable<br>DhcpOpenInterfaceByName<br>DhcpOpenInterfaceByNameV6<br>DhcpOpenMCastDbTable<br>DhcpOpenPolicyRangeTable<br>DhcpOpenPolicyTable<br>DhcpPolicyWildCardLenListInit<br>DhcpPurgeStatelessRecords<br>DhcpReadFailoverBitmaskConfiguration<br>DhcpRegDeleteKey<br>DhcpRegFillQuickBindInfo<br>DhcpRegFillQuickBindInfoV6<br>DhcpRemoveClientEntry<br>DhcpRespondToDiscover<br>DhcpRestoreConfiguration<br>DhcpRestoreDatabase<br>DhcpServerEventLog<br>DhcpServerEventLogPort<br>DhcpServerEventLogREC<br>DhcpSetAuthStatus<br>DhcpSetBindingInfo<br>DhcpSetJetParameters<br>DhcpSetSecretUnamePasswd<br>DhcpSubnetGetPolicyMibCount<br>DhcpTelemetryReportInfo<br>DhcpTelemetryReportPolicyUsage<br>DhcpUALStart<br>DhcpUALStop<br>DhcpUpdateAuditLogBlindQuar<br>DhcpUpgradeAddDbEntry<br>DhcpV4UALLogEvent<br>DhcpV6AddBindingInfo<br>DhcpV6AuditLogInit<br>DhcpV6InitializeSocket<br>DhcpV6IsAddressStatic<br>DhcpV6IsIpAddressBound<br>DhcpV6ProcessConfirmMessage<br>DhcpV6ProcessDeclineMessage<br>DhcpV6ProcessRebindMessage<br>DhcpV6ProcessReleaseMessage<br>DhcpV6ProcessRenewMessage<br>DhcpV6ProcessRequestMessage<br>DhcpV6ProcessSolicitMessage<br>DhcpV6ReservationEntryToLeaseTable<br>DhcpV6SearchForEntry<br>DhcpV6ServerEventLog<br>DhcpV6ServerEventLogIPV6Addr<br>DhcpV6SetBindingInfo<br>DhcpV6UALLogEvent<br>DhcpV6UpdateAuditLogBlind<br>DhcpV6WaitForMessage<br>DhcpValidateDnsServers<br>DhcpWaitForMessage<br>Dhcpv6DnsCallBack<br>Dhcpv6DoDynDnsCheckDelete<br>Dhcpv6DoDynDnsCreateEntryWork<br>Dhcpv6DoDynDnsRefresh<br>Dhcpv6FlipRegisteredBit<br>Dhcpv6LeaseAddress<br>Dhcpv6RealDeleteClient<br>Dns_GetBufferLengthForStringCopy<br>Dns_StringCopy<br>Dns_StringCopyAllocate<br>Dns_Utf8ToOrFromAnsi<br>DumpLeaseTableEntry<br>DumpLeaseV6Entries<br>DumpOpt<br>DumpOptDefn<br>DynamicDnsInit<br>EvaluateCurrentStateFromRegistry<br>ExportWinNT50RegFileFromPath<br>FilterAllowed<br>FiniteStateMachine<br>FixBadEntries<br>FormatDhcpAck<br>FormatExclusionRange<br>FormatExclusionRangeV6<br>FormatIPV6andName<br>FormatIPandName<br>FormatPolicyConditions<br>GetAlternateDnsServerList<br>GetContainerExprIds<br>GetCurrentExpressionRecord<br>GetCurrentPolicyRecord<br>GetDnsServerList<br>GetFriendlyNameGUIDFromEntry<br>GetLangTag<br>GetOptionValuesInternal6<br>GetReadableSocket<br>GetReadableSocketV6<br>GetUserAndDomainName<br>GetWSARecvFunc<br>GetWSARecvFuncPtr<br>HandleRogueStart<br>HasDayChanged<br>Initialize<br>InitializeSocket<br>InsertAndCheck<br>Ipv6UnicastAddressScope<br>IsAddressFree<br>IsFileTooBigOrDiskFull<br>IsIpAddressBound<br>IsRunningOnDc<br>IsThisTheComputerName<br>MadcapGetMScopeListOption<br>MemAddr6ConvertIPv6StringToByte<br>MemAddr6ConvertIpv6AddrToString<br>MemMScopeInit<br>OpenBitmaskCleanFlagTable<br>OpenExisting<br>OpenTextFile<br>ParseHeader<br>PassAttrToIAS<br>PerformAccessCheckAgainstFileObject<br>PlumbQuarantineDecisionFromIASResponse<br>ProcessBootpRequest<br>ProcessDhcpDecline<br>ProcessDhcpDiscover<br>ProcessMadcapDiscoverAndRequest<br>ProcessMadcapInform<br>ProcessMadcapMessage<br>ProcessMadcapRelease<br>ProcessMadcapRenew<br>PutBranch<br>QuickBoundV6<br>R_DhcpAddSubnetElementV6<br>R_DhcpCreateSubnetV6<br>R_DhcpDeleteClientInfoV6<br>R_DhcpEnumMScopeClients<br>R_DhcpEnumSubnetClientsFilterStatusInfo<br>R_DhcpEnumSubnetClientsV4<br>R_DhcpEnumSubnetClientsV5<br>R_DhcpEnumSubnetClientsV6<br>R_DhcpEnumSubnetClientsVQ<br>R_DhcpGetClientInfoV6<br>R_DhcpGetVersion<br>R_DhcpQueryDnsRegCredentials<br>R_DhcpRemoveSubnetElementV6<br>R_DhcpSetClientInfoV4<br>R_DhcpSetClientInfoVQ<br>R_DhcpSetSubnetDelayOffer<br>R_DhcpV4EnumSubnetClients<br>R_DhcpV4EnumSubnetClientsEx<br>R_DhcpV6CreateClientInfo<br>R_DhcpV6GetFreeIPAddress<br>ReadBitmasksFromDb<br>ReadDbEntry<br>ReadString<br>RebindProcessIANA<br>ReleaseProcessIANA<br>RemoveExprIdFromContainerList<br>RenewProcessIANA<br>RequestProcessIANA<br>RogueEventLog<br>RogueEventLog6<br>RogueReceiveAck<br>RogueReceiveAckV6<br>RogueSendDhcpInform<br>ScanBootFileTable<br>Scavenger<br>SearchStatefulEntries<br>ServiceEntry<br>SetDefaultConfigInfo<br>SetDefaultConfigInfoV6<br>SetFilterTableRecord<br>SolicitCheckIAAddr<br>SolicitProcessIANA<br>Template_q<br>Template_qqz<br>Template_qqzz<br>Template_qqzzz<br>Template_qz<br>Template_qzz<br>Template_qzzz<br>Template_qzzzz<br>Template_z<br>Template_zq<br>Template_zqb<br>Template_zqz<br>Template_zz<br>Template_zzq<br>Template_zzqq<br>Template_zzqz<br>Template_zzz<br>Template_zzzq<br>Template_zzzqqq<br>Template_zzzqqqz<br>Template_zzzz<br>TestDhcpInitV6AttachToDBFile<br>TestLeaseTable<br>UpdateTable<br>UtilValidateIpv6Address<br>WriteDBEntry6<br>__GSHandlerCheckCommon</details>|
|paramcount|1|1|
|`address`|1800c1fe0|1800c2c40|
|sig|void __cdecl __security_check_cookie(uintptr_t _StackCookie)|void __cdecl __security_check_cookie(uintptr_t _StackCookie)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|False|False|

### __security_check_cookie Calling Diff


```diff
--- __security_check_cookie calling
+++ __security_check_cookie calling
@@ -158,0 +159 @@
+EvaluateCurrentStateFromRegistry
```


## DhcpGetWireFormatNameFromUnicode

### Match Info



|Key|dhcpssvc-06.dll - dhcpssvc-07.dll|
| :---: | :---: |
|diff_type|refcount,address|
|ratio|1.0|
|i_ratio|0.8|
|m_ratio|1.0|
|b_ratio|1.0|
|match_types|SymbolsHash|

### Function Meta Diff



|Key|dhcpssvc-06.dll|dhcpssvc-07.dll|
| :---: | :---: | :---: |
|name|DhcpGetWireFormatNameFromUnicode|DhcpGetWireFormatNameFromUnicode|
|fullname|DhcpGetWireFormatNameFromUnicode|DhcpGetWireFormatNameFromUnicode|
|`refcount`|4|5|
|length|284|284|
|called|Dns_StringCopy<br>__security_check_cookie|Dns_StringCopy<br>__security_check_cookie|
|calling|DhcpAppendDnsRelatedOptions6<br>DhcpConcatenateFQDN<br>DhcpParseOptionV6|DhcpAppendDnsRelatedOptions6<br>DhcpConcatenateFQDN<br>DhcpParseOptionV6|
|paramcount|4|4|
|`address`|18009292c|1800932fc|
|sig|byte * __fastcall DhcpGetWireFormatNameFromUnicode(byte * param_1, byte * param_2, char * param_3, uint * param_4)|byte * __fastcall DhcpGetWireFormatNameFromUnicode(byte * param_1, byte * param_2, char * param_3, uint * param_4)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|False|False|

## ADVAPI32.DLL::RegOpenKeyExW

### Match Info



|Key|dhcpssvc-06.dll - dhcpssvc-07.dll|
| :---: | :---: |
|diff_type|refcount,address,calling|
|ratio|1.0|
|i_ratio|1.0|
|m_ratio|1.0|
|b_ratio|1.0|
|match_types|SymbolsHash,ExternalsName|

### Function Meta Diff



|Key|dhcpssvc-06.dll|dhcpssvc-07.dll|
| :---: | :---: | :---: |
|name|RegOpenKeyExW|RegOpenKeyExW|
|fullname|ADVAPI32.DLL::RegOpenKeyExW|ADVAPI32.DLL::RegOpenKeyExW|
|`refcount`|21|22|
|length|0|0|
|called|||
|`calling`|<details><summary>Expand for full list:<br>CalloutInit<br>DhcpCMSendFailoverMessage<br>DhcpCheckIfSystemUpgraded<br>DhcpFailoverReadRegKeyParams<br>DhcpGetFailoverLeaseDuration<br>DhcpInitializeDatabaseEx<br>DhcpOpenInterfaceByName<br>DhcpOpenInterfaceByNameV6<br>DhcpRegDeleteKey<br>DhcpRegFillQuickBindInfo<br>DhcpRegFillQuickBindInfoV6</summary>DhcpV6ReadOrWriteServerDUID<br>EditRegistryKey<br>GetAlternateDnsServerList<br>IsAlternateDnsServerEnabled<br>OpenGlobalRegKeys<br>PutBranch<br>ReadRegistry<br>UpgradeDhcpDatabase<br>UpgradeNotNeeded</details>|<details><summary>Expand for full list:<br>CalloutInit<br>DhcpCMSendFailoverMessage<br>DhcpCheckIfSystemUpgraded<br>DhcpFailoverReadRegKeyParams<br>DhcpGetFailoverLeaseDuration<br>DhcpInitializeDatabaseEx<br>DhcpOpenInterfaceByName<br>DhcpOpenInterfaceByNameV6<br>DhcpRegDeleteKey<br>DhcpRegFillQuickBindInfo<br>DhcpRegFillQuickBindInfoV6</summary>DhcpV6ReadOrWriteServerDUID<br>EditRegistryKey<br>EvaluateCurrentStateFromRegistry<br>GetAlternateDnsServerList<br>IsAlternateDnsServerEnabled<br>OpenGlobalRegKeys<br>PutBranch<br>ReadRegistry<br>UpgradeDhcpDatabase<br>UpgradeNotNeeded</details>|
|paramcount|5|5|
|`address`|EXTERNAL:0000008b|EXTERNAL:0000008c|
|sig|LSTATUS __stdcall RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)|LSTATUS __stdcall RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|True|True|

### ADVAPI32.DLL::RegOpenKeyExW Calling Diff


```diff
--- ADVAPI32.DLL::RegOpenKeyExW calling
+++ ADVAPI32.DLL::RegOpenKeyExW calling
@@ -13,0 +14 @@
+EvaluateCurrentStateFromRegistry
```


## KERNEL32.DLL::ReleaseSRWLockShared

### Match Info



|Key|dhcpssvc-06.dll - dhcpssvc-07.dll|
| :---: | :---: |
|diff_type|refcount,address|
|ratio|1.0|
|i_ratio|1.0|
|m_ratio|1.0|
|b_ratio|1.0|
|match_types|SymbolsHash,ExternalsName|

### Function Meta Diff



|Key|dhcpssvc-06.dll|dhcpssvc-07.dll|
| :---: | :---: | :---: |
|name|ReleaseSRWLockShared|ReleaseSRWLockShared|
|fullname|KERNEL32.DLL::ReleaseSRWLockShared|KERNEL32.DLL::ReleaseSRWLockShared|
|`refcount`|78|79|
|length|0|0|
|called|||
|calling|<details><summary>Expand for full list:<br>DhcpAuthenticateMessage<br>DhcpBNDAddNewFoReqs<br>DhcpBNDProcessDeletedAddresses<br>DhcpBNDProcessIncomingBndAcks<br>DhcpBNDProcessIncomingBndUpdates<br>DhcpBNDProcessUpdReqORUpdReqAll<br>DhcpBNDReceiveThread<br>DhcpBNDSendCorePacketsThread<br>DhcpBNDSendThread<br>DhcpBNDVerifyScopeInRelationsip<br>DhcpCMCloseConnection</summary>DhcpCMCloseConnectionOnError<br>DhcpCMMainThread<br>DhcpCMProcessNewConnectionRequests<br>DhcpCMReceiveFailoverMessage<br>DhcpCMSendFailoverMessage<br>DhcpFSMEnumRelationship<br>DhcpFSMGetElement<br>DhcpFSMGetEndpointParameter<br>DhcpFSMGetScopeRelationship<br>DhcpFSMHandleError<br>DhcpFSMProcessFailoverMessage<br>DhcpFSMSendConnect<br>DhcpFSMSendConnectAck<br>DhcpFSMSendSimpleMessage<br>DhcpFSMSendState<br>DhcpFSMSendUpdReqForScopes<br>DhcpHandleFailoverRequest<br>DhcpTelemetryReportInfo<br>FSMGetElement<br>FSMScopeInFailoverRelation<br>FiniteStateMachine<br>GetEndPointSharedSecretProperties<br>R_DhcpDeleteSubnet<br>R_DhcpV4FailoverEnumRelationship<br>R_DhcpV4FailoverGetRelationship<br>R_DhcpV4FailoverGetScopeRelationship<br>R_DhcpV4FailoverGetScopeStatistics</details>|<details><summary>Expand for full list:<br>DhcpAuthenticateMessage<br>DhcpBNDAddNewFoReqs<br>DhcpBNDProcessDeletedAddresses<br>DhcpBNDProcessIncomingBndAcks<br>DhcpBNDProcessIncomingBndUpdates<br>DhcpBNDProcessUpdReqORUpdReqAll<br>DhcpBNDReceiveThread<br>DhcpBNDSendCorePacketsThread<br>DhcpBNDSendThread<br>DhcpBNDVerifyScopeInRelationsip<br>DhcpCMCloseConnection</summary>DhcpCMCloseConnectionOnError<br>DhcpCMMainThread<br>DhcpCMProcessNewConnectionRequests<br>DhcpCMReceiveFailoverMessage<br>DhcpCMSendFailoverMessage<br>DhcpFSMEnumRelationship<br>DhcpFSMGetElement<br>DhcpFSMGetEndpointParameter<br>DhcpFSMGetScopeRelationship<br>DhcpFSMHandleError<br>DhcpFSMProcessFailoverMessage<br>DhcpFSMSendConnect<br>DhcpFSMSendConnectAck<br>DhcpFSMSendSimpleMessage<br>DhcpFSMSendState<br>DhcpFSMSendUpdReqForScopes<br>DhcpHandleFailoverRequest<br>DhcpTelemetryReportInfo<br>FSMGetElement<br>FSMScopeInFailoverRelation<br>FiniteStateMachine<br>GetEndPointSharedSecretProperties<br>R_DhcpDeleteSubnet<br>R_DhcpV4FailoverEnumRelationship<br>R_DhcpV4FailoverGetRelationship<br>R_DhcpV4FailoverGetScopeRelationship<br>R_DhcpV4FailoverGetScopeStatistics</details>|
|paramcount|1|1|
|`address`|EXTERNAL:00000173|EXTERNAL:00000174|
|sig|void __stdcall ReleaseSRWLockShared(PSRWLOCK SRWLock)|void __stdcall ReleaseSRWLockShared(PSRWLOCK SRWLock)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|True|True|

## WPP_SF_

### Match Info



|Key|dhcpssvc-06.dll - dhcpssvc-07.dll|
| :---: | :---: |
|diff_type|refcount|
|ratio|1.0|
|i_ratio|0.86|
|m_ratio|1.0|
|b_ratio|1.0|
|match_types|SymbolsHash|

### Function Meta Diff



|Key|dhcpssvc-06.dll|dhcpssvc-07.dll|
| :---: | :---: | :---: |
|name|WPP_SF_|WPP_SF_|
|fullname|WPP_SF_|WPP_SF_|
|`refcount`|576|577|
|length|30|30|
|called|ADVAPI32.DLL::TraceMessage|ADVAPI32.DLL::TraceMessage|
|calling|<details><summary>Expand for full list:<br>AddDataToPolicyEntry<br>AddSScopeToList<br>AddSocketToGArray<br>AddressCacherTimer<br>ApcRoutine<br>AppendFixUpServerInClasslessRoutesForQuarantine<br>AppendMadcapAddressList<br>AppendSOHVendorSpecific<br>AssembleQuarantineUserClass<br>AuditLogStart<br>AuditLogStop</summary>CalculateSuperScopeStats<br>CalloutInit<br>ChangeMScopeIdInDb<br>CleanupDatabase<br>CleanupIpDatabase<br>CleanupMCastDatabase<br>CleanupQData<br>ComputeDistinctPrefixLengths<br>ConfirmProcessIANA<br>ConvertAnsiToUtf8<br>ConvertBytesIntoHexString<br>ConvertUtf8ToAnsi<br>CvtWstrToStringr<br>DeleteDBEntry6<br>DeleteRecord<br>DhcpAAReAllocateAddresses<br>DhcpBNDCleanUpCoreQueue<br>DhcpBNDGetPendingDeleteAddresses<br>DhcpBNDProcessDeletedAddresses<br>DhcpBNDProcessIncomingBndAcks<br>DhcpBNDProcessIncomingBndUpdates<br>DhcpBNDProcessOutStandingUpdateFromDB<br>DhcpBNDProcessUpdReqORUpdReqAll<br>DhcpBNDReceiveThread<br>DhcpBNDSendCorePacketsThread<br>DhcpBNDSendThread<br>DhcpBackupDatabase<br>DhcpCMAddNewConnectionRequests<br>DhcpCMProcessNewConnectionRequests<br>DhcpCMReceiveFailoverMessage<br>DhcpCMSendConnectAckRejected<br>DhcpCalculateBase64Dhcid<br>DhcpCalculateHash<br>DhcpCheckIfSystemUpgraded<br>DhcpCleanupClientToServer<br>DhcpConcatenateFQDN<br>DhcpConvertOptionRegToRPCFormat<br>DhcpCreateAndInitDatabase<br>DhcpCreateClientV6EntryEx<br>DhcpCreateFilterIndexes<br>DhcpCreateFilterTable<br>DhcpCreateV6LeaseTable<br>DhcpDALMapJetError<br>DhcpDeinitializeEndpoint<br>DhcpDeleteMScopeClients<br>DhcpDeleteSubnet<br>DhcpDeleteSubnetClients<br>DhcpDeleteSubnetClientsV6<br>DhcpDetermineRequestedAddressInfo<br>DhcpDiscoverValidateRequestedAddress<br>DhcpDnsAsyncAdd<br>DhcpDnsAsyncDelete<br>DhcpDnsCallBack<br>DhcpDnsDecideOptionsForClient<br>DhcpDnsHandleCallbacks<br>DhcpDoDynDnsCheckDelete<br>DhcpDoDynDnsCreateEntryWork<br>DhcpDumpMessage<br>DhcpFSMProcessChangedState<br>DhcpFSMProcessFailoverMessage<br>DhcpFSMSendConnect<br>DhcpFSMSendConnectAck<br>DhcpFSMSendSimpleMessage<br>DhcpFSMSendState<br>DhcpFSMSendUpdReqForScopes<br>DhcpFailoverSubnetAddressAllocation<br>DhcpFlipRegisteredBit<br>DhcpFormDhcidRR<br>DhcpGetDhcidRR<br>DhcpGetFailoverLeaseDuration<br>DhcpInitV6AttachToDBFile<br>DhcpInitV6LeaseTable<br>DhcpInitializeCom<br>DhcpInitializeDatabaseEx<br>DhcpInitializeEndpoint<br>DhcpInitializeIas<br>DhcpJetCreatePlainConfigTable6<br>DhcpJetInitConfigTable6<br>DhcpJetLoadConfig6<br>DhcpJetPrepareSearchbyScopeforV6<br>DhcpMapJetError<br>DhcpOpenConfigTable<br>DhcpOpenDebugFile<br>DhcpOpenFilterDbTable<br>DhcpOpenMCastDbTable<br>DhcpParseOptionV6<br>DhcpParseRegistryOption<br>DhcpProcessDiscoverForValidatedAddress<br>DhcpRealDeleteClient<br>DhcpReconcilePrimSecBitMask<br>DhcpRegFillQuickBindInfo<br>DhcpRegFillQuickBindInfoV6<br>DhcpRetractOffer<br>DhcpRetrievePrivateDataInternal<br>DhcpScopeFailState<br>DhcpSetJetParameters<br>DhcpSetScopeStateToCommDown<br>DhcpTerminateJet<br>DhcpUpdateAuditLogBlindQuar<br>DhcpV4GetClientInfoExInternal<br>DhcpV6AddBindingInfo<br>DhcpV6AuditLogStart<br>DhcpV6AuditLogStop<br>DhcpV6CleanupClientToServer<br>DhcpV6CleanupQData<br>DhcpV6DeinitializeEndpoint<br>DhcpV6EndPointChangeHandler<br>DhcpV6ExtractOptions<br>DhcpV6Initialize<br>DhcpV6InitializeClientToServer<br>DhcpV6InitializeEndpoint<br>DhcpV6MessageLoop<br>DhcpV6ProcessConfirmMessage<br>DhcpV6ProcessDeclineMessage<br>DhcpV6ProcessMessage<br>DhcpV6ProcessPacket<br>DhcpV6ProcessRebindMessage<br>DhcpV6ProcessReceivedPacket<br>DhcpV6ProcessReleaseMessage<br>DhcpV6ProcessRenewMessage<br>DhcpV6ProcessRequestMessage<br>DhcpV6ProcessSolicitMessage<br>DhcpV6ReadOrWriteServerDUID<br>DhcpV6SendMessage<br>DhcpV6SetBindingInfo<br>DhcpV6UpdateAuditLogBlind<br>DhcpV6WaitForMessage<br>DhcpV6WaitForMessageThreadToQuit<br>DhcpWaitForMessage<br>DhcpWriterInit<br>Dhcpv6DnsAsyncAdd<br>Dhcpv6DnsAsyncDelete<br>Dhcpv6DnsCallBack<br>Dhcpv6DnsHandleCallbacks<br>Dhcpv6DoDynDnsCheckDelete<br>Dhcpv6DoDynDnsCreateEntryWork<br>Dhcpv6FlipRegisteredBit<br>Dhcpv6RealDeleteClient<br>Dns_GetBufferLengthForStringCopy<br>Dns_StringCopy<br>Dns_StringCopyAllocate<br>DoIcmpRequestEx<br>EndPointChangeHandler<br>FailoverDbSetConfiguration<br>FailoverDbSetConfigurationColumns<br>FillIasOctetString<br>FilterMapJetError<br>FindClientInfo<br>FindClientInfoFromRelayForwardMessage<br>FiniteStateMachine<br>GetCurrentExpressionRecord<br>GetOctedtStringValueFromIasAttrib<br>HandleIcmpResult<br>HandlePingCallback<br>HandleRogueProcessResponse<br>HandleRogueProcessResponseV6<br>HandleRogueSendPacket<br>HandleRogueSendPacketV6<br>HandleRogueStart<br>HandleRogueWaitForResponse<br>HandleRogueWaitForResponseV6<br>IasFailureDefaultProcess<br>Initialize<br>IsFileTooBigOrDiskFull<br>IsStatelessEntry<br>LoopOnIcmpRequests<br>MadcapDumpMessage<br>MadcapRetractOffer<br>MessageLoop<br>NotifyProcessingLoop<br>ParseDhcpV6Options<br>PassAttrToIAS<br>PerformRestore<br>PlumbQuarantineDecisionFromIASResponse<br>PolicyMapJetError<br>ProcessBootpRequest<br>ProcessClientMessage<br>ProcessDhcpDecline<br>ProcessDhcpDiscover<br>ProcessDhcpInform<br>ProcessDhcpRelease<br>ProcessDhcpRequest<br>ProcessInfoRequestMessage<br>ProcessMadcapDiscoverAndRequest<br>ProcessMadcapInform<br>ProcessMadcapMessage<br>ProcessMadcapRelease<br>ProcessMadcapRenew<br>ProcessMessage<br>ProcessPacket<br>ProcessQuarantinePacket<br>ProcessRelayForwardMessage<br>ProcessingLoop<br>QuarPacketLoop<br>QuarantineDecisionCallback<br>R_DhcpAuditLogGetParams<br>R_DhcpAuditLogSetParams<br>R_DhcpBackupDatabase<br>R_DhcpCreateOptionV6<br>R_DhcpDeleteClientInfo<br>R_DhcpDeleteClientInfoV6<br>R_DhcpDeleteMClientInfo<br>R_DhcpEnumOptionValuesV5<br>R_DhcpEnumOptionValuesV6<br>R_DhcpEnumSubnetClients<br>R_DhcpGetClientInfoV6<br>R_DhcpGetClientOptions<br>R_DhcpGetMClientInfo<br>R_DhcpGetServerBindingInfo<br>R_DhcpGetServerBindingInfoV6<br>R_DhcpQueryDnsRegCredentials<br>R_DhcpRestoreDatabase<br>R_DhcpScanDatabase<br>R_DhcpServerGetConfigV4<br>R_DhcpServerGetConfigV6<br>R_DhcpServerGetConfigVQ<br>R_DhcpServerQueryAttribute<br>R_DhcpServerQueryAttributes<br>R_DhcpServerRedoAuthorization<br>R_DhcpServerSetConfigVQ<br>R_DhcpSetDnsRegCredentials<br>R_DhcpSetDnsRegCredentialsV5<br>R_DhcpSetOptionInfoV6<br>R_DhcpSetServerBindingInfo<br>R_DhcpSetServerBindingInfoV6<br>R_DhcpV4FailoverGetClientInfo<br>R_DhcpV6CreateClientInfo<br>ReadBitmasksFromDb<br>ReadDbEntriesInternal<br>ReadServerBitmasks<br>ReadServerDuidFromRegistry<br>RebindProcessIANA<br>RenewProcessIANA<br>RequestProcessIANA<br>RogueDetectStateMachine<br>RogueReceiveAck<br>RogueReceiveAckV6<br>ServiceControlHandler<br>ServiceEntry<br>ServiceStopInternal<br>SetDefaultConfigInfo<br>Shutdown<br>SolicitProcessIANA<br>TestDhcpInitV6AttachToDBFile<br>ThreadsStop<br>UpdateArpCache<br>ValidateMadcapMessage</details>|<details><summary>Expand for full list:<br>AddDataToPolicyEntry<br>AddSScopeToList<br>AddSocketToGArray<br>AddressCacherTimer<br>ApcRoutine<br>AppendFixUpServerInClasslessRoutesForQuarantine<br>AppendMadcapAddressList<br>AppendSOHVendorSpecific<br>AssembleQuarantineUserClass<br>AuditLogStart<br>AuditLogStop</summary>CalculateSuperScopeStats<br>CalloutInit<br>ChangeMScopeIdInDb<br>CleanupDatabase<br>CleanupIpDatabase<br>CleanupMCastDatabase<br>CleanupQData<br>ComputeDistinctPrefixLengths<br>ConfirmProcessIANA<br>ConvertAnsiToUtf8<br>ConvertBytesIntoHexString<br>ConvertUtf8ToAnsi<br>CvtWstrToStringr<br>DeleteDBEntry6<br>DeleteRecord<br>DhcpAAReAllocateAddresses<br>DhcpBNDCleanUpCoreQueue<br>DhcpBNDGetPendingDeleteAddresses<br>DhcpBNDProcessDeletedAddresses<br>DhcpBNDProcessIncomingBndAcks<br>DhcpBNDProcessIncomingBndUpdates<br>DhcpBNDProcessOutStandingUpdateFromDB<br>DhcpBNDProcessUpdReqORUpdReqAll<br>DhcpBNDReceiveThread<br>DhcpBNDSendCorePacketsThread<br>DhcpBNDSendThread<br>DhcpBackupDatabase<br>DhcpCMAddNewConnectionRequests<br>DhcpCMProcessNewConnectionRequests<br>DhcpCMReceiveFailoverMessage<br>DhcpCMSendConnectAckRejected<br>DhcpCalculateBase64Dhcid<br>DhcpCalculateHash<br>DhcpCheckIfSystemUpgraded<br>DhcpCleanupClientToServer<br>DhcpConcatenateFQDN<br>DhcpConvertOptionRegToRPCFormat<br>DhcpCreateAndInitDatabase<br>DhcpCreateClientV6EntryEx<br>DhcpCreateFilterIndexes<br>DhcpCreateFilterTable<br>DhcpCreateV6LeaseTable<br>DhcpDALMapJetError<br>DhcpDeinitializeEndpoint<br>DhcpDeleteMScopeClients<br>DhcpDeleteSubnet<br>DhcpDeleteSubnetClients<br>DhcpDeleteSubnetClientsV6<br>DhcpDetermineRequestedAddressInfo<br>DhcpDiscoverValidateRequestedAddress<br>DhcpDnsAsyncAdd<br>DhcpDnsAsyncDelete<br>DhcpDnsCallBack<br>DhcpDnsDecideOptionsForClient<br>DhcpDnsHandleCallbacks<br>DhcpDoDynDnsCheckDelete<br>DhcpDoDynDnsCreateEntryWork<br>DhcpDumpMessage<br>DhcpFSMProcessChangedState<br>DhcpFSMProcessFailoverMessage<br>DhcpFSMSendConnect<br>DhcpFSMSendConnectAck<br>DhcpFSMSendSimpleMessage<br>DhcpFSMSendState<br>DhcpFSMSendUpdReqForScopes<br>DhcpFailoverSubnetAddressAllocation<br>DhcpFlipRegisteredBit<br>DhcpFormDhcidRR<br>DhcpGetDhcidRR<br>DhcpGetFailoverLeaseDuration<br>DhcpInitV6AttachToDBFile<br>DhcpInitV6LeaseTable<br>DhcpInitializeCom<br>DhcpInitializeDatabaseEx<br>DhcpInitializeEndpoint<br>DhcpInitializeIas<br>DhcpJetCreatePlainConfigTable6<br>DhcpJetInitConfigTable6<br>DhcpJetLoadConfig6<br>DhcpJetPrepareSearchbyScopeforV6<br>DhcpMapJetError<br>DhcpOpenConfigTable<br>DhcpOpenDebugFile<br>DhcpOpenFilterDbTable<br>DhcpOpenMCastDbTable<br>DhcpParseOptionV6<br>DhcpParseRegistryOption<br>DhcpProcessDiscoverForValidatedAddress<br>DhcpRealDeleteClient<br>DhcpReconcilePrimSecBitMask<br>DhcpRegFillQuickBindInfo<br>DhcpRegFillQuickBindInfoV6<br>DhcpRetractOffer<br>DhcpRetrievePrivateDataInternal<br>DhcpScopeFailState<br>DhcpSetJetParameters<br>DhcpSetScopeStateToCommDown<br>DhcpTerminateJet<br>DhcpUpdateAuditLogBlindQuar<br>DhcpV4GetClientInfoExInternal<br>DhcpV6AddBindingInfo<br>DhcpV6AuditLogStart<br>DhcpV6AuditLogStop<br>DhcpV6CleanupClientToServer<br>DhcpV6CleanupQData<br>DhcpV6DeinitializeEndpoint<br>DhcpV6EndPointChangeHandler<br>DhcpV6ExtractOptions<br>DhcpV6Initialize<br>DhcpV6InitializeClientToServer<br>DhcpV6InitializeEndpoint<br>DhcpV6MessageLoop<br>DhcpV6ProcessConfirmMessage<br>DhcpV6ProcessDeclineMessage<br>DhcpV6ProcessMessage<br>DhcpV6ProcessPacket<br>DhcpV6ProcessRebindMessage<br>DhcpV6ProcessReceivedPacket<br>DhcpV6ProcessReleaseMessage<br>DhcpV6ProcessRenewMessage<br>DhcpV6ProcessRequestMessage<br>DhcpV6ProcessSolicitMessage<br>DhcpV6ReadOrWriteServerDUID<br>DhcpV6SendMessage<br>DhcpV6SetBindingInfo<br>DhcpV6UpdateAuditLogBlind<br>DhcpV6WaitForMessage<br>DhcpV6WaitForMessageThreadToQuit<br>DhcpWaitForMessage<br>DhcpWriterInit<br>Dhcpv6DnsAsyncAdd<br>Dhcpv6DnsAsyncDelete<br>Dhcpv6DnsCallBack<br>Dhcpv6DnsHandleCallbacks<br>Dhcpv6DoDynDnsCheckDelete<br>Dhcpv6DoDynDnsCreateEntryWork<br>Dhcpv6FlipRegisteredBit<br>Dhcpv6RealDeleteClient<br>Dns_GetBufferLengthForStringCopy<br>Dns_StringCopy<br>Dns_StringCopyAllocate<br>DoIcmpRequestEx<br>EndPointChangeHandler<br>FailoverDbSetConfiguration<br>FailoverDbSetConfigurationColumns<br>FillIasOctetString<br>FilterMapJetError<br>FindClientInfo<br>FindClientInfoFromRelayForwardMessage<br>FiniteStateMachine<br>GetCurrentExpressionRecord<br>GetOctedtStringValueFromIasAttrib<br>HandleIcmpResult<br>HandlePingCallback<br>HandleRogueProcessResponse<br>HandleRogueProcessResponseV6<br>HandleRogueSendPacket<br>HandleRogueSendPacketV6<br>HandleRogueStart<br>HandleRogueWaitForResponse<br>HandleRogueWaitForResponseV6<br>IasFailureDefaultProcess<br>Initialize<br>IsFileTooBigOrDiskFull<br>IsStatelessEntry<br>LoopOnIcmpRequests<br>MadcapDumpMessage<br>MadcapRetractOffer<br>MessageLoop<br>NotifyProcessingLoop<br>ParseDhcpV6Options<br>PassAttrToIAS<br>PerformRestore<br>PlumbQuarantineDecisionFromIASResponse<br>PolicyMapJetError<br>ProcessBootpRequest<br>ProcessClientMessage<br>ProcessDhcpDecline<br>ProcessDhcpDiscover<br>ProcessDhcpInform<br>ProcessDhcpRelease<br>ProcessDhcpRequest<br>ProcessInfoRequestMessage<br>ProcessMadcapDiscoverAndRequest<br>ProcessMadcapInform<br>ProcessMadcapMessage<br>ProcessMadcapRelease<br>ProcessMadcapRenew<br>ProcessMessage<br>ProcessPacket<br>ProcessQuarantinePacket<br>ProcessRelayForwardMessage<br>ProcessingLoop<br>QuarPacketLoop<br>QuarantineDecisionCallback<br>R_DhcpAuditLogGetParams<br>R_DhcpAuditLogSetParams<br>R_DhcpBackupDatabase<br>R_DhcpCreateOptionV6<br>R_DhcpDeleteClientInfo<br>R_DhcpDeleteClientInfoV6<br>R_DhcpDeleteMClientInfo<br>R_DhcpEnumOptionValuesV5<br>R_DhcpEnumOptionValuesV6<br>R_DhcpEnumSubnetClients<br>R_DhcpGetClientInfoV6<br>R_DhcpGetClientOptions<br>R_DhcpGetMClientInfo<br>R_DhcpGetServerBindingInfo<br>R_DhcpGetServerBindingInfoV6<br>R_DhcpQueryDnsRegCredentials<br>R_DhcpRestoreDatabase<br>R_DhcpScanDatabase<br>R_DhcpServerGetConfigV4<br>R_DhcpServerGetConfigV6<br>R_DhcpServerGetConfigVQ<br>R_DhcpServerQueryAttribute<br>R_DhcpServerQueryAttributes<br>R_DhcpServerRedoAuthorization<br>R_DhcpServerSetConfigVQ<br>R_DhcpSetDnsRegCredentials<br>R_DhcpSetDnsRegCredentialsV5<br>R_DhcpSetOptionInfoV6<br>R_DhcpSetServerBindingInfo<br>R_DhcpSetServerBindingInfoV6<br>R_DhcpV4FailoverGetClientInfo<br>R_DhcpV6CreateClientInfo<br>ReadBitmasksFromDb<br>ReadDbEntriesInternal<br>ReadServerBitmasks<br>ReadServerDuidFromRegistry<br>RebindProcessIANA<br>RenewProcessIANA<br>RequestProcessIANA<br>RogueDetectStateMachine<br>RogueReceiveAck<br>RogueReceiveAckV6<br>ServiceControlHandler<br>ServiceEntry<br>ServiceStopInternal<br>SetDefaultConfigInfo<br>Shutdown<br>SolicitProcessIANA<br>TestDhcpInitV6AttachToDBFile<br>ThreadsStop<br>UpdateArpCache<br>ValidateMadcapMessage</details>|
|paramcount|3|3|
|address|18000191c|18000191c|
|sig|undefined __fastcall WPP_SF_(undefined8 param_1, undefined2 param_2, undefined8 param_3)|undefined __fastcall WPP_SF_(undefined8 param_1, undefined2 param_2, undefined8 param_3)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|False|False|

## KERNEL32.DLL::LocalFree

### Match Info



|Key|dhcpssvc-06.dll - dhcpssvc-07.dll|
| :---: | :---: |
|diff_type|refcount,address,calling|
|ratio|1.0|
|i_ratio|1.0|
|m_ratio|1.0|
|b_ratio|1.0|
|match_types|SymbolsHash,ExternalsName|

### Function Meta Diff



|Key|dhcpssvc-06.dll|dhcpssvc-07.dll|
| :---: | :---: | :---: |
|name|LocalFree|LocalFree|
|fullname|KERNEL32.DLL::LocalFree|KERNEL32.DLL::LocalFree|
|`refcount`|436|439|
|length|0|0|
|called|||
|`calling`|<details><summary>Expand for full list:<br>AddBindingInfo<br>AddVendorOptDefsFunc<br>AddVendorOptDefsFunc6<br>AuditIPAddressUsage<br>AuditIPV6AddressUsage<br>AuditLogStart<br>CalloutInit<br>CheckKeyForBindability<br>CleanupData<br>CleanupDatabase<br>CleanupIpDatabase</summary>CleanupPolicy<br>ConvertClassDefToRPCFormat<br>CopyBinaryData<br>CopyClientInfoToV4<br>CopyClientInfoV4ToVQ<br>CopyHostInfo<br>CopySubnetElementDataToV4<br>CopySubnetElementUnionToV4<br>CreateRegistryWithSharedSecretInfo<br>DebugLog<br>DhcpAAFailoverThrottleQueue<br>DhcpAASendAllBitMaskDetails<br>DhcpAddServiceAceToDir<br>DhcpBNDCleanupCoreMessage<br>DhcpBNDGetPendingBndUpdates<br>DhcpBNDGetPendingDeleteAddresses<br>DhcpBNDProcessOutStandingUpdateFromDB<br>DhcpBNDUpdateDatabasewithBndUpd<br>DhcpCheckPathForRegKey<br>DhcpConvertOptionRegToRPCFormat<br>DhcpCreateAllStandardOptions<br>DhcpDeleteMScope<br>DhcpDeleteSubnet<br>DhcpEnumClasses<br>DhcpEnumClasses6<br>DhcpEnumExclusions<br>DhcpEnumExclusions6<br>DhcpEnumFilterV4<br>DhcpEnumMScopes<br>DhcpEnumOptionValues<br>DhcpEnumOptionValuesInternal<br>DhcpEnumOptionValuesInternal6<br>DhcpEnumOptionValuesInternalPB<br>DhcpEnumRPCOptionDefs<br>DhcpEnumRPCOptionDefs6<br>DhcpEnumRanges<br>DhcpEnumReservations<br>DhcpEnumReservations6<br>DhcpEnumSubnetReservationInfo<br>DhcpFSMEnumRelationship<br>DhcpGetAllOptionValues<br>DhcpGetAllOptionValues6<br>DhcpGetAllOptionValuesPB<br>DhcpGetAllOptions<br>DhcpGetAllOptionsV6<br>DhcpGetAuthStatus<br>DhcpGetBindingInfo<br>DhcpGetBootpInfo<br>DhcpGetClassInfo<br>DhcpGetCurrentClientInfo<br>DhcpGetCurrentClientInfoEx<br>DhcpGetCurrentClientInfoV5<br>DhcpGetCurrentClientInfoV6<br>DhcpGetCurrentClientInfoVQ<br>DhcpGetCurrentFailoverClientInfo<br>DhcpGetOptionValue<br>DhcpGetOptionValueV6<br>DhcpGetSuperScopeInfo<br>DhcpHandleFailoverRequest<br>DhcpInitializeRegistry<br>DhcpIsClientValid<br>DhcpJetGetValue<br>DhcpJetGetValueV6<br>DhcpRegFillQuickBindInfo<br>DhcpRegFillQuickBindInfoV6<br>DhcpRegGetValue<br>DhcpRetrievePrivateDataFromRegistryInternal<br>DhcpRetrievePrivateDataInternal<br>DhcpServerEventLog<br>DhcpServerEventLogREC<br>DhcpSetAuthStatus<br>DhcpStorePrivateData<br>DhcpTelemetryGetV6LevelDnsOption<br>DhcpTelemetryReportInfo<br>DhcpV4EnumeratePolicies<br>DhcpV6AddBindingInfo<br>DhcpV6AuditLogStart<br>DhcpV6GetBindingInfo<br>DhcpV6ServerEventLog<br>DhcpValidateClient<br>DhcpWriterInit<br>Dns_Free<br>DynBootpCallback<br>FSMFreeRelationshipMemoryArray<br>FSMFreeRelationshipMemoryEx<br>FSMUpdateScopes<br>FilterJetGetValue<br>FreeStrings<br>GetOptionValuesForSpecificClassVendorId<br>GetScopeQuarantineProfile<br>GetUserAndDomainName<br>ImportNewerRegFile<br>Isv6ScopeInUse<br>LoadBootFileTable<br>LogLeaseUpdateEventV6<br>LogOptionUpdateEvent<br>LogOptionUpdateEventV6<br>LogReservationOptionUpdateEvent<br>MadcapJetGetValue<br>MadcapValidateClientByClientId<br>MemFree<br>MoveBootpTable<br>NetpCreateSecurityDescriptor<br>NetpCreateSecurityObject<br>NetpCreateWellKnownSids<br>ParseValue<br>PerformAccessCheckAgainstFileObject<br>ProcessDbEntries<br>ProcessDhcpRelease<br>ProcessQuickBoundInterface<br>ProcessV6QuickBoundInterface<br>PutBranch<br>QueryMCastMibInfo<br>QueryMibInfo<br>QueryMibInfoV5<br>QueryMibInfoV6<br>R_DhcpAddSubnetElement<br>R_DhcpCreateClientInfo<br>R_DhcpCreateClientInfoV4<br>R_DhcpDeleteClientInfo<br>R_DhcpEnumMScopeClients<br>R_DhcpEnumMScopeElements<br>R_DhcpEnumMScopes<br>R_DhcpEnumSubnetClientsFilterStatusInfo<br>R_DhcpEnumSubnetClientsV4<br>R_DhcpEnumSubnetClientsV5<br>R_DhcpEnumSubnetClientsV6<br>R_DhcpEnumSubnetClientsVQ<br>R_DhcpEnumSubnetElementsV4<br>R_DhcpEnumSubnetElementsV5<br>R_DhcpEnumSubnetElementsV6<br>R_DhcpEnumSubnets<br>R_DhcpEnumSubnetsV6<br>R_DhcpGetAllOptionValues<br>R_DhcpGetAllOptionValuesV6<br>R_DhcpGetAllOptions<br>R_DhcpGetAllOptionsV6<br>R_DhcpGetClientInfoVQ<br>R_DhcpGetMScopeInfo<br>R_DhcpGetOptionInfoV5<br>R_DhcpGetOptionInfoV6<br>R_DhcpGetServerSpecificStrings<br>R_DhcpGetSubnetInfo<br>R_DhcpGetSubnetInfoV6<br>R_DhcpGetSubnetInfoVQ<br>R_DhcpGetSuperScopeInfoV4<br>R_DhcpRemoveSubnetElement<br>R_DhcpRestoreDatabase<br>R_DhcpServerGetConfig<br>R_DhcpServerGetConfigVQ<br>R_DhcpServerQueryAttributes<br>R_DhcpSetClientInfo<br>R_DhcpV4EnumSubnetClients<br>R_DhcpV4EnumSubnetClientsEx<br>R_DhcpV4EnumSubnetReservations<br>R_DhcpV4FailoverGetClientInfo<br>R_DhcpV4FailoverGetScopeStatistics<br>R_DhcpV4GetAllOptionValues<br>R_DhcpV4GetFreeIPAddress<br>R_DhcpV4GetPolicy<br>R_DhcpV4GetPolicyEx<br>R_DhcpV6GetFreeIPAddress<br>R_DhcpV6GetStatelessStatistics<br>R_DhcpV6GetStatelessStoreParams<br>RogueNetworkInit<br>RogueNetworkInitV6<br>RogueReceiveAck<br>RogueReceiveAckV6<br>SetV4Policy<br>Shutdown<br>_fgs__DHCP_CLIENT_INFO<br>_fgs__DHCP_CLIENT_INFO_ARRAY<br>_fgs__DHCP_CLIENT_INFO_ARRAY_V6<br>_fgs__DHCP_CLIENT_INFO_EX<br>_fgs__DHCP_CLIENT_INFO_FO_EX<br>_fgs__DHCP_CLIENT_INFO_PB<br>_fgs__DHCP_CLIENT_INFO_V6<br>_fgs__DHCP_HOST_INFO<br>_fgs__DHCP_MCLIENT_INFO<br>_fgs__DHCP_MCLIENT_INFO_ARRAY<br>_fgs__DHCP_OPTION<br>_fgs__DHCP_OPTION_ARRAY<br>_fgs__DHCP_OPTION_DATA_ELEMENT<br>_fgs__DHCP_OPTION_VALUE_ARRAY<br>_fgs__DHCP_PROPERTY_ARRAY<br>_fgs__DHCP_SUBNET_ELEMENT_DATA</details>|<details><summary>Expand for full list:<br>AddBindingInfo<br>AddVendorOptDefsFunc<br>AddVendorOptDefsFunc6<br>AuditIPAddressUsage<br>AuditIPV6AddressUsage<br>AuditLogStart<br>CalloutInit<br>CheckKeyForBindability<br>CleanupData<br>CleanupDatabase<br>CleanupIpDatabase</summary>CleanupPolicy<br>ConvertClassDefToRPCFormat<br>CopyBinaryData<br>CopyClientInfoToV4<br>CopyClientInfoV4ToVQ<br>CopyHostInfo<br>CopySubnetElementDataToV4<br>CopySubnetElementUnionToV4<br>CreateRegistryWithSharedSecretInfo<br>DebugLog<br>DhcpAAFailoverThrottleQueue<br>DhcpAASendAllBitMaskDetails<br>DhcpAddServiceAceToDir<br>DhcpBNDCleanupCoreMessage<br>DhcpBNDGetPendingBndUpdates<br>DhcpBNDGetPendingDeleteAddresses<br>DhcpBNDProcessOutStandingUpdateFromDB<br>DhcpBNDUpdateDatabasewithBndUpd<br>DhcpCheckPathForRegKey<br>DhcpConvertOptionRegToRPCFormat<br>DhcpCreateAllStandardOptions<br>DhcpDeleteMScope<br>DhcpDeleteSubnet<br>DhcpEnumClasses<br>DhcpEnumClasses6<br>DhcpEnumExclusions<br>DhcpEnumExclusions6<br>DhcpEnumFilterV4<br>DhcpEnumMScopes<br>DhcpEnumOptionValues<br>DhcpEnumOptionValuesInternal<br>DhcpEnumOptionValuesInternal6<br>DhcpEnumOptionValuesInternalPB<br>DhcpEnumRPCOptionDefs<br>DhcpEnumRPCOptionDefs6<br>DhcpEnumRanges<br>DhcpEnumReservations<br>DhcpEnumReservations6<br>DhcpEnumSubnetReservationInfo<br>DhcpFSMEnumRelationship<br>DhcpGetAllOptionValues<br>DhcpGetAllOptionValues6<br>DhcpGetAllOptionValuesPB<br>DhcpGetAllOptions<br>DhcpGetAllOptionsV6<br>DhcpGetAuthStatus<br>DhcpGetBindingInfo<br>DhcpGetBootpInfo<br>DhcpGetClassInfo<br>DhcpGetCurrentClientInfo<br>DhcpGetCurrentClientInfoEx<br>DhcpGetCurrentClientInfoV5<br>DhcpGetCurrentClientInfoV6<br>DhcpGetCurrentClientInfoVQ<br>DhcpGetCurrentFailoverClientInfo<br>DhcpGetOptionValue<br>DhcpGetOptionValueV6<br>DhcpGetSuperScopeInfo<br>DhcpHandleFailoverRequest<br>DhcpInitializeRegistry<br>DhcpIsClientValid<br>DhcpJetGetValue<br>DhcpJetGetValueV6<br>DhcpRegFillQuickBindInfo<br>DhcpRegFillQuickBindInfoV6<br>DhcpRegGetValue<br>DhcpRetrievePrivateDataFromRegistryInternal<br>DhcpRetrievePrivateDataInternal<br>DhcpServerEventLog<br>DhcpServerEventLogREC<br>DhcpSetAuthStatus<br>DhcpStorePrivateData<br>DhcpTelemetryGetV6LevelDnsOption<br>DhcpTelemetryReportInfo<br>DhcpV4EnumeratePolicies<br>DhcpV6AddBindingInfo<br>DhcpV6AuditLogStart<br>DhcpV6GetBindingInfo<br>DhcpV6ServerEventLog<br>DhcpValidateClient<br>DhcpWriterInit<br>Dns_Free<br>DynBootpCallback<br>FSMFreeRelationshipMemoryArray<br>FSMFreeRelationshipMemoryEx<br>FSMUpdateScopes<br>FilterJetGetValue<br>FreeStrings<br>GetOptionValuesForSpecificClassVendorId<br>GetScopeQuarantineProfile<br>GetUserAndDomainName<br>ImportNewerRegFile<br>Isv6ScopeInUse<br>LoadBootFileTable<br>LogLeaseUpdateEventV6<br>LogOptionUpdateEvent<br>LogOptionUpdateEventV6<br>LogReservationOptionUpdateEvent<br>MadcapJetGetValue<br>MadcapValidateClientByClientId<br>MemFree<br>MoveBootpTable<br>NetpCreateSecurityDescriptor<br>NetpCreateSecurityObject<br>NetpCreateWellKnownSids<br>ParseValue<br>PerformAccessCheckAgainstFileObject<br>ProcessDbEntries<br>ProcessDhcpRelease<br>ProcessQuickBoundInterface<br>ProcessV6QuickBoundInterface<br>PutBranch<br>QueryMCastMibInfo<br>QueryMibInfo<br>QueryMibInfoV5<br>QueryMibInfoV6<br>R_DhcpAddSubnetElement<br>R_DhcpCreateClientInfo<br>R_DhcpCreateClientInfoV4<br>R_DhcpDeleteClientInfo<br>R_DhcpEnumMScopeClients<br>R_DhcpEnumMScopeElements<br>R_DhcpEnumMScopes<br>R_DhcpEnumSubnetClientsFilterStatusInfo<br>R_DhcpEnumSubnetClientsV4<br>R_DhcpEnumSubnetClientsV5<br>R_DhcpEnumSubnetClientsV6<br>R_DhcpEnumSubnetClientsVQ<br>R_DhcpEnumSubnetElementsV4<br>R_DhcpEnumSubnetElementsV5<br>R_DhcpEnumSubnetElementsV6<br>R_DhcpEnumSubnets<br>R_DhcpEnumSubnetsV6<br>R_DhcpGetAllOptionValues<br>R_DhcpGetAllOptionValuesV6<br>R_DhcpGetAllOptions<br>R_DhcpGetAllOptionsV6<br>R_DhcpGetClientInfoVQ<br>R_DhcpGetMScopeInfo<br>R_DhcpGetOptionInfoV5<br>R_DhcpGetOptionInfoV6<br>R_DhcpGetServerSpecificStrings<br>R_DhcpGetSubnetInfo<br>R_DhcpGetSubnetInfoV6<br>R_DhcpGetSubnetInfoVQ<br>R_DhcpGetSuperScopeInfoV4<br>R_DhcpRemoveSubnetElement<br>R_DhcpRestoreDatabase<br>R_DhcpServerGetConfig<br>R_DhcpServerGetConfigVQ<br>R_DhcpServerQueryAttributes<br>R_DhcpSetClientInfo<br>R_DhcpV4EnumSubnetClients<br>R_DhcpV4EnumSubnetClientsEx<br>R_DhcpV4EnumSubnetReservations<br>R_DhcpV4FailoverGetClientInfo<br>R_DhcpV4FailoverGetScopeStatistics<br>R_DhcpV4GetAllOptionValues<br>R_DhcpV4GetFreeIPAddress<br>R_DhcpV4GetPolicy<br>R_DhcpV4GetPolicyEx<br>R_DhcpV6GetFreeIPAddress<br>R_DhcpV6GetStatelessStatistics<br>R_DhcpV6GetStatelessStoreParams<br>RogueNetworkInit<br>RogueNetworkInitV6<br>RogueReceiveAck<br>RogueReceiveAckV6<br>SetV4Policy<br>Shutdown<br>_fgs__DHCP_CLIENT_INFO_ARRAY<br>_fgs__DHCP_CLIENT_INFO_ARRAY_V6<br>_fgs__DHCP_CLIENT_INFO_EX<br>_fgs__DHCP_CLIENT_INFO_FO_EX<br>_fgs__DHCP_CLIENT_INFO_PB<br>_fgs__DHCP_CLIENT_INFO_V5<br>_fgs__DHCP_CLIENT_INFO_V6<br>_fgs__DHCP_HOST_INFO<br>_fgs__DHCP_MCLIENT_INFO<br>_fgs__DHCP_MCLIENT_INFO_ARRAY<br>_fgs__DHCP_OPTION<br>_fgs__DHCP_OPTION_ARRAY<br>_fgs__DHCP_OPTION_DATA_ELEMENT<br>_fgs__DHCP_OPTION_VALUE_ARRAY<br>_fgs__DHCP_PROPERTY_ARRAY<br>_fgs__DHCP_SUBNET_ELEMENT_DATA</details>|
|paramcount|1|1|
|`address`|EXTERNAL:00000193|EXTERNAL:00000194|
|sig|HLOCAL __stdcall LocalFree(HLOCAL hMem)|HLOCAL __stdcall LocalFree(HLOCAL hMem)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|True|True|

### KERNEL32.DLL::LocalFree Calling Diff


```diff
--- KERNEL32.DLL::LocalFree calling
+++ KERNEL32.DLL::LocalFree calling
@@ -182 +181,0 @@
-_fgs__DHCP_CLIENT_INFO
@@ -187,0 +187 @@
+_fgs__DHCP_CLIENT_INFO_V5
```


## KERNEL32.DLL::AcquireSRWLockShared

### Match Info



|Key|dhcpssvc-06.dll - dhcpssvc-07.dll|
| :---: | :---: |
|diff_type|refcount,address|
|ratio|1.0|
|i_ratio|1.0|
|m_ratio|1.0|
|b_ratio|1.0|
|match_types|SymbolsHash,ExternalsName|

### Function Meta Diff



|Key|dhcpssvc-06.dll|dhcpssvc-07.dll|
| :---: | :---: | :---: |
|name|AcquireSRWLockShared|AcquireSRWLockShared|
|fullname|KERNEL32.DLL::AcquireSRWLockShared|KERNEL32.DLL::AcquireSRWLockShared|
|`refcount`|65|66|
|length|0|0|
|called|||
|calling|<details><summary>Expand for full list:<br>DhcpAuthenticateMessage<br>DhcpBNDAddNewFoReqs<br>DhcpBNDProcessDeletedAddresses<br>DhcpBNDProcessIncomingBndAcks<br>DhcpBNDProcessIncomingBndUpdates<br>DhcpBNDProcessUpdReqORUpdReqAll<br>DhcpBNDReceiveThread<br>DhcpBNDSendCorePacketsThread<br>DhcpBNDSendThread<br>DhcpBNDVerifyScopeInRelationsip<br>DhcpCMCloseConnection</summary>DhcpCMCloseConnectionOnError<br>DhcpCMMainThread<br>DhcpCMProcessNewConnectionRequests<br>DhcpCMReceiveFailoverMessage<br>DhcpCMSendFailoverMessage<br>DhcpFSMEnumRelationship<br>DhcpFSMGetElement<br>DhcpFSMGetEndpointParameter<br>DhcpFSMGetScopeRelationship<br>DhcpFSMHandleError<br>DhcpFSMProcessFailoverMessage<br>DhcpFSMSendConnect<br>DhcpFSMSendConnectAck<br>DhcpFSMSendSimpleMessage<br>DhcpFSMSendState<br>DhcpFSMSendUpdReqForScopes<br>DhcpHandleFailoverRequest<br>DhcpTelemetryReportInfo<br>FSMGetElement<br>FSMScopeInFailoverRelation<br>FiniteStateMachine<br>GetEndPointSharedSecretProperties<br>R_DhcpDeleteSubnet<br>R_DhcpV4FailoverEnumRelationship<br>R_DhcpV4FailoverGetRelationship<br>R_DhcpV4FailoverGetScopeRelationship<br>R_DhcpV4FailoverGetScopeStatistics</details>|<details><summary>Expand for full list:<br>DhcpAuthenticateMessage<br>DhcpBNDAddNewFoReqs<br>DhcpBNDProcessDeletedAddresses<br>DhcpBNDProcessIncomingBndAcks<br>DhcpBNDProcessIncomingBndUpdates<br>DhcpBNDProcessUpdReqORUpdReqAll<br>DhcpBNDReceiveThread<br>DhcpBNDSendCorePacketsThread<br>DhcpBNDSendThread<br>DhcpBNDVerifyScopeInRelationsip<br>DhcpCMCloseConnection</summary>DhcpCMCloseConnectionOnError<br>DhcpCMMainThread<br>DhcpCMProcessNewConnectionRequests<br>DhcpCMReceiveFailoverMessage<br>DhcpCMSendFailoverMessage<br>DhcpFSMEnumRelationship<br>DhcpFSMGetElement<br>DhcpFSMGetEndpointParameter<br>DhcpFSMGetScopeRelationship<br>DhcpFSMHandleError<br>DhcpFSMProcessFailoverMessage<br>DhcpFSMSendConnect<br>DhcpFSMSendConnectAck<br>DhcpFSMSendSimpleMessage<br>DhcpFSMSendState<br>DhcpFSMSendUpdReqForScopes<br>DhcpHandleFailoverRequest<br>DhcpTelemetryReportInfo<br>FSMGetElement<br>FSMScopeInFailoverRelation<br>FiniteStateMachine<br>GetEndPointSharedSecretProperties<br>R_DhcpDeleteSubnet<br>R_DhcpV4FailoverEnumRelationship<br>R_DhcpV4FailoverGetRelationship<br>R_DhcpV4FailoverGetScopeRelationship<br>R_DhcpV4FailoverGetScopeStatistics</details>|
|paramcount|1|1|
|`address`|EXTERNAL:00000174|EXTERNAL:00000175|
|sig|void __stdcall AcquireSRWLockShared(PSRWLOCK SRWLock)|void __stdcall AcquireSRWLockShared(PSRWLOCK SRWLock)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|True|True|

## FSMUpdateRelationship

### Match Info



|Key|dhcpssvc-06.dll - dhcpssvc-07.dll|
| :---: | :---: |
|diff_type|refcount,address|
|ratio|1.0|
|i_ratio|0.74|
|m_ratio|1.0|
|b_ratio|1.0|
|match_types|SymbolsHash|

### Function Meta Diff



|Key|dhcpssvc-06.dll|dhcpssvc-07.dll|
| :---: | :---: | :---: |
|name|FSMUpdateRelationship|FSMUpdateRelationship|
|fullname|FSMUpdateRelationship|FSMUpdateRelationship|
|`refcount`|4|5|
|length|667|667|
|called|DhcpPrintFOErrorEx<br>FSMUpdateScopes<br>KERNEL32.DLL::LocalAlloc<br>StringCchCopyW<br>memcpy|DhcpPrintFOErrorEx<br>FSMUpdateScopes<br>KERNEL32.DLL::LocalAlloc<br>StringCchCopyW<br>memcpy|
|calling|DhcpFSMEnumRelationship<br>DhcpFSMGetElement<br>DhcpFSMGetScopeRelationship|DhcpFSMEnumRelationship<br>DhcpFSMGetElement<br>DhcpFSMGetScopeRelationship|
|paramcount|2|2|
|`address`|1800a1e90|1800a2ab0|
|sig|ulonglong __fastcall FSMUpdateRelationship(undefined4 * param_1, undefined8 * param_2)|ulonglong __fastcall FSMUpdateRelationship(undefined4 * param_1, undefined8 * param_2)|
|sym_type|Function|Function|
|sym_source|IMPORTED|IMPORTED|
|external|False|False|



<sub>Generated with `ghidriff` version: 1.0.0 on 2026-08-28T15:41:44</sub>