MCPcopy Create free account
hub / github.com/acl-dev/acl / Write

Method Write

lib_fiber/cpp/src/detours/image.cpp:1598–2027  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1596}
1597
1598BOOL CImage::Write(HANDLE hFile)
1599{
1600 DWORD cbDone;
1601
1602 if (hFile == INVALID_HANDLE_VALUE) {
1603 SetLastError(ERROR_INVALID_HANDLE);
1604 return FALSE;
1605 }
1606
1607 m_nNextFileAddr = 0;
1608 m_nNextVirtAddr = 0;
1609
1610 DWORD nTables = 0;
1611 DWORD nThunks = 0;
1612 DWORD nChars = 0;
1613 BOOL fNeedDetourSection = CheckImportsNeeded(&nTables, &nThunks, &nChars);
1614
1615 //////////////////////////////////////////////////////////// Copy Headers.
1616 //
1617 if (SetFilePointer(hFile, 0, NULL, FILE_BEGIN) == ~0u) {
1618 return FALSE;
1619 }
1620 if (!CopyFileData(hFile, 0, m_NtHeader.OptionalHeader.SizeOfHeaders)) {
1621 return FALSE;
1622 }
1623
1624 if (fNeedDetourSection || !m_pImageData->IsEmpty()) {
1625 // Replace the file's DOS header with our own.
1626 m_nPeOffset = sizeof(m_DosHeader) + sizeof(s_rbDosCode);
1627 m_nSectionsOffset = m_nPeOffset
1628 + sizeof(m_NtHeader.Signature)
1629 + sizeof(m_NtHeader.FileHeader)
1630 + m_NtHeader.FileHeader.SizeOfOptionalHeader;
1631 m_DosHeader.e_lfanew = m_nPeOffset;
1632
1633 if (SetFilePointer(hFile, 0, NULL, FILE_BEGIN) == ~0u) {
1634 return FALSE;
1635 }
1636 if (!WriteFile(hFile, &m_DosHeader, sizeof(m_DosHeader), &cbDone)) {
1637 return FALSE;
1638 }
1639 if (!WriteFile(hFile, &s_rbDosCode, sizeof(s_rbDosCode), &cbDone)) {
1640 return FALSE;
1641 }
1642 }
1643 else {
1644 // Restore the file's original DOS header.
1645 if (m_nPrePE != 0) {
1646 m_nPeOffset = m_cbPrePE;
1647 m_nSectionsOffset = m_nPeOffset
1648 + sizeof(m_NtHeader.Signature)
1649 + sizeof(m_NtHeader.FileHeader)
1650 + m_NtHeader.FileHeader.SizeOfOptionalHeader;
1651 m_DosHeader.e_lfanew = m_nPeOffset;
1652
1653
1654 if (SetFilePointer(hFile, 0, NULL, FILE_BEGIN) == ~0u) {
1655 return FALSE;

Callers 1

DetourBinaryWriteFunction · 0.45

Calls 6

MaxFunction · 0.85
StringCchCopyAFunction · 0.85
QuadAlignFunction · 0.85
IsEmptyMethod · 0.80
CurrentMethod · 0.80
AllocateMethod · 0.45

Tested by

no test coverage detected