@@ -7,8 +7,7 @@ cfg_if::cfg_if! {
7
7
core:: * ,
8
8
Win32 :: NetworkManagement :: Dns :: * ,
9
9
} ;
10
- use winreg:: RegKey ;
11
- use winreg:: enums:: * ;
10
+ use windows_registry:: LOCAL_MACHINE ;
12
11
use std:: ptr:: { null_mut} ;
13
12
use core:: ffi:: { c_void} ;
14
13
@@ -42,14 +41,14 @@ cfg_if::cfg_if! {
42
41
43
42
pub fn get_dns_client_nrpt_rules( ) -> Vec <DnsClientNrptRule > {
44
43
let mut rules: Vec <DnsClientNrptRule > = Vec :: new( ) ;
45
- let hklm = RegKey :: predef ( HKEY_LOCAL_MACHINE ) ;
44
+ let hklm = LOCAL_MACHINE ;
46
45
let dns_policy_config_key_path = "System\\ CurrentControlSet\\ Services\\ Dnscache\\ Parameters\\ DnsPolicyConfig" ;
47
- if let Ok ( dns_policy_config_key) = hklm. open_subkey ( dns_policy_config_key_path) {
48
- for rule_name in dns_policy_config_key. enum_keys ( ) . map ( |x| x . unwrap( ) ) {
46
+ if let Ok ( dns_policy_config_key) = hklm. open ( dns_policy_config_key_path) {
47
+ for rule_name in dns_policy_config_key. keys ( ) . unwrap( ) {
49
48
let dns_policy_rule_key_path = format!( "{}\\ {}" , dns_policy_config_key_path, & rule_name) ;
50
- if let Ok ( dns_policy_rule_key) = hklm. open_subkey ( dns_policy_rule_key_path) {
51
- let namespace: Option <String > = dns_policy_rule_key. get_value ( "Name" ) . ok( ) ; // REG_MULTI_SZ
52
- let name_server_list: Option <String > = dns_policy_rule_key. get_value ( "GenericDNSServers" ) . ok( ) ; // REG_SZ
49
+ if let Ok ( dns_policy_rule_key) = hklm. open ( dns_policy_rule_key_path) {
50
+ let namespace: Option <String > = dns_policy_rule_key. get_string ( "Name" ) . ok( ) ; // REG_MULTI_SZ
51
+ let name_server_list: Option <String > = dns_policy_rule_key. get_string ( "GenericDNSServers" ) . ok( ) ; // REG_SZ
53
52
if let ( Some ( namespace) , Some ( name_server_list) ) = ( namespace, name_server_list) {
54
53
let name_servers: Vec <String > = name_server_list. split( ';' ) . map( |x| x. to_string( ) ) . collect( ) ;
55
54
rules. push( DnsClientNrptRule {
@@ -65,23 +64,23 @@ cfg_if::cfg_if! {
65
64
}
66
65
67
66
pub fn get_default_name_servers( ) -> Vec <String > {
68
- let hklm = RegKey :: predef ( HKEY_LOCAL_MACHINE ) ;
67
+ let hklm = LOCAL_MACHINE ;
69
68
let tcpip_linkage_key_path = "SYSTEM\\ CurrentControlSet\\ Services\\ Tcpip\\ Linkage" ;
70
69
let tcpip_interfaces_key_path = "SYSTEM\\ CurrentControlSet\\ Services\\ Tcpip\\ Parameters\\ Interfaces" ;
71
70
let dns_registered_adapters_key_path = "SYSTEM\\ CurrentControlSet\\ Services\\ Tcpip\\ Parameters\\ DNSRegisteredAdapters" ;
72
71
73
- if let Ok ( tcpip_linkage_key) = hklm. open_subkey ( tcpip_linkage_key_path) {
74
- let bind_devices: Vec <String > = tcpip_linkage_key. get_value ( "Bind" ) . unwrap( ) ;
72
+ if let Ok ( tcpip_linkage_key) = hklm. open ( tcpip_linkage_key_path) {
73
+ let bind_devices: Vec <String > = tcpip_linkage_key. get_multi_string ( "Bind" ) . unwrap( ) ;
75
74
let device_ids = bind_devices. iter( ) . map( |x| x. strip_prefix( "\\ Device\\ " ) . unwrap( ) ) ;
76
75
77
76
for device_id in device_ids {
78
77
let interface_key_path = format!( "{}\\ {}" , tcpip_interfaces_key_path, & device_id) ;
79
78
let dns_adapter_key_path = format!( "{}\\ {}" , dns_registered_adapters_key_path, & device_id) ;
80
79
81
- if let ( Ok ( interface_key) , Ok ( dns_adapter_key) ) = ( hklm. open_subkey ( interface_key_path) , hklm. open_subkey ( dns_adapter_key_path) ) {
82
- let name_server: Option <String > = interface_key. get_value ( "NameServer" ) . ok( ) . filter( |x: & String | !x. is_empty( ) ) ;
83
- let dhcp_name_server: Option <String > = interface_key. get_value ( "DhcpNameServer" ) . ok( ) . filter( |x: & String | !x. is_empty( ) ) ;
84
- let stale_adapter: u32 = dns_adapter_key. get_value ( "StaleAdapter" ) . unwrap_or( 1 ) ;
80
+ if let ( Ok ( interface_key) , Ok ( dns_adapter_key) ) = ( hklm. open ( interface_key_path) , hklm. open ( dns_adapter_key_path) ) {
81
+ let name_server: Option <String > = interface_key. get_string ( "NameServer" ) . ok( ) . filter( |x: & String | !x. is_empty( ) ) ;
82
+ let dhcp_name_server: Option <String > = interface_key. get_string ( "DhcpNameServer" ) . ok( ) . filter( |x: & String | !x. is_empty( ) ) ;
83
+ let stale_adapter: u32 = dns_adapter_key. get_u32 ( "StaleAdapter" ) . unwrap_or( 1 ) ;
85
84
86
85
if stale_adapter != 1 {
87
86
if let Some ( name_server_list) = name_server. or( dhcp_name_server) {
0 commit comments