62 return (IMAGE_RESOURCE_DIRECTORY*) ptr;
65IMAGE_RESOURCE_DIRECTORY* ResourceDirWrapper::resourceDir()
70 return (IMAGE_RESOURCE_DIRECTORY*) ptr;
79 IMAGE_RESOURCE_DIRECTORY* dir = resourceDir();
80 if (dir == NULL)
return false;
81 size_t namesNum = dir->NumberOfNamedEntries;
82 size_t idsNum = dir->NumberOfIdEntries;
84 size_t totalEntries = namesNum + idsNum;
85 for (
size_t i = 0; i < totalEntries && i <
MAX_ENTRIES; i++ ) {
87 long topDirId = (this->topEntryID !=
TOP_ENTRY_ROOT) ? this->topEntryID :
long(i) ;
92 if (entry->
getPtr() == NULL) {
97 pe::resource_type typeId =
static_cast<pe::resource_type
>(entry->
getID());
101 this->
entries.push_back(entry);
110 if (
getPtr() == NULL)
return 0;
111 bufsize_t size =
sizeof(IMAGE_RESOURCE_DIRECTORY);
118 IMAGE_RESOURCE_DIRECTORY* d = resourceDir();
119 if (d == NULL)
return NULL;
123 case TIMESTAMP:
return &d->TimeDateStamp;
128 case CHILDREN :
return (&d->NumberOfIdEntries) + 1;
152 this->childDir = NULL;
155 this->childLeaf = NULL;
163 if (childRaw == 0 || childRaw ==
INVALID_ADDR)
return false;
166 long depth = this->parentDir->
getDepth() + 1;
171 if (this->album != NULL) {
172 album->
putLeaf(childLeaf, topEntryID);
181 if (this->parentDir == NULL)
return NULL;
187 offset += (this->
entryNum *
sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY));
190 return (IMAGE_RESOURCE_DIRECTORY_ENTRY*) ptr;
196 IMAGE_RESOURCE_DIRECTORY_ENTRY* entry =
getEntryPtr();
197 if (entry == NULL)
return NULL;
203 return &entry->OffsetToData;
214 return "Offset To Data";
221 IMAGE_RESOURCE_DIRECTORY_ENTRY* entry =
getEntryPtr();
222 if (entry == NULL)
return false;
223 if (entry->NameIsString == 1)
return true;
229 IMAGE_RESOURCE_DIRECTORY_ENTRY* entry =
getEntryPtr();
230 if (entry == NULL)
return false;
231 if (entry->DataIsDirectory == 1)
return true;
237 IMAGE_RESOURCE_DIRECTORY_ENTRY* entry =
getEntryPtr();
245 return fOff + entry->NameOffset;
253 const size_t BASIC_SIZE =
sizeof(IMAGE_RESOURCE_DIRECTORY_STRING);
261 case pe::RESTYPE_CURSOR :
return "Cursor";
262 case pe::RESTYPE_FONT :
return "Font";
263 case pe::RESTYPE_BITMAP :
return "Bitmap";
264 case pe::RESTYPE_ICON :
return "Icon";
265 case pe::RESTYPE_MENU :
return "Menu";
266 case pe::RESTYPE_DIALOG :
return "Dialog";
267 case pe::RESTYPE_STRING :
return "String";
268 case pe::RESTYPE_FONTDIR :
return "Font Dir";
269 case pe::RESTYPE_ACCELERATOR :
return "Accelerator";
270 case pe::RESTYPE_RCDATA :
return "RC Data";
271 case pe::RESTYPE_MESSAGETABLE :
return "Message Table";
273 case pe::RESTYPE_GROUP_CURSOR :
return "Cursors Group";
274 case pe::RESTYPE_GROUP_ICON :
return "Icons Group";
275 case pe::RESTYPE_VERSION :
return "Version";
276 case pe::RESTYPE_DLGINCLUDE :
return "Dlg Include";
277 case pe::RESTYPE_PLUGPLAY :
return "Plug & Play";
278 case pe::RESTYPE_VXD :
return "VXD";
279 case pe::RESTYPE_ANICURSOR :
return "Animated Cursor";
280 case pe::RESTYPE_ANIICON :
return "Animated Icon";
281 case pe::RESTYPE_HTML :
return "HTML";
282 case pe::RESTYPE_MANIFEST :
return "Manifest";
289 IMAGE_RESOURCE_DIRECTORY_ENTRY* entry =
getEntryPtr();
290 if (entry == NULL)
return 0;
298 const IMAGE_RESOURCE_DIRECTORY_ENTRY* entry =
getEntryPtr();
302 if (entry->DataIsDirectory) {
303 return entry->OffsetToDirectory;
305 return entry->OffsetToData;
318 return fOff + childOff;
334 if (!leaf)
return NULL;
340 case RESERVED:
return &leaf->Reserved;
const offset_t INVALID_ADDR
offset_t getDirEntryAddress()
virtual bufsize_t getFieldSize(size_t fieldId, size_t subField=FIELD_NONE)
virtual offset_t getFieldOffset(size_t fieldId, size_t subField=FIELD_NONE)
std::vector< ExeNodeWrapper * > entries
BYTE * getContentAt(offset_t offset, bufsize_t size, bool allowExceptions=false)
virtual bufsize_t getSize()
virtual QString getFieldName(size_t fieldId)
virtual void * getFieldPtr(size_t fieldId, size_t subField)
IMAGE_RESOURCE_DIRECTORY * mainResourceDir()
virtual QString getName()
bufsize_t getEntriesAreaSize()
virtual QString getFieldName(size_t fieldId)
offset_t getChildAddress()
IMAGE_RESOURCE_DIRECTORY_ENTRY * getEntryPtr()
static QString translateType(WORD id)
virtual QString getName()
IMAGE_RESOURCE_DIRECTORY_STRING * getNameStr()
offset_t getChildOffsetToDirectory()
virtual void * getFieldPtr(size_t fieldId, size_t subField=FIELD_NONE)
IMAGE_RESOURCE_DATA_ENTRY * leafEntryPtr()
virtual void * getFieldPtr(size_t fieldId, size_t subField)
virtual QString getFieldName(size_t fieldId)
void mapIdToLeafType(long topId, pe::resource_type leafType)
void putLeaf(ResourceLeafWrapper *leaf, long topEntryId)