4 * Copyright 1998 Patrik Stridvall
10 #include "debugtools.h"
13 DEFAULT_DEBUG_CHANNEL(imagehlp
);
15 static WORD
CalcCheckSum(DWORD StartValue
, LPVOID BaseAddress
, DWORD WordCount
);
18 /***********************************************************************
19 * BindImage (IMAGEHLP.@)
21 BOOL WINAPI
BindImage(
22 LPSTR ImageName
, LPSTR DllPath
, LPSTR SymbolPath
)
24 return BindImageEx(0, ImageName
, DllPath
, SymbolPath
, NULL
);
27 /***********************************************************************
28 * BindImageEx (IMAGEHLP.@)
30 BOOL WINAPI
BindImageEx(
31 DWORD Flags
, LPSTR ImageName
, LPSTR DllPath
, LPSTR SymbolPath
,
32 PIMAGEHLP_STATUS_ROUTINE StatusRoutine
)
34 FIXME("(%ld, %s, %s, %s, %p): stub\n",
35 Flags
, debugstr_a(ImageName
), debugstr_a(DllPath
),
36 debugstr_a(SymbolPath
), StatusRoutine
38 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
43 /***********************************************************************
46 static WORD
CalcCheckSum(
47 DWORD StartValue
, LPVOID BaseAddress
, DWORD WordCount
)
54 Ptr
= (LPWORD
)BaseAddress
;
55 for (i
= 0; i
< WordCount
; i
++)
60 Sum
= LOWORD(Sum
) + HIWORD(Sum
);
65 return (WORD
)(LOWORD(Sum
) + HIWORD(Sum
));
69 /***********************************************************************
70 * CheckSumMappedFile (IMAGEHLP.@)
72 PIMAGE_NT_HEADERS WINAPI
CheckSumMappedFile(
73 LPVOID BaseAddress
, DWORD FileLength
,
74 LPDWORD HeaderSum
, LPDWORD CheckSum
)
76 PIMAGE_NT_HEADERS Header
;
80 FIXME("(%p, %ld, %p, %p): stub\n",
81 BaseAddress
, FileLength
, HeaderSum
, CheckSum
84 CalcSum
= (DWORD
)CalcCheckSum(0,
86 (FileLength
+ 1) / sizeof(WORD
));
88 Header
= ImageNtHeader(BaseAddress
);
89 HdrSum
= Header
->OptionalHeader
.CheckSum
;
91 /* Subtract image checksum from calculated checksum. */
92 /* fix low word of checksum */
93 if (LOWORD(CalcSum
) >= LOWORD(HdrSum
))
95 CalcSum
-= LOWORD(HdrSum
);
99 CalcSum
= ((LOWORD(CalcSum
) - LOWORD(HdrSum
)) & 0xFFFF) - 1;
102 /* fix high word of checksum */
103 if (LOWORD(CalcSum
) >= HIWORD(HdrSum
))
105 CalcSum
-= HIWORD(HdrSum
);
109 CalcSum
= ((LOWORD(CalcSum
) - HIWORD(HdrSum
)) & 0xFFFF) - 1;
112 /* add file length */
113 CalcSum
+= FileLength
;
116 *HeaderSum
= Header
->OptionalHeader
.CheckSum
;
121 /***********************************************************************
122 * MapFileAndCheckSumA (IMAGEHLP.@)
124 DWORD WINAPI
MapFileAndCheckSumA(
125 LPSTR Filename
, LPDWORD HeaderSum
, LPDWORD CheckSum
)
132 TRACE("(%s, %p, %p): stub\n",
133 debugstr_a(Filename
), HeaderSum
, CheckSum
136 hFile
= CreateFileA(Filename
,
138 FILE_SHARE_READ
| FILE_SHARE_WRITE
,
141 FILE_ATTRIBUTE_NORMAL
,
143 if (hFile
== INVALID_HANDLE_VALUE
)
145 return CHECKSUM_OPEN_FAILURE
;
148 hMapping
= CreateFileMappingW(hFile
,
157 return CHECKSUM_MAP_FAILURE
;
160 BaseAddress
= MapViewOfFile(hMapping
,
167 CloseHandle(hMapping
);
169 return CHECKSUM_MAPVIEW_FAILURE
;
172 FileLength
= GetFileSize(hFile
,
175 CheckSumMappedFile(BaseAddress
,
180 UnmapViewOfFile(BaseAddress
);
181 CloseHandle(hMapping
);
187 /***********************************************************************
188 * MapFileAndCheckSumW (IMAGEHLP.@)
190 DWORD WINAPI
MapFileAndCheckSumW(
191 LPWSTR Filename
, LPDWORD HeaderSum
, LPDWORD CheckSum
)
198 TRACE("(%s, %p, %p): stub\n",
199 debugstr_w(Filename
), HeaderSum
, CheckSum
202 hFile
= CreateFileW(Filename
,
204 FILE_SHARE_READ
| FILE_SHARE_WRITE
,
207 FILE_ATTRIBUTE_NORMAL
,
209 if (hFile
== INVALID_HANDLE_VALUE
)
211 return CHECKSUM_OPEN_FAILURE
;
214 hMapping
= CreateFileMappingW(hFile
,
223 return CHECKSUM_MAP_FAILURE
;
226 BaseAddress
= MapViewOfFile(hMapping
,
233 CloseHandle(hMapping
);
235 return CHECKSUM_MAPVIEW_FAILURE
;
238 FileLength
= GetFileSize(hFile
,
241 CheckSumMappedFile(BaseAddress
,
246 UnmapViewOfFile(BaseAddress
);
247 CloseHandle(hMapping
);
253 /***********************************************************************
254 * ReBaseImage (IMAGEHLP.@)
256 BOOL WINAPI
ReBaseImage(
257 LPSTR CurrentImageName
, LPSTR SymbolPath
, BOOL fReBase
,
258 BOOL fRebaseSysfileOk
, BOOL fGoingDown
, ULONG CheckImageSize
,
259 ULONG
*OldImageSize
, ULONG
*OldImageBase
, ULONG
*NewImageSize
,
260 ULONG
*NewImageBase
, ULONG TimeStamp
)
263 "(%s, %s, %d, %d, %d, %ld, %p, %p, %p, %p, %ld): stub\n",
264 debugstr_a(CurrentImageName
),debugstr_a(SymbolPath
), fReBase
,
265 fRebaseSysfileOk
, fGoingDown
, CheckImageSize
, OldImageSize
,
266 OldImageBase
, NewImageSize
, NewImageBase
, TimeStamp
268 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
272 /***********************************************************************
273 * RemovePrivateCvSymbolic (IMAGEHLP.@)
275 BOOL WINAPI
RemovePrivateCvSymbolic(
276 PCHAR DebugData
, PCHAR
*NewDebugData
, ULONG
*NewDebugSize
)
278 FIXME("(%p, %p, %p): stub\n",
279 DebugData
, NewDebugData
, NewDebugSize
281 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
285 /***********************************************************************
286 * RemoveRelocations (IMAGEHLP.@)
288 VOID WINAPI
RemoveRelocations(PCHAR ImageName
)
290 FIXME("(%p): stub\n", ImageName
);
291 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
294 /***********************************************************************
295 * SplitSymbols (IMAGEHLP.@)
297 BOOL WINAPI
SplitSymbols(
298 LPSTR ImageName
, LPSTR SymbolsPath
,
299 LPSTR SymbolFilePath
, DWORD Flags
)
301 FIXME("(%s, %s, %s, %ld): stub\n",
302 debugstr_a(ImageName
), debugstr_a(SymbolsPath
),
303 debugstr_a(SymbolFilePath
), Flags
305 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
309 /***********************************************************************
310 * UpdateDebugInfoFile (IMAGEHLP.@)
312 BOOL WINAPI
UpdateDebugInfoFile(
313 LPSTR ImageFileName
, LPSTR SymbolPath
,
314 LPSTR DebugFilePath
, PIMAGE_NT_HEADERS NtHeaders
)
316 FIXME("(%s, %s, %s, %p): stub\n",
317 debugstr_a(ImageFileName
), debugstr_a(SymbolPath
),
318 debugstr_a(DebugFilePath
), NtHeaders
320 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
324 /***********************************************************************
325 * UpdateDebugInfoFileEx (IMAGEHLP.@)
327 BOOL WINAPI
UpdateDebugInfoFileEx(
328 LPSTR ImageFileName
, LPSTR SymbolPath
, LPSTR DebugFilePath
,
329 PIMAGE_NT_HEADERS NtHeaders
, DWORD OldChecksum
)
331 FIXME("(%s, %s, %s, %p, %ld): stub\n",
332 debugstr_a(ImageFileName
), debugstr_a(SymbolPath
),
333 debugstr_a(DebugFilePath
), NtHeaders
, OldChecksum
335 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);