Changeset 1811 for trunk/src/kernel32/pefile.cpp
- Timestamp:
- Nov 22, 1999, 9:35:52 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/pefile.cpp
r956 r1811 1 /* $Id: pefile.cpp,v 1. 5 1999-09-15 23:38:01 sandervl Exp $ */1 /* $Id: pefile.cpp,v 1.6 1999-11-22 20:35:51 sandervl Exp $ */ 2 2 3 3 /* … … 12 12 #include <string.h> 13 13 #include <stdlib.h> 14 #ifdef __WATCOMC__15 #include <mem.h>16 #endif17 14 #include <win32type.h> 18 15 #include <pefile.h> … … 73 70 } 74 71 75 return (LPVOID)(((ULONG)lpFile + (ULONG)(poh->DataDirectory[dwIMAGE_DIRECTORY].VirtualAddress - 76 sh.VirtualAddress) + (ULONG)sh.PointerToRawData)); 72 return (LPVOID)((ULONG)lpFile + poh->DataDirectory[dwIMAGE_DIRECTORY].VirtualAddress); 77 73 } 78 74 //****************************************************************************** … … 149 145 return FALSE; 150 146 } 151 //******************************************************************************152 //******************************************************************************153 int GetNumberOfResources(LPVOID lpFile)154 {155 PIMAGE_RESOURCE_DIRECTORY prdRoot, prdType;156 PIMAGE_RESOURCE_DIRECTORY_ENTRY prde;157 int nCnt=0, i, j, id;158 char *resname;159 160 if ((prdRoot = (PIMAGE_RESOURCE_DIRECTORY)ImageDirectoryOffset161 (lpFile, IMAGE_DIRECTORY_ENTRY_RESOURCE)) == NULL)162 return 0;163 164 prde = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)((DWORD)prdRoot + sizeof (IMAGE_RESOURCE_DIRECTORY));165 166 for (i=0; i<prdRoot->NumberOfNamedEntries+prdRoot->NumberOfIdEntries; i++)167 {168 prdType = (PIMAGE_RESOURCE_DIRECTORY)((ULONG)prdRoot + (ULONG)prde->u2.OffsetToData);169 170 if(i<prdRoot->NumberOfNamedEntries) {171 //SvL: 30-10-'97, high bit is set, so clear to get real offset172 prde->u1.Name &= ~0x80000000;173 for(j=0;j<MAX_RES;j++) {174 resname = UnicodeToFixedAsciiString(*(WCHAR *)((ULONG)prdRoot + (ULONG)prde->u1.Name), (WCHAR *)((ULONG)prdRoot + (ULONG)prde->u1.Name + sizeof(WCHAR))); // first word = string length175 if(strcmp(resname, ResTypes[j]) == 0)176 break;177 }178 if(j == MAX_RES) {179 //SvL: 30-10-'97, not found = custom resource type (correct?)180 id = NTRT_RCDATA;181 }182 else id = j;183 }184 else id = prde->u1.Id;185 186 prdType = (PIMAGE_RESOURCE_DIRECTORY)((DWORD)prdType ^ 0x80000000);187 188 if(id == NTRT_STRING) {189 //String tables can contain up to 16 individual resources!190 nCnt += prdType->NumberOfNamedEntries*16 + prdType->NumberOfIdEntries*16;191 }192 else {193 //Only icon groups are stored as resources in the LX file194 //Icon groups contain one or more icons195 if(id != NTRT_ICON)196 nCnt += prdType->NumberOfNamedEntries + prdType->NumberOfIdEntries;197 }198 prde++;199 }200 201 return nCnt;202 }203 147 /** Get Section Header for the given RVA - returns boolean according to the result 204 148 *
Note:
See TracChangeset
for help on using the changeset viewer.