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

Method Read

lib_fiber/cpp/src/detours/image.cpp:1023–1332  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1021}
1022
1023BOOL CImage::Read(HANDLE hFile)
1024{
1025 DWORD n;
1026 PBYTE pbData = NULL;
1027 DWORD cbData = 0;
1028
1029 if (hFile == INVALID_HANDLE_VALUE) {
1030 SetLastError(ERROR_INVALID_HANDLE);
1031 return FALSE;
1032 }
1033
1034 ///////////////////////////////////////////////////////// Create mapping.
1035 //
1036 m_nFileSize = GetFileSize(hFile, NULL);
1037 if (m_nFileSize == (DWORD)-1) {
1038 return FALSE;
1039 }
1040
1041 m_hMap = CreateFileMappingW(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
1042 if (m_hMap == NULL) {
1043 return FALSE;
1044 }
1045
1046 m_pMap = (PBYTE)MapViewOfFileEx(m_hMap, FILE_MAP_READ, 0, 0, 0, NULL);
1047 if (m_pMap == NULL) {
1048 return FALSE;
1049 }
1050
1051 ////////////////////////////////////////////////////// Process DOS Header.
1052 //
1053 PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)m_pMap;
1054 if (pDosHeader->e_magic != IMAGE_DOS_SIGNATURE) {
1055 SetLastError(ERROR_BAD_EXE_FORMAT);
1056 return FALSE;
1057 }
1058 m_nPeOffset = pDosHeader->e_lfanew;
1059 m_nPrePE = 0;
1060 m_cbPrePE = QuadAlign(pDosHeader->e_lfanew);
1061
1062 if (m_nPeOffset > m_nFileSize ||
1063 m_nPeOffset + sizeof(m_NtHeader) > m_nFileSize) {
1064
1065 SetLastError(ERROR_BAD_EXE_FORMAT);
1066 return FALSE;
1067 }
1068
1069 CopyMemory(&m_DosHeader, m_pMap + m_nPrePE, sizeof(m_DosHeader));
1070
1071 /////////////////////////////////////////////////////// Process PE Header.
1072 //
1073 CopyMemory(&m_NtHeader, m_pMap + m_nPeOffset, sizeof(m_NtHeader));
1074 if (m_NtHeader.Signature != IMAGE_NT_SIGNATURE) {
1075 SetLastError(ERROR_INVALID_EXE_SIGNATURE);
1076 return FALSE;
1077 }
1078 if (m_NtHeader.FileHeader.SizeOfOptionalHeader == 0) {
1079 SetLastError(ERROR_EXE_MARKED_INVALID);
1080 return FALSE;

Callers 1

DetourBinaryOpenFunction · 0.45

Calls 3

QuadAlignFunction · 0.85
DuplicateStringFunction · 0.85
MaxFunction · 0.85

Tested by

no test coverage detected