Ignore:
Timestamp:
Nov 22, 1999, 9:35:52 PM (26 years ago)
Author:
sandervl
Message:

Rewrite of PE loader code, EB's fixes + VirtualProtect bugfix

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 $ */
    22
    33/*
     
    1212#include <string.h>
    1313#include <stdlib.h>
    14 #ifdef __WATCOMC__
    15 #include <mem.h>
    16 #endif
    1714#include <win32type.h>
    1815#include <pefile.h>
     
    7370    }
    7471
    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);
    7773}
    7874//******************************************************************************
     
    149145    return FALSE;
    150146}
    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)ImageDirectoryOffset
    161                     (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 offset
    172                 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 length
    175                         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 file
    194                 //Icon groups contain one or more icons
    195                 if(id != NTRT_ICON)
    196                         nCnt += prdType->NumberOfNamedEntries + prdType->NumberOfIdEntries;
    197         }       
    198         prde++;
    199     }
    200 
    201     return nCnt;
    202 }
    203147/** Get Section Header for the given RVA - returns boolean according to the result
    204148 *
Note: See TracChangeset for help on using the changeset viewer.