public static ExtraDataBlockHandler GetInstance(ExtraDataBlock item, ShellLinkFile context)
        {
            var typename = $"Shellify.IO.{item.GetType().Name}Handler";
            var type     = Type.GetType(typename);

            if (type == null)
            {
                throw new ArgumentException(typename);
            }

            return((ExtraDataBlockHandler)Activator.CreateInstance(type, new object[] { item, context }));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Reads the extra data block.
        /// </summary>
        /// <param name="binaryReader">The binary reader.</param>
        /// <returns></returns>
        internal static ExtraDataBlock ReadExtraDataBlock(this BinaryReader binaryReader)
        {
            int blockSize = binaryReader.ReadInt32();

            if (blockSize < 0x4)
            {
                return(null);
            }

            var signature = (ExtraDataBlockSignature)(binaryReader.ReadInt32());

            var extraDataBlock = default(ExtraDataBlock);

            switch (signature)
            {
            // Raw
            case ExtraDataBlockSignature.UnknownDataBlock:
            case ExtraDataBlockSignature.ConsoleDataBlock:
            case ExtraDataBlockSignature.ConsoleFEDataBlock:
            case ExtraDataBlockSignature.PropertyStoreDataBlock:
            case ExtraDataBlockSignature.ShimDataBlock:
            case ExtraDataBlockSignature.TrackerDataBlock:
            case ExtraDataBlockSignature.VistaAndAboveIDListDataBlock:
            // Base Folder ID
            case ExtraDataBlockSignature.KnownFolderDataBlock:
            case ExtraDataBlockSignature.SpecialFolderDataBlock:
            {
                // Skip reading these extra data blocks.
                binaryReader.BaseStream.Seek(blockSize - Marshal.SizeOf(blockSize) - Marshal.SizeOf(typeof(int)), SeekOrigin.Current);
                extraDataBlock = new ExtraDataBlock()
                {
                    Signature = signature
                };
                break;
            }

            // String
            case ExtraDataBlockSignature.DarwinDataBlock:
            case ExtraDataBlockSignature.EnvironmentVariableDataBlock:
            case ExtraDataBlockSignature.IconEnvironmentDataBlock:
            {
                extraDataBlock = binaryReader.ReadStringExtraDataBlock(signature);
                break;
            }
            }

            return(extraDataBlock);
        }
Exemplo n.º 3
0
 public void TestHandler()
 {
     foreach (ExtraDataBlockSignature signature in Enum.GetValues(typeof(ExtraDataBlockSignature)))
     {
         ExtraDataBlock block = null;
         try
         {
             block = ExtraDataBlockFactory.GetInstance(signature);
         }
         catch (Exception)
         {
             Assert.Fail("Check ExtraDataBlockFactory with '{0}' signature", signature);
         }
         try
         {
             ExtraDataBlockHandlerFactory.GetInstance(block, null);
         }
         catch (Exception)
         {
             Assert.Fail("Check ExtraDataBlockHandlerFactory with '{0}' block type", block.GetType().Name);
         }
     }
 }