public override void Visit(IWin32Resource win32Resource) { if (Process(win32Resource)) { visitor.Visit(win32Resource); } base.Visit(win32Resource); }
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); }
/// <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); }
public override void TraverseChildren(IWin32Resource win32Resource) { base.TraverseChildren(win32Resource); }
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); }
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; }
public virtual void Visit(IWin32Resource win32Resource) { }
/// <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(); }
/// <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); { }
/// <summary> /// Rewrites the given Win32 resource. /// </summary> public virtual IWin32Resource Rewrite(IWin32Resource win32Resource) { return win32Resource; }
public override void Visit(IWin32Resource win32Resource) { allElements.Add(new InvokInfo(Traverser, "IWin32Resource", win32Resource)); }
/// <summary> /// Traverses the children of the Win32 resource. /// </summary> public virtual void TraverseChildren(IWin32Resource win32Resource) { Contract.Requires(win32Resource != null); //no children to traverse }
public void Visit(IWin32Resource win32Resource) { Contract.Assume(false); }
public virtual void onMetadataElement(IWin32Resource win32Resource) { }
/// <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 void Visit(IWin32Resource win32Resource) { throw new NotImplementedException(); }
/// <summary> /// Traverses the children of the Win32 resource. /// </summary> public virtual void TraverseChildren(IWin32Resource win32Resource) { //no children to traverse }