MCPcopy Create free account
hub / github.com/PowerShell/DSC / next

Method next

archive/ntreg/src/registry_value.rs:82–127  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

80impl Iterator for RegistryValues {
81 type Item = RegistryValue;
82 fn next(&mut self) -> Option<Self::Item> {
83 if self.index >= self.key.sub_key_count {
84 return None;
85 }
86
87 let max_value_len = self.key.max_value_name_len + 1;
88 let max_data_len = self.key.max_data_len + 1;
89 let buf_len = size_of::<KEY_VALUE_FULL_INFORMATION>() as u32 + max_value_len + max_data_len;
90 let mut len: u32 = buf_len;
91 let buf: Vec<u8> = vec![0; len as usize];
92 let value_information: PKEY_VALUE_FULL_INFORMATION = buf.as_ptr() as PKEY_VALUE_FULL_INFORMATION;
93 let status = unsafe {
94 ntregapi::NtEnumerateValueKey(
95 self.key.handle,
96 self.index,
97 ntregapi::KeyValueFullInformation,
98 value_information as *mut c_void,
99 len,
100 &mut len
101 )
102 };
103
104 if status == ERROR_NO_MORE_ITEMS {
105 return None;
106 }
107
108 if !NT_SUCCESS(status) {
109 return None;
110 }
111
112 let name_length = unsafe {
113 ((*value_information).NameLength / size_of::<u16>() as u32) as usize
114 };
115
116 let reg_value_name = String::from_utf16_lossy( unsafe {
117 std::slice::from_raw_parts((*value_information).Name.as_ptr(), name_length)
118 });
119
120 self.index += 1;
121
122 Some(RegistryValue {
123 key_path: self.key.path.clone(),
124 name: if name_length > 0 { reg_value_name } else { "".to_string() },
125 data: get_data_value(value_information),
126 })
127 }
128}
129
130impl fmt::Display for RegistryValueData {

Callers

nothing calls this directly

Calls 1

get_data_valueFunction · 0.85

Tested by

no test coverage detected