internal SystemEnvironmentValue(SafeStructureInOutBuffer <SystemEnvironmentValueNameAndValue> buffer) { SystemEnvironmentValueNameAndValue value = buffer.Result; Name = buffer.Data.ReadNulTerminatedUnicodeString(); Value = buffer.ReadBytes((ulong)value.ValueOffset, value.ValueLength); Attributes = value.Attributes; VendorGuid = value.VendorGuid; }
/// <summary> /// Query all system environment value names and values. /// </summary> /// <returns>A list of names of environment values</returns> public static IEnumerable <SystemEnvironmentValue> QuerySystemEnvironmentValueNamesAndValues() { using (var buffer = EnumEnvironmentValues(SystemEnvironmentValueInformationClass.NamesAndValues)) { int offset = 0; int size_struct = Marshal.SizeOf(typeof(SystemEnvironmentValueNameAndValue)); while (offset <= buffer.Length - size_struct) { var struct_buffer = buffer.GetStructAtOffset <SystemEnvironmentValueNameAndValue>(offset); SystemEnvironmentValueNameAndValue name = struct_buffer.Result; yield return(new SystemEnvironmentValue(struct_buffer)); if (name.NextEntryOffset == 0) { break; } offset = offset + name.NextEntryOffset; } } }