public override void Visit(IWin32Resource win32Resource)
 {
     if (Process(win32Resource))
     {
         visitor.Visit(win32Resource);
     }
     base.Visit(win32Resource);
 }
Example #2
0
        private static int CompareResources(IWin32Resource left, IWin32Resource right)
        {
            int result = CompareResourceIdentifiers(
                left.TypeId,
                left.TypeName,
                right.TypeId,
                right.TypeName
                );

            return((result == 0)
              ? CompareResourceIdentifiers(left.Id, left.Name, right.Id, right.Name)
              : result);
        }
Example #3
0
 /// <summary>
 /// Traverses the Win32 resource.
 /// </summary>
 public void Traverse(IWin32Resource win32Resource)
 {
     Contract.Requires(win32Resource != null);
       if (this.preorderVisitor != null) this.preorderVisitor.Visit(win32Resource);
       if (this.stopTraversal) return;
       this.TraverseChildren(win32Resource);
       if (this.stopTraversal) return;
       if (this.postorderVisitor != null) this.postorderVisitor.Visit(win32Resource);
 }
Example #4
0
 public override void TraverseChildren(IWin32Resource win32Resource)
 {
     base.TraverseChildren(win32Resource);
 }
Example #5
0
        private static void WriteDirectory(
            Directory directory,
            BlobBuilder writer,
            uint offset,
            uint level,
            uint sizeOfDirectoryTree,
            int virtualAddressBase,
            BlobBuilder dataWriter
            )
        {
            writer.WriteUInt32(0); // Characteristics
            writer.WriteUInt32(0); // Timestamp
            writer.WriteUInt32(0); // Version
            writer.WriteUInt16(directory.NumberOfNamedEntries);
            writer.WriteUInt16(directory.NumberOfIdEntries);
            uint n = (uint)directory.Entries.Count;
            uint k = offset + 16 + n * 8;

            for (int i = 0; i < n; i++)
            {
                int       id;
                string    name;
                uint      nameOffset      = (uint)dataWriter.Count + sizeOfDirectoryTree;
                uint      directoryOffset = k;
                Directory subDir          = directory.Entries[i] as Directory;
                if (subDir != null)
                {
                    id   = subDir.ID;
                    name = subDir.Name;
                    if (level == 0)
                    {
                        k += SizeOfDirectory(subDir);
                    }
                    else
                    {
                        k += 16 + 8 * (uint)subDir.Entries.Count;
                    }
                }
                else
                {
                    //EDMAURER write out an IMAGE_RESOURCE_DATA_ENTRY followed
                    //immediately by the data that it refers to. This results
                    //in a layout different than that produced by pulling the resources
                    //from an OBJ. In that case all of the data bits of a resource are
                    //contiguous in .rsrc$02. After processing these will end up at
                    //the end of .rsrc following all of the directory
                    //info and IMAGE_RESOURCE_DATA_ENTRYs
                    IWin32Resource r = (IWin32Resource)directory.Entries[i];
                    id =
                        level == 0
                            ? r.TypeId
                            : level == 1
                                ? r.Id
                                : (int)r.LanguageId;
                    name =
                        level == 0
                            ? r.TypeName
                            : level == 1
                                ? r.Name
                                : null;
                    dataWriter.WriteUInt32(
                        (uint)(virtualAddressBase + sizeOfDirectoryTree + 16 + dataWriter.Count)
                        );
                    byte[] data = new List <byte>(r.Data).ToArray();
                    dataWriter.WriteUInt32((uint)data.Length);
                    dataWriter.WriteUInt32(r.CodePage);
                    dataWriter.WriteUInt32(0);
                    dataWriter.WriteBytes(data);
                    while ((dataWriter.Count % 4) != 0)
                    {
                        dataWriter.WriteByte(0);
                    }
                }

                if (id >= 0)
                {
                    writer.WriteInt32(id);
                }
                else
                {
                    if (name == null)
                    {
                        name = string.Empty;
                    }

                    writer.WriteUInt32(nameOffset | 0x80000000);
                    dataWriter.WriteUInt16((ushort)name.Length);
                    dataWriter.WriteUTF16(name);
                }

                if (subDir != null)
                {
                    writer.WriteUInt32(directoryOffset | 0x80000000);
                }
                else
                {
                    writer.WriteUInt32(nameOffset);
                }
            }

            k = offset + 16 + n * 8;
            for (int i = 0; i < n; i++)
            {
                Directory subDir = directory.Entries[i] as Directory;
                if (subDir != null)
                {
                    WriteDirectory(
                        subDir,
                        writer,
                        k,
                        level + 1,
                        sizeOfDirectoryTree,
                        virtualAddressBase,
                        dataWriter
                        );
                    if (level == 0)
                    {
                        k += SizeOfDirectory(subDir);
                    }
                    else
                    {
                        k += 16 + 8 * (uint)subDir.Entries.Count;
                    }
                }
            }
        }
 public override void Visit(IWin32Resource win32Resource)
 {
     if(Process(win32Resource)){visitor.Visit(win32Resource);}
     base.Visit(win32Resource);
 }
Example #7
0
        private static int CompareResources(IWin32Resource left, IWin32Resource right)
        {
            int result = CompareResourceIdentifiers(left.TypeId, left.TypeName, right.TypeId, right.TypeName);

            return (result == 0) ? CompareResourceIdentifiers(left.Id, left.Name, right.Id, right.Name) : result;
        }
Example #8
0
 public virtual void Visit(IWin32Resource win32Resource)
 {
 }
Example #9
0
 /// <summary>
 /// Performs some computation with the given Win32 resource.
 /// </summary>
 public virtual void Visit(IWin32Resource win32Resource)
 {
 }
 public void Win32Resource(IWin32Resource win32Resource) {
   this.ILDasmPaper.Directive(".win32resource");
   string nameOrId = win32Resource.Id < 0 ? win32Resource.Name : win32Resource.Id.ToString("X8");
   this.ILDasmPaper.Identifier(nameOrId);
   this.ILDasmPaper.NewLine();
   this.ILDasmPaper.OpenBlock();
   string typeNameOrId = win32Resource.TypeId < 0 ? win32Resource.TypeName : win32Resource.TypeId.ToString("X8");
   this.ILDasmPaper.Directive(".type");
   this.ILDasmPaper.Identifier(typeNameOrId);
   this.ILDasmPaper.NewLine();
   this.ILDasmPaper.Directive(".language");
   this.ILDasmPaper.HexUInt(win32Resource.LanguageId);
   this.ILDasmPaper.NewLine();
   this.ILDasmPaper.Directive(".codepage");
   this.ILDasmPaper.HexUInt(win32Resource.CodePage);
   this.ILDasmPaper.NewLine();
   this.ILDasmPaper.Directive(".data");
   this.ILDasmPaper.Symbol(" = ");
   this.ILDasmPaper.ByteStream(win32Resource.Data);
   this.ILDasmPaper.NewLine();
   this.ILDasmPaper.CloseBlock();
 }
Example #11
0
 /// <summary>
 /// Performs some computation with the given Win32 resource.
 /// </summary>
 /// <param name="win32Resource"></param>
 public virtual void Visit(IWin32Resource win32Resource)
   //^ ensures this.path.Count == old(this.path.Count);
 {
 }
Example #12
0
 public override void TraverseChildren(IWin32Resource win32Resource) {
   base.TraverseChildren(win32Resource);
 }
 /// <summary>
 /// Rewrites the given Win32 resource.
 /// </summary>
 public virtual IWin32Resource Rewrite(IWin32Resource win32Resource)
 {
     return win32Resource;
 }
Example #14
0
 public override void Visit(IWin32Resource win32Resource)
 {
     allElements.Add(new InvokInfo(Traverser, "IWin32Resource", win32Resource));
 }
Example #15
0
 /// <summary>
 /// Traverses the children of the Win32 resource.
 /// </summary>
 public virtual void TraverseChildren(IWin32Resource win32Resource)
 {
     Contract.Requires(win32Resource != null);
       //no children to traverse
 }
Example #16
0
 public void Visit(IWin32Resource win32Resource)
 {
     Contract.Assume(false);
 }
Example #17
0
 public virtual void onMetadataElement(IWin32Resource win32Resource)
 {
 }
Example #18
0
 /// <summary>
 /// Performs some computation with the given Win32 resource.
 /// </summary>
 public void Visit(IWin32Resource win32Resource)
 {
 }
        public override void TraverseChildren(IWin32Resource win32Resource)
{ MethodEnter(win32Resource);
            base.TraverseChildren(win32Resource);
     MethodExit();   }
 public virtual void onMetadataElement(IWin32Resource win32Resource) { }
Example #21
0
 public void Visit(IWin32Resource win32Resource)
 {
     throw new NotImplementedException();
 }
Example #22
0
 public override void TraverseChildren(IWin32Resource win32Resource)
 {
     MethodEnter(win32Resource);
     base.TraverseChildren(win32Resource);
     MethodExit();
 }
Example #23
0
 /// <summary>
 /// Traverses the children of the Win32 resource.
 /// </summary>
 public virtual void TraverseChildren(IWin32Resource win32Resource)
 {
     //no children to traverse
 }