5.4. Таблица ресурсов

5.4.1. Общее описание

Данный каталог содержит все ресурсы исполняемого файла: меню, диалоги, рисунки и т. п. Он представляет собой трехуровневое дерево. На верхнем уровне ресурсы разбиты по их типам; на втором уровне все ресурсы данного типа разбиты по именам; наконец, на третьем уровне хранятся все ресурсы данного типа, имеющие данное имя, для всех поддерживаемых программой естественных языков. Именно третий уровень дерева содержит указатели на сами ресурсы, которые тем самым описываются тремя показателями: типом, именем и языком.

Каждый из уровней этого дерева представляет собой каталог ресурсов (IMAGE_RESOURCE_DIRECTORY), имеющий следующую структуру:

Смещение (hex) Размер Тип Название Описание
00 4 DWORD Characteristics Зарезервировано, всегда равно 0.
04 4 DWORD TimeDateStamp Дата и время создания каталога в формате Unix.
08 2 WORD MajorVersion Старшая цифра номера версии, не используется.
0A 2 WORD MinorVersion Младшая цифра номера версии, не используется.
0C 2 WORD NumberOfNamedEntries Количество элементов каталога, имеющих строковые имена.
10 2 WORD NumberOfIdEntries Количество элементов каталога, имеющих числовые идентификаторы.

Непосредственно за этой структурой следуют элементы каталога. Сначала идут NumberOfNamedEntries элементов, описывающих именнованные ресурсы, отсортированные по их именам, а затем NumberOfIdEntries элементов, не имеющих имен. Каждый элемент каталога – это структура IMAGE_RESOURCE_DIRECTORY_ENTRY, которая устроена так:

struct IMAGE_RESOURCE_DIRECTORY_ENTRY {
  union {
    struct {
      DWORD NameOffset:31;
      DWORD NameIsString:1;
    };
    DWORD Name;
    WORD  Id;
  };
  union {
    DWORD OffsetToData;
    struct {
      DWORD OffsetToDirectory:31;
      DWORD DataIsDirectory:1;
    };
  };
};
TBD some day...
© 2005 Юрий Лукач