Changeset 2863 for trunk/src/kernel32/winimagepeldr.cpp
- Timestamp:
- Feb 23, 2000, 12:53:03 AM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/winimagepeldr.cpp
r2859 r2863 1 /* $Id: winimagepeldr.cpp,v 1.3 2 2000-02-22 19:12:53 sandervl Exp $ */1 /* $Id: winimagepeldr.cpp,v 1.33 2000-02-22 23:53:03 sandervl Exp $ */ 2 2 3 3 /* … … 19 19 * 20 20 */ 21 #define DEBUG22 21 #define INCL_DOSFILEMGR /* File Manager values */ 23 22 #define INCL_DOSMODULEMGR … … 570 569 APIRET rc; 571 570 572 rc = DosQueryMem((PVOID)virtAddress, &range, &attr);573 if(rc) {574 dprintf((LOG, "Win32PeLdrImage::commitPage: DosQueryMem for %x returned %d", virtAddress, rc));575 return FALSE;576 }577 if(attr & PAG_COMMIT) {578 dprintf((LOG, "Win32PeLdrImage::commitPage: Memory at 0x%x already committed!", virtAddress));579 return FALSE;580 }581 582 571 section = findSectionByOS2Addr(virtAddress); 583 572 if(section == NULL) { … … 587 576 section = findPreviousSectionByOS2Addr(virtAddress); 588 577 if(section == NULL) {//access to header 578 offset = 0; 589 579 fileoffset = virtAddress - realBaseAddress; 590 580 } 591 581 else { 592 offset = virtAddress - (section->realvirtaddr + section->virtualsize);582 offset = virtAddress - (section->realvirtaddr + section->virtualsize); 593 583 fileoffset = section->rawoffset + section->rawsize + offset; 594 584 } … … 598 588 offset = virtAddress - section->realvirtaddr; 599 589 sectionsize = section->virtualsize - offset; 590 600 591 if(offset > section->rawsize || section->type == SECTION_UNINITDATA) { 601 592 //unintialized data (set to 0) … … 612 603 } 613 604 } 605 //Check range of pages with the same attributes starting at virtAddress 606 //(some pages might already have been loaded) 607 range = sectionsize; 608 rc = DosQueryMem((PVOID)virtAddress, &range, &attr); 609 if(rc) { 610 dprintf((LOG, "Win32PeLdrImage::commitPage: DosQueryMem for %x returned %d", virtAddress, rc)); 611 return FALSE; 612 } 613 if(attr & PAG_COMMIT) { 614 dprintf((LOG, "Win32PeLdrImage::commitPage: Memory at 0x%x already committed!", virtAddress)); 615 return FALSE; 616 } 617 614 618 if(fPageCmd == SINGLE_PAGE) { 615 619 size = min(size, PAGE_SIZE); … … 782 786 realBaseAddress = 0; 783 787 784 #if 1785 788 //Allocated in peldr.dll 786 789 if(reservedMem && reservedMem == oh.ImageBase) { … … 788 791 return TRUE; 789 792 } 790 #else791 if(reservedMem && reservedMem <= oh.ImageBase &&792 ((oh.ImageBase - reservedMem) + imageSize < PELDR_RESERVEDMEMSIZE))793 {794 //ok, it fits perfectly; free it now and allocate it below795 DosFreeMem((PVOID)reservedMem);796 // realBaseAddress = oh.ImageBase;797 // return TRUE;798 }799 #endif800 793 801 794 //Reserve enough space to store 4096 pointers to 1MB memory chunks … … 903 896 904 897 virtAddress -= realBaseAddress; 905 898 //round size to next page boundary 899 size = (size-1) & ~0xFFF; 900 size += PAGE_SIZE; 901 906 902 if(prel) { 907 903 j = 1; … … 971 967 DosSetMem((PVOID)newpage, PAGE_SIZE, section->pageflags); 972 968 } 973 974 969 } 975 970 prel = (PIMAGE_BASE_RELOCATION)((char*)prel + prel->SizeOfBlock);
Note:
See TracChangeset
for help on using the changeset viewer.