private void UpdateHeaderFlags(bool resetcondition, CommonNetworkRelativeLinkFlags flag) { if (resetcondition) { CommonNetworkRelativeLinkFlags &= ~flag; } else { CommonNetworkRelativeLinkFlags |= flag; } }
/// <summary> /// Create a CommonNetworkRelativeLink from a given byte array /// </summary> /// <param name="ba">The byte array</param> /// <returns>A CommonNetworkRelativeLink object</returns> public static CommonNetworkRelativeLink FromByteArray(byte[] ba) { CommonNetworkRelativeLink CommonNetworkRelativeLink = new CommonNetworkRelativeLink(); if (ba.Length < 0x14) { throw new ArgumentException(String.Format("Size of the CommonNetworkRelativeLink Structure is less than 20 ({0})", ba.Length)); } UInt32 CommonNetworkRelativeLinkSize = BitConverter.ToUInt32(ba, 0); if (CommonNetworkRelativeLinkSize > ba.Length) { throw new ArgumentException(String.Format("The CommonNetworkRelativeLinkSize is {0} is incorrect (expected {1})", CommonNetworkRelativeLink, ba.Length)); } CommonNetworkRelativeLinkFlags CommonNetworkRelativeLinkFlags = (CommonNetworkRelativeLinkFlags)BitConverter.ToUInt32(ba, 4); UInt32 NetNameOffset = BitConverter.ToUInt32(ba, 8); UInt32 DeviceNameOffset = BitConverter.ToUInt32(ba, 12); UInt32 NetNameOffsetUnicode = 0; UInt32 DeviceNameOffsetUnicode = 0; CommonNetworkRelativeLink.NetworkProviderType = (NetworkProviderType)BitConverter.ToUInt32(ba, 16); if (NetNameOffset > 0x14) { NetNameOffsetUnicode = BitConverter.ToUInt32(ba, 20); DeviceNameOffsetUnicode = BitConverter.ToUInt32(ba, 24); } byte[] tmp = ba.Skip((int)NetNameOffset).ToArray(); CommonNetworkRelativeLink.NetName = Encoding.Default.GetString(tmp.Take(Array.IndexOf(tmp, (byte)0x00) + 1).ToArray()).TrimEnd(new char[] { (char)0 }); if ((CommonNetworkRelativeLinkFlags & CommonNetworkRelativeLinkFlags.ValidDevice) != 0) { tmp = ba.Skip((int)DeviceNameOffset).ToArray(); CommonNetworkRelativeLink.DeviceName = Encoding.Default.GetString(tmp.Take(Array.IndexOf(tmp, (byte)0x00) + 1).ToArray()).TrimEnd(new char[] { (char)0 }); } if (NetNameOffset > 0x14) { int Index = 0; tmp = ba.Skip((int)NetNameOffsetUnicode).ToArray(); for (int i = 0; i < tmp.Length - 1; i++) { if (tmp[i] == 0x00 && tmp[i + 1] == 0x00) { Index = i; break; } } CommonNetworkRelativeLink.NetNameUnicode = Encoding.Unicode.GetString(tmp.Take(Index + 1).ToArray()).TrimEnd(new char[] { (char)0 }); if ((CommonNetworkRelativeLinkFlags & CommonNetworkRelativeLinkFlags.ValidDevice) != 0) { tmp = ba.Skip((int)DeviceNameOffsetUnicode).ToArray(); for (int i = 0; i < tmp.Length - 1; i++) { if (tmp[i] == 0x00 && tmp[i + 1] == 0x00) { Index = i; break; } } CommonNetworkRelativeLink.DeviceNameUnicode = Encoding.Unicode.GetString(tmp.Take(Index + 1).ToArray()).TrimEnd(new char[] { (char)0 }); } } return(CommonNetworkRelativeLink); }
private void UpdateHeaderFlags(object item, CommonNetworkRelativeLinkFlags flag) { UpdateHeaderFlags(((item is string) && string.IsNullOrEmpty(item as string)) || (item == null), flag); }