Changeset 1879 for trunk/src/kernel32/winimgres.cpp
- Timestamp:
- Nov 29, 1999, 9:43:02 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/winimgres.cpp
r1872 r1879 1 /* $Id: winimgres.cpp,v 1.2 7 1999-11-29 00:04:07 birdExp $ */1 /* $Id: winimgres.cpp,v 1.28 1999-11-29 20:43:02 sandervl Exp $ */ 2 2 3 3 /* … … 270 270 //for the resource section (images loaded by the pe.exe and pe2lx/win32k) 271 271 //For LX images, this is 0 as OffsetToData contains a relative offset 272 char *resdata = (char *)((char *)pResDir + pData->OffsetToData - ulRVAResourceSection);272 char *resdata = (char *)((char *)pResDir + (pData->OffsetToData - ulRVAResourceSection)); 273 273 res = new Win32Resource(this, id, type, pData->Size, resdata); 274 274 … … 299 299 return(hres); 300 300 } 301 //******************************************************************************302 //TODO:303 //******************************************************************************304 #if 0305 ULONG Win32Pe2LxImage::getResourceSizeA(LPCSTR lpszName, LPSTR lpszType, ULONG lang)306 {307 DebugInt3();308 return 0;309 }310 #endif311 301 //****************************************************************************** 312 302 //****************************************************************************** … … 356 346 if(getVersionId() == -1) { 357 347 dprintf(("GetVersionStruct: %s has no version resource!\n", szModule)); 348 SetLastError(ERROR_RESOURCE_DATA_NOT_FOUND); 358 349 return(FALSE); 359 350 } … … 380 371 if(pData == NULL) { 381 372 dprintf(("Win32PeLdrImage::getVersionStruct: couldn't find version resource!")); 373 SetLastError(ERROR_RESOURCE_DATA_NOT_FOUND); 382 374 return 0; 383 375 } … … 432 424 if (pResDir == NULL) 433 425 { 434 /* SetLastError(?);? */426 SetLastError(ERROR_RESOURCE_DATA_NOT_FOUND); 435 427 return FALSE; 436 428 } … … 702 694 return pResDirRet; 703 695 } 704 696 //****************************************************************************** 697 //****************************************************************************** 698 BOOL Win32ImageBase::enumResourceTypesA(HMODULE hmod, ENUMRESTYPEPROCA lpEnumFunc, 699 LONG lParam) 700 { 701 PIMAGE_RESOURCE_DIRECTORY prdType; 702 PIMAGE_RESOURCE_DIRECTORY_ENTRY prde; 703 PIMAGE_RESOURCE_DIR_STRING_U pstring; 704 ULONG i, nameOffset; 705 BOOL fRet; 706 707 if (pResDir == NULL) 708 { 709 SetLastError(ERROR_RESOURCE_DATA_NOT_FOUND); 710 return FALSE; 711 } 712 713 if ((unsigned)lpEnumFunc < 0x10000 || (unsigned)lpEnumFunc >= 0xc0000000) 714 { 715 SetLastError(ERROR_NOACCESS); 716 return FALSE; 717 } 718 719 //reminder: 720 //1st level -> types 721 //2nd level -> names 722 //3rd level -> language 723 724 /* set pointer to first resource type entry */ 725 prde = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)((ULONG)pResDir + sizeof(IMAGE_RESOURCE_DIRECTORY)); 726 727 for (i=0; i<pResDir->NumberOfNamedEntries+pResDir->NumberOfIdEntries && fRet; i++) 728 { 729 /* locate directory or each resource type */ 730 prdType = (PIMAGE_RESOURCE_DIRECTORY)((int)pResDir + (int)prde->u2.OffsetToData); 731 732 if (prde->u1.s.NameIsString) 733 {//name or id entry? 734 //SvL: 30-10-'97, high bit is set, so clear to get real offset 735 nameOffset = prde->u1.Name & ~0x80000000; 736 737 pstring = (PIMAGE_RESOURCE_DIR_STRING_U)((ULONG)pResDir + nameOffset); 738 char *typename = (char *)malloc(pstring->Length+1); 739 lstrcpynWtoA(typename, pstring->NameString, pstring->Length+1); 740 typename[pstring->Length] = 0; 741 742 fRet = lpEnumFunc(hmod, typename, lParam); 743 free(typename); 744 } 745 else { 746 fRet = lpEnumFunc(hmod, (LPSTR)prde->u1.Id, lParam); 747 } 748 749 /* increment to next entry */ 750 prde++; 751 } 752 return fRet > 0 ? TRUE : FALSE; 753 } 754 //****************************************************************************** 755 //****************************************************************************** 756 BOOL Win32ImageBase::enumResourceTypesW(HMODULE hmod, ENUMRESTYPEPROCW lpEnumFunc, 757 LONG lParam) 758 { 759 PIMAGE_RESOURCE_DIRECTORY prdType; 760 PIMAGE_RESOURCE_DIRECTORY_ENTRY prde; 761 PIMAGE_RESOURCE_DIR_STRING_U pstring; 762 ULONG i, nameOffset; 763 BOOL fRet; 764 765 if (pResDir == NULL) 766 { 767 SetLastError(ERROR_RESOURCE_DATA_NOT_FOUND); 768 return FALSE; 769 } 770 771 if ((unsigned)lpEnumFunc < 0x10000 || (unsigned)lpEnumFunc >= 0xc0000000) 772 { 773 SetLastError(ERROR_NOACCESS); 774 return FALSE; 775 } 776 777 //reminder: 778 //1st level -> types 779 //2nd level -> names 780 //3rd level -> language 781 782 /* set pointer to first resource type entry */ 783 prde = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)((ULONG)pResDir + sizeof(IMAGE_RESOURCE_DIRECTORY)); 784 785 for (i=0; i<pResDir->NumberOfNamedEntries+pResDir->NumberOfIdEntries && fRet; i++) 786 { 787 /* locate directory or each resource type */ 788 prdType = (PIMAGE_RESOURCE_DIRECTORY)((int)pResDir + (int)prde->u2.OffsetToData); 789 790 if (prde->u1.s.NameIsString) 791 {//name or id entry? 792 //SvL: 30-10-'97, high bit is set, so clear to get real offset 793 nameOffset = prde->u1.Name & ~0x80000000; 794 795 pstring = (PIMAGE_RESOURCE_DIR_STRING_U)((ULONG)pResDir + nameOffset); 796 fRet = lpEnumFunc(hmod, pstring->NameString, lParam); 797 } 798 else fRet = lpEnumFunc(hmod, (LPWSTR)prde->u1.Id, lParam); 799 800 /* increment to next entry */ 801 prde++; 802 } 803 return fRet > 0 ? TRUE : FALSE; 804 } 805 //****************************************************************************** 806 //******************************************************************************
Note:
See TracChangeset
for help on using the changeset viewer.