| 578 | } |
| 579 | |
| 580 | PBYTE CImageData::Set(REFGUID rguid, PBYTE pbData, DWORD cbData) |
| 581 | { |
| 582 | IsValid(); |
| 583 | Delete(rguid); |
| 584 | |
| 585 | DWORD cbAlloc = QuadAlign(cbData); |
| 586 | |
| 587 | if (!SizeTo(m_cbData + cbAlloc + sizeof(DETOUR_SECTION_RECORD))) { |
| 588 | return NULL; |
| 589 | } |
| 590 | |
| 591 | PDETOUR_SECTION_RECORD pRecord = (PDETOUR_SECTION_RECORD)(m_pbData + m_cbData); |
| 592 | pRecord->cbBytes = cbAlloc + sizeof(DETOUR_SECTION_RECORD); |
| 593 | pRecord->nReserved = 0; |
| 594 | pRecord->guid = rguid; |
| 595 | |
| 596 | PBYTE pbDest = (PBYTE)(pRecord + 1); |
| 597 | if (pbData) { |
| 598 | CopyMemory(pbDest, pbData, cbData); |
| 599 | if (cbData < cbAlloc) { |
| 600 | ZeroMemory(pbDest + cbData, cbAlloc - cbData); |
| 601 | } |
| 602 | } |
| 603 | else { |
| 604 | if (cbAlloc > 0) { |
| 605 | ZeroMemory(pbDest, cbAlloc); |
| 606 | } |
| 607 | } |
| 608 | |
| 609 | m_cbData += cbAlloc + sizeof(DETOUR_SECTION_RECORD); |
| 610 | |
| 611 | IsValid(); |
| 612 | return pbDest; |
| 613 | } |
| 614 | |
| 615 | ////////////////////////////////////////////////////////////////////////////// |
| 616 | // |