Changeset 3571 for trunk/kStuff/kLdr
- Timestamp:
- Aug 31, 2007, 4:39:26 AM (18 years ago)
- Location:
- trunk/kStuff/kLdr
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kStuff/kLdr/kLdrHlp.h
r3567 r3571 178 178 void kldrHlpSemRelease(void); 179 179 180 int kldrHlpPageAlloc(void **ppv, KSIZE cb, K LDRPROT enmProt, unsigned fFixed);181 int kldrHlpPageProtect(void *pv, KSIZE cb, K LDRPROT enmProt);180 int kldrHlpPageAlloc(void **ppv, KSIZE cb, KPROT enmProt, unsigned fFixed); 181 int kldrHlpPageProtect(void *pv, KSIZE cb, KPROT enmProt); 182 182 int kldrHlpPageFree(void *pv, KSIZE cb); 183 183 -
trunk/kStuff/kLdr/kLdrHlpMem.c
r3570 r3571 64 64 65 65 #ifdef __OS2__ 66 static ULONG kldrHlpPageProtToNative(K LDRPROT enmProt)66 static ULONG kldrHlpPageProtToNative(KPROT enmProt) 67 67 { 68 68 switch (enmProt) 69 69 { 70 case K LDRPROT_NOACCESS: return PAG_EXECUTE | PAG_READ | PAG_WRITE;71 case K LDRPROT_READONLY: return PAG_COMMIT | PAG_READ;72 case K LDRPROT_READWRITE: return PAG_COMMIT | PAG_READ | PAG_WRITE;73 case K LDRPROT_EXECUTE: return PAG_COMMIT | PAG_EXECUTE;74 case K LDRPROT_EXECUTE_READ: return PAG_COMMIT | PAG_EXECUTE | PAG_READ;75 case K LDRPROT_EXECUTE_READWRITE: return PAG_COMMIT | PAG_EXECUTE | PAG_READ | PAG_WRITE;70 case KPROT_NOACCESS: return PAG_EXECUTE | PAG_READ | PAG_WRITE; 71 case KPROT_READONLY: return PAG_COMMIT | PAG_READ; 72 case KPROT_READWRITE: return PAG_COMMIT | PAG_READ | PAG_WRITE; 73 case KPROT_EXECUTE: return PAG_COMMIT | PAG_EXECUTE; 74 case KPROT_EXECUTE_READ: return PAG_COMMIT | PAG_EXECUTE | PAG_READ; 75 case KPROT_EXECUTE_READWRITE: return PAG_COMMIT | PAG_EXECUTE | PAG_READ | PAG_WRITE; 76 76 default: 77 77 kldrHlpAssert(0); … … 80 80 } 81 81 #elif defined(__WIN__) 82 static DWORD kldrHlpPageProtToNative(K LDRPROT enmProt)82 static DWORD kldrHlpPageProtToNative(KPROT enmProt) 83 83 { 84 84 switch (enmProt) 85 85 { 86 case K LDRPROT_NOACCESS: return PAGE_NOACCESS;87 case K LDRPROT_READONLY: return PAGE_READONLY;88 case K LDRPROT_READWRITE: return PAGE_READWRITE;89 case K LDRPROT_EXECUTE: return PAGE_EXECUTE;90 case K LDRPROT_EXECUTE_READ: return PAGE_EXECUTE_READ;91 case K LDRPROT_EXECUTE_READWRITE: return PAGE_EXECUTE_READWRITE;86 case KPROT_NOACCESS: return PAGE_NOACCESS; 87 case KPROT_READONLY: return PAGE_READONLY; 88 case KPROT_READWRITE: return PAGE_READWRITE; 89 case KPROT_EXECUTE: return PAGE_EXECUTE; 90 case KPROT_EXECUTE_READ: return PAGE_EXECUTE_READ; 91 case KPROT_EXECUTE_READWRITE: return PAGE_EXECUTE_READWRITE; 92 92 default: 93 93 kldrHlpAssert(0); … … 107 107 * @param enmProt The new protection. Copy-on-write is invalid. 108 108 */ 109 int kldrHlpPageAlloc(void **ppv, KSIZE cb, K LDRPROT enmProt, unsigned fFixed)109 int kldrHlpPageAlloc(void **ppv, KSIZE cb, KPROT enmProt, unsigned fFixed) 110 110 { 111 111 #ifdef __OS2__ … … 162 162 * @param enmProt The new protection. Copy-on-write is invalid. 163 163 */ 164 int kldrHlpPageProtect(void *pv, KSIZE cb, K LDRPROT enmProt)164 int kldrHlpPageProtect(void *pv, KSIZE cb, KPROT enmProt) 165 165 { 166 166 #ifdef __OS2__ -
trunk/kStuff/kLdr/kLdrModLX.c
r3570 r3571 470 470 case 0: 471 471 case OBJSHARED: 472 pMod->aSegments[i].enmProt = K LDRPROT_NOACCESS;472 pMod->aSegments[i].enmProt = KPROT_NOACCESS; 473 473 break; 474 474 case OBJREAD: 475 475 case OBJREAD | OBJSHARED: 476 pMod->aSegments[i].enmProt = K LDRPROT_READONLY;476 pMod->aSegments[i].enmProt = KPROT_READONLY; 477 477 break; 478 478 case OBJWRITE: 479 479 case OBJWRITE | OBJREAD: 480 pMod->aSegments[i].enmProt = K LDRPROT_WRITECOPY;480 pMod->aSegments[i].enmProt = KPROT_WRITECOPY; 481 481 break; 482 482 case OBJWRITE | OBJSHARED: 483 483 case OBJWRITE | OBJSHARED | OBJREAD: 484 pMod->aSegments[i].enmProt = K LDRPROT_READWRITE;484 pMod->aSegments[i].enmProt = KPROT_READWRITE; 485 485 break; 486 486 case OBJEXEC: 487 487 case OBJEXEC | OBJSHARED: 488 pMod->aSegments[i].enmProt = K LDRPROT_EXECUTE;488 pMod->aSegments[i].enmProt = KPROT_EXECUTE; 489 489 break; 490 490 case OBJEXEC | OBJREAD: 491 491 case OBJEXEC | OBJREAD | OBJSHARED: 492 pMod->aSegments[i].enmProt = K LDRPROT_EXECUTE_READ;492 pMod->aSegments[i].enmProt = KPROT_EXECUTE_READ; 493 493 break; 494 494 case OBJEXEC | OBJWRITE: 495 495 case OBJEXEC | OBJWRITE | OBJREAD: 496 pMod->aSegments[i].enmProt = K LDRPROT_EXECUTE_WRITECOPY;496 pMod->aSegments[i].enmProt = KPROT_EXECUTE_WRITECOPY; 497 497 break; 498 498 case OBJEXEC | OBJWRITE | OBJSHARED: 499 499 case OBJEXEC | OBJWRITE | OBJSHARED | OBJREAD: 500 pMod->aSegments[i].enmProt = K LDRPROT_EXECUTE_READWRITE;500 pMod->aSegments[i].enmProt = KPROT_EXECUTE_READWRITE; 501 501 break; 502 502 } 503 503 if ((pModLX->paObjs[i].o32_flags & (OBJREAD | OBJWRITE | OBJEXEC | OBJRSRC)) == OBJRSRC) 504 pMod->aSegments[i].enmProt = K LDRPROT_READONLY;504 pMod->aSegments[i].enmProt = KPROT_READONLY; 505 505 /*pMod->aSegments[i].f16bit = !(pModLX->paObjs[i].o32_flags & OBJBIGDEF) 506 506 pMod->aSegments[i].fIOPL = !(pModLX->paObjs[i].o32_flags & OBJIOPL) … … 1345 1345 return KLDR_ERR_ADDRESS_OVERFLOW; 1346 1346 } 1347 rc = kldrHlpPageAlloc(&pvBase, pModLX->cbMapped, K LDRPROT_EXECUTE_READWRITE, fFixed);1347 rc = kldrHlpPageAlloc(&pvBase, pModLX->cbMapped, KPROT_EXECUTE_READWRITE, fFixed); 1348 1348 if (rc) 1349 1349 return rc; … … 1829 1829 int rc; 1830 1830 void *pv; 1831 K LDRPROT enmProt;1831 KPROT enmProt; 1832 1832 1833 1833 /* calc new protection. */ … … 1837 1837 switch (enmProt) 1838 1838 { 1839 case K LDRPROT_NOACCESS:1840 case K LDRPROT_READONLY:1841 case K LDRPROT_READWRITE:1842 case K LDRPROT_WRITECOPY:1843 enmProt = K LDRPROT_READWRITE;1839 case KPROT_NOACCESS: 1840 case KPROT_READONLY: 1841 case KPROT_READWRITE: 1842 case KPROT_WRITECOPY: 1843 enmProt = KPROT_READWRITE; 1844 1844 break; 1845 case K LDRPROT_EXECUTE:1846 case K LDRPROT_EXECUTE_READ:1847 case K LDRPROT_EXECUTE_READWRITE:1848 case K LDRPROT_EXECUTE_WRITECOPY:1849 enmProt = K LDRPROT_EXECUTE_READWRITE;1845 case KPROT_EXECUTE: 1846 case KPROT_EXECUTE_READ: 1847 case KPROT_EXECUTE_READWRITE: 1848 case KPROT_EXECUTE_WRITECOPY: 1849 enmProt = KPROT_EXECUTE_READWRITE; 1850 1850 break; 1851 1851 default: … … 1857 1857 { 1858 1858 /* copy on write -> normal write. */ 1859 if (enmProt == K LDRPROT_EXECUTE_WRITECOPY)1860 enmProt = K LDRPROT_EXECUTE_READWRITE;1861 else if (enmProt == K LDRPROT_WRITECOPY)1862 enmProt = K LDRPROT_READWRITE;1859 if (enmProt == KPROT_EXECUTE_WRITECOPY) 1860 enmProt = KPROT_EXECUTE_READWRITE; 1861 else if (enmProt == KPROT_WRITECOPY) 1862 enmProt = KPROT_READWRITE; 1863 1863 } 1864 1864 -
trunk/kStuff/kLdr/kLdrModMachO.c
r3570 r3571 874 874 pSeg->Sel16bit = 0; 875 875 pSeg->fFlags = 0; 876 pSeg->enmProt = K LDRPROT_EXECUTE_WRITECOPY; /** @todo fixme! */876 pSeg->enmProt = KPROT_EXECUTE_WRITECOPY; /** @todo fixme! */ 877 877 pSeg->cb = pSect->size; 878 878 pSeg->Alignment = (1 << pSect->align); -
trunk/kStuff/kLdr/kLdrModNative.c
r3570 r3571 349 349 pMod->aSegments[0].pchName = "fake"; 350 350 pMod->aSegments[0].cchName = sizeof("fake") - 1; 351 pMod->aSegments[0].enmProt = K LDRPROT_NOACCESS;351 pMod->aSegments[0].enmProt = KPROT_NOACCESS; 352 352 pMod->aSegments[0].cb = 0; 353 353 pMod->aSegments[0].Alignment = 0; … … 377 377 pMod->aSegments[0].pchName = "TheHeaders"; 378 378 pMod->aSegments[0].cchName = sizeof("TheHeaders") - 1; 379 pMod->aSegments[0].enmProt = K LDRPROT_READONLY;379 pMod->aSegments[0].enmProt = KPROT_READONLY; 380 380 pMod->aSegments[0].cb = pNtHdrs->OptionalHeader.SizeOfHeaders; 381 381 pMod->aSegments[0].Alignment = pNtHdrs->OptionalHeader.SectionAlignment; … … 440 440 case 0: 441 441 case IMAGE_SCN_MEM_SHARED: 442 pMod->aSegments[i + 1].enmProt = K LDRPROT_NOACCESS;442 pMod->aSegments[i + 1].enmProt = KPROT_NOACCESS; 443 443 break; 444 444 case IMAGE_SCN_MEM_READ: 445 445 case IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_SHARED: 446 pMod->aSegments[i + 1].enmProt = K LDRPROT_READONLY;446 pMod->aSegments[i + 1].enmProt = KPROT_READONLY; 447 447 break; 448 448 case IMAGE_SCN_MEM_WRITE: 449 449 case IMAGE_SCN_MEM_WRITE | IMAGE_SCN_MEM_READ: 450 pMod->aSegments[i + 1].enmProt = K LDRPROT_WRITECOPY;450 pMod->aSegments[i + 1].enmProt = KPROT_WRITECOPY; 451 451 break; 452 452 case IMAGE_SCN_MEM_WRITE | IMAGE_SCN_MEM_SHARED: 453 453 case IMAGE_SCN_MEM_WRITE | IMAGE_SCN_MEM_SHARED | IMAGE_SCN_MEM_READ: 454 pMod->aSegments[i + 1].enmProt = K LDRPROT_READWRITE;454 pMod->aSegments[i + 1].enmProt = KPROT_READWRITE; 455 455 break; 456 456 case IMAGE_SCN_MEM_EXECUTE: 457 457 case IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_SHARED: 458 pMod->aSegments[i + 1].enmProt = K LDRPROT_EXECUTE;458 pMod->aSegments[i + 1].enmProt = KPROT_EXECUTE; 459 459 break; 460 460 case IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_READ: 461 461 case IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_SHARED: 462 pMod->aSegments[i + 1].enmProt = K LDRPROT_EXECUTE_READ;462 pMod->aSegments[i + 1].enmProt = KPROT_EXECUTE_READ; 463 463 break; 464 464 case IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_WRITE: 465 465 case IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_WRITE | IMAGE_SCN_MEM_READ: 466 pMod->aSegments[i + 1].enmProt = K LDRPROT_EXECUTE_WRITECOPY;466 pMod->aSegments[i + 1].enmProt = KPROT_EXECUTE_WRITECOPY; 467 467 break; 468 468 case IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_WRITE | IMAGE_SCN_MEM_SHARED: 469 469 case IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_WRITE | IMAGE_SCN_MEM_SHARED | IMAGE_SCN_MEM_READ: 470 pMod->aSegments[i + 1].enmProt = K LDRPROT_EXECUTE_READWRITE;470 pMod->aSegments[i + 1].enmProt = KPROT_EXECUTE_READWRITE; 471 471 break; 472 472 } -
trunk/kStuff/kLdr/kLdrModPE.c
r3570 r3571 292 292 pMod->aSegments[0].pchName = "TheHeaders"; 293 293 pMod->aSegments[0].cchName = sizeof("TheHeaders") - 1; 294 pMod->aSegments[0].enmProt = K LDRPROT_READONLY;294 pMod->aSegments[0].enmProt = KPROT_READONLY; 295 295 pMod->aSegments[0].cb = pModPE->Hdrs.OptionalHeader.SizeOfHeaders; 296 296 pMod->aSegments[0].Alignment = pModPE->Hdrs.OptionalHeader.SectionAlignment; … … 358 358 case 0: 359 359 case IMAGE_SCN_MEM_SHARED: 360 pMod->aSegments[i + 1].enmProt = K LDRPROT_NOACCESS;360 pMod->aSegments[i + 1].enmProt = KPROT_NOACCESS; 361 361 break; 362 362 case IMAGE_SCN_MEM_READ: 363 363 case IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_SHARED: 364 pMod->aSegments[i + 1].enmProt = K LDRPROT_READONLY;364 pMod->aSegments[i + 1].enmProt = KPROT_READONLY; 365 365 break; 366 366 case IMAGE_SCN_MEM_WRITE: 367 367 case IMAGE_SCN_MEM_WRITE | IMAGE_SCN_MEM_READ: 368 pMod->aSegments[i + 1].enmProt = K LDRPROT_WRITECOPY;368 pMod->aSegments[i + 1].enmProt = KPROT_WRITECOPY; 369 369 break; 370 370 case IMAGE_SCN_MEM_WRITE | IMAGE_SCN_MEM_SHARED: 371 371 case IMAGE_SCN_MEM_WRITE | IMAGE_SCN_MEM_SHARED | IMAGE_SCN_MEM_READ: 372 pMod->aSegments[i + 1].enmProt = K LDRPROT_READWRITE;372 pMod->aSegments[i + 1].enmProt = KPROT_READWRITE; 373 373 break; 374 374 case IMAGE_SCN_MEM_EXECUTE: 375 375 case IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_SHARED: 376 pMod->aSegments[i + 1].enmProt = K LDRPROT_EXECUTE;376 pMod->aSegments[i + 1].enmProt = KPROT_EXECUTE; 377 377 break; 378 378 case IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_READ: 379 379 case IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_SHARED: 380 pMod->aSegments[i + 1].enmProt = K LDRPROT_EXECUTE_READ;380 pMod->aSegments[i + 1].enmProt = KPROT_EXECUTE_READ; 381 381 break; 382 382 case IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_WRITE: 383 383 case IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_WRITE | IMAGE_SCN_MEM_READ: 384 pMod->aSegments[i + 1].enmProt = K LDRPROT_EXECUTE_WRITECOPY;384 pMod->aSegments[i + 1].enmProt = KPROT_EXECUTE_WRITECOPY; 385 385 break; 386 386 case IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_WRITE | IMAGE_SCN_MEM_SHARED: 387 387 case IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_WRITE | IMAGE_SCN_MEM_SHARED | IMAGE_SCN_MEM_READ: 388 pMod->aSegments[i + 1].enmProt = K LDRPROT_EXECUTE_READWRITE;388 pMod->aSegments[i + 1].enmProt = KPROT_EXECUTE_READWRITE; 389 389 break; 390 390 } -
trunk/kStuff/kLdr/kLdrRdrFile.c
r3570 r3571 279 279 * @param enmProt kLdr protection. 280 280 */ 281 static ULONG kldrRdrFileGetNtMapProt(K LDRPROT enmProt)281 static ULONG kldrRdrFileGetNtMapProt(KPROT enmProt) 282 282 { 283 283 switch (enmProt) 284 284 { 285 case K LDRPROT_NOACCESS: return PAGE_NOACCESS;286 case K LDRPROT_READONLY: return PAGE_READONLY;287 case K LDRPROT_READWRITE: return PAGE_READWRITE;288 case K LDRPROT_WRITECOPY: return PAGE_WRITECOPY;289 case K LDRPROT_EXECUTE: return PAGE_EXECUTE;290 case K LDRPROT_EXECUTE_READ: return PAGE_EXECUTE_READ;291 case K LDRPROT_EXECUTE_READWRITE: return PAGE_EXECUTE_READWRITE;292 case K LDRPROT_EXECUTE_WRITECOPY: return PAGE_EXECUTE_WRITECOPY;285 case KPROT_NOACCESS: return PAGE_NOACCESS; 286 case KPROT_READONLY: return PAGE_READONLY; 287 case KPROT_READWRITE: return PAGE_READWRITE; 288 case KPROT_WRITECOPY: return PAGE_WRITECOPY; 289 case KPROT_EXECUTE: return PAGE_EXECUTE; 290 case KPROT_EXECUTE_READ: return PAGE_EXECUTE_READ; 291 case KPROT_EXECUTE_READWRITE: return PAGE_EXECUTE_READWRITE; 292 case KPROT_EXECUTE_WRITECOPY: return PAGE_EXECUTE_WRITECOPY; 293 293 default: return ~(ULONG)0; 294 294 } … … 302 302 * @param enmProt kLdr protection. 303 303 */ 304 static ULONG kldrRdrFileGetNtAllocProt(K LDRPROT enmProt)304 static ULONG kldrRdrFileGetNtAllocProt(KPROT enmProt) 305 305 { 306 306 switch (enmProt) 307 307 { 308 case K LDRPROT_NOACCESS: return PAGE_NOACCESS;309 case K LDRPROT_READONLY: return PAGE_READONLY;310 case K LDRPROT_WRITECOPY:311 case K LDRPROT_READWRITE: return PAGE_READWRITE;312 case K LDRPROT_EXECUTE: return PAGE_EXECUTE;313 case K LDRPROT_EXECUTE_READ: return PAGE_EXECUTE_READ;314 case K LDRPROT_EXECUTE_WRITECOPY:315 case K LDRPROT_EXECUTE_READWRITE: return PAGE_EXECUTE_READWRITE;308 case KPROT_NOACCESS: return PAGE_NOACCESS; 309 case KPROT_READONLY: return PAGE_READONLY; 310 case KPROT_WRITECOPY: 311 case KPROT_READWRITE: return PAGE_READWRITE; 312 case KPROT_EXECUTE: return PAGE_EXECUTE; 313 case KPROT_EXECUTE_READ: return PAGE_EXECUTE_READ; 314 case KPROT_EXECUTE_WRITECOPY: 315 case KPROT_EXECUTE_READWRITE: return PAGE_EXECUTE_READWRITE; 316 316 default: return ~(ULONG)0; 317 317 } … … 413 413 int rc; 414 414 void *pv; 415 K LDRPROT enmProt;415 KPROT enmProt; 416 416 417 417 if (paSegments[i].RVA == NIL_KLDRADDR) … … 424 424 switch (enmProt) 425 425 { 426 case K LDRPROT_NOACCESS:427 case K LDRPROT_READONLY:428 case K LDRPROT_READWRITE:429 case K LDRPROT_WRITECOPY:430 enmProt = K LDRPROT_READWRITE;426 case KPROT_NOACCESS: 427 case KPROT_READONLY: 428 case KPROT_READWRITE: 429 case KPROT_WRITECOPY: 430 enmProt = KPROT_READWRITE; 431 431 break; 432 case K LDRPROT_EXECUTE:433 case K LDRPROT_EXECUTE_READ:434 case K LDRPROT_EXECUTE_READWRITE:435 case K LDRPROT_EXECUTE_WRITECOPY:436 enmProt = K LDRPROT_EXECUTE_READWRITE;432 case KPROT_EXECUTE: 433 case KPROT_EXECUTE_READ: 434 case KPROT_EXECUTE_READWRITE: 435 case KPROT_EXECUTE_WRITECOPY: 436 enmProt = KPROT_EXECUTE_READWRITE; 437 437 break; 438 438 default: … … 444 444 { 445 445 /* copy on write -> normal write. */ 446 if (enmProt == K LDRPROT_EXECUTE_WRITECOPY)447 enmProt = K LDRPROT_EXECUTE_READWRITE;448 else if (enmProt == K LDRPROT_WRITECOPY)449 enmProt = K LDRPROT_READWRITE;446 if (enmProt == KPROT_EXECUTE_WRITECOPY) 447 enmProt = KPROT_EXECUTE_READWRITE; 448 else if (enmProt == KPROT_WRITECOPY) 449 enmProt = KPROT_READWRITE; 450 450 } 451 451 … … 771 771 * Generic mapping code using kldrHlpPageAlloc(), kldrHlpPageFree() and kldrHlpPageProtect(). 772 772 */ 773 rc = kldrHlpPageAlloc(&pPrep->pv, pPrep->cb, K LDRPROT_EXECUTE_READWRITE, fFixed);773 rc = kldrHlpPageAlloc(&pPrep->pv, pPrep->cb, KPROT_EXECUTE_READWRITE, fFixed); 774 774 if (rc) 775 775 return rc; -
trunk/kStuff/kLdr/tstkLdrMod.c
r3570 r3571 441 441 if (pMod->aSegments[i].pvUser != NULL) 442 442 return Failure("Bad pvUser"); 443 if (pMod->aSegments[i].enmProt >= K LDRPROT_END || pMod->aSegments[i].enmProt <= KLDRPROT_INVALID)443 if (pMod->aSegments[i].enmProt >= KPROT_END || pMod->aSegments[i].enmProt <= KPROT_INVALID) 444 444 return Failure("Bad enmProt"); 445 445 if (pMod->aSegments[i].MapAddress != 0)
Note:
See TracChangeset
for help on using the changeset viewer.