Exemple #1
0
 private void UpdateHeaderFlags(bool resetcondition, CommonNetworkRelativeLinkFlags flag)
 {
     if (resetcondition)
     {
         CommonNetworkRelativeLinkFlags &= ~flag;
     }
     else
     {
         CommonNetworkRelativeLinkFlags |= flag;
     }
 }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
 private void UpdateHeaderFlags(object item, CommonNetworkRelativeLinkFlags flag)
 {
     UpdateHeaderFlags(((item is string) && string.IsNullOrEmpty(item as string)) || (item == null), flag);
 }