Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenmodify.c
Go to the documentation of this file.
00001 /* 00002 * IMAGEHLP library 00003 * 00004 * Copyright 1998 Patrik Stridvall 00005 * 00006 * This library is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU Lesser General Public 00008 * License as published by the Free Software Foundation; either 00009 * version 2.1 of the License, or (at your option) any later version. 00010 * 00011 * This library is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 * Lesser General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU Lesser General Public 00017 * License along with this library; if not, write to the Free Software 00018 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 00019 */ 00020 00021 #include <stdarg.h> 00022 00023 #include "windef.h" 00024 #include "winbase.h" 00025 #include "winternl.h" 00026 #include "winerror.h" 00027 #include "wine/debug.h" 00028 #include "imagehlp.h" 00029 00030 WINE_DEFAULT_DEBUG_CHANNEL(imagehlp); 00031 00032 static WORD CalcCheckSum(DWORD StartValue, LPVOID BaseAddress, DWORD WordCount); 00033 00034 00035 /*********************************************************************** 00036 * BindImage (IMAGEHLP.@) 00037 */ 00038 BOOL WINAPI BindImage( 00039 PCSTR ImageName, PCSTR DllPath, PCSTR SymbolPath) 00040 { 00041 return BindImageEx(0, ImageName, DllPath, SymbolPath, NULL); 00042 } 00043 00044 /*********************************************************************** 00045 * BindImageEx (IMAGEHLP.@) 00046 */ 00047 BOOL WINAPI BindImageEx( 00048 DWORD Flags, PCSTR ImageName, PCSTR DllPath, PCSTR SymbolPath, 00049 PIMAGEHLP_STATUS_ROUTINE StatusRoutine) 00050 { 00051 FIXME("(%d, %s, %s, %s, %p): stub\n", 00052 Flags, debugstr_a(ImageName), debugstr_a(DllPath), 00053 debugstr_a(SymbolPath), StatusRoutine 00054 ); 00055 return TRUE; 00056 } 00057 00058 00059 /*********************************************************************** 00060 * CheckSum (internal) 00061 */ 00062 static WORD CalcCheckSum( 00063 DWORD StartValue, LPVOID BaseAddress, DWORD WordCount) 00064 { 00065 LPWORD Ptr; 00066 DWORD Sum; 00067 DWORD i; 00068 00069 Sum = StartValue; 00070 Ptr = (LPWORD)BaseAddress; 00071 for (i = 0; i < WordCount; i++) 00072 { 00073 Sum += *Ptr; 00074 if (HIWORD(Sum) != 0) 00075 { 00076 Sum = LOWORD(Sum) + HIWORD(Sum); 00077 } 00078 Ptr++; 00079 } 00080 00081 return (WORD)(LOWORD(Sum) + HIWORD(Sum)); 00082 } 00083 00084 00085 /*********************************************************************** 00086 * CheckSumMappedFile (IMAGEHLP.@) 00087 */ 00088 PIMAGE_NT_HEADERS WINAPI CheckSumMappedFile( 00089 LPVOID BaseAddress, DWORD FileLength, 00090 LPDWORD HeaderSum, LPDWORD CheckSum) 00091 { 00092 IMAGE_DOS_HEADER *dos = (IMAGE_DOS_HEADER *) BaseAddress; 00093 PIMAGE_NT_HEADERS32 Header32; 00094 PIMAGE_NT_HEADERS64 Header64; 00095 DWORD *ChecksumFile; 00096 DWORD CalcSum; 00097 DWORD HdrSum; 00098 00099 TRACE("(%p, %d, %p, %p)\n", 00100 BaseAddress, FileLength, HeaderSum, CheckSum 00101 ); 00102 00103 CalcSum = (DWORD)CalcCheckSum(0, 00104 BaseAddress, 00105 (FileLength + 1) / sizeof(WORD)); 00106 00107 if (dos->e_magic != IMAGE_DOS_SIGNATURE) 00108 return NULL; 00109 00110 Header32 = (IMAGE_NT_HEADERS32 *)((char *)dos + dos->e_lfanew); 00111 00112 if (Header32->Signature != IMAGE_NT_SIGNATURE) 00113 return NULL; 00114 00115 if (Header32->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC) 00116 ChecksumFile = &Header32->OptionalHeader.CheckSum; 00117 else if (Header32->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC) 00118 { 00119 Header64 = (IMAGE_NT_HEADERS64 *)Header32; 00120 ChecksumFile = &Header64->OptionalHeader.CheckSum; 00121 } 00122 else 00123 return NULL; 00124 00125 HdrSum = *ChecksumFile; 00126 00127 /* Subtract image checksum from calculated checksum. */ 00128 /* fix low word of checksum */ 00129 if (LOWORD(CalcSum) >= LOWORD(HdrSum)) 00130 { 00131 CalcSum -= LOWORD(HdrSum); 00132 } 00133 else 00134 { 00135 CalcSum = ((LOWORD(CalcSum) - LOWORD(HdrSum)) & 0xFFFF) - 1; 00136 } 00137 00138 /* fix high word of checksum */ 00139 if (LOWORD(CalcSum) >= HIWORD(HdrSum)) 00140 { 00141 CalcSum -= HIWORD(HdrSum); 00142 } 00143 else 00144 { 00145 CalcSum = ((LOWORD(CalcSum) - HIWORD(HdrSum)) & 0xFFFF) - 1; 00146 } 00147 00148 /* add file length */ 00149 CalcSum += FileLength; 00150 00151 *CheckSum = CalcSum; 00152 *HeaderSum = *ChecksumFile; 00153 00154 return (PIMAGE_NT_HEADERS) Header32; 00155 } 00156 00157 /*********************************************************************** 00158 * MapFileAndCheckSumA (IMAGEHLP.@) 00159 */ 00160 DWORD WINAPI MapFileAndCheckSumA( 00161 PCSTR Filename, PDWORD HeaderSum, PDWORD CheckSum) 00162 { 00163 HANDLE hFile; 00164 HANDLE hMapping; 00165 LPVOID BaseAddress; 00166 DWORD FileLength; 00167 00168 TRACE("(%s, %p, %p): stub\n", 00169 debugstr_a(Filename), HeaderSum, CheckSum 00170 ); 00171 00172 hFile = CreateFileA(Filename, 00173 GENERIC_READ, 00174 FILE_SHARE_READ | FILE_SHARE_WRITE, 00175 NULL, 00176 OPEN_EXISTING, 00177 FILE_ATTRIBUTE_NORMAL, 00178 0); 00179 if (hFile == INVALID_HANDLE_VALUE) 00180 { 00181 return CHECKSUM_OPEN_FAILURE; 00182 } 00183 00184 hMapping = CreateFileMappingW(hFile, 00185 NULL, 00186 PAGE_READONLY, 00187 0, 00188 0, 00189 NULL); 00190 if (hMapping == 0) 00191 { 00192 CloseHandle(hFile); 00193 return CHECKSUM_MAP_FAILURE; 00194 } 00195 00196 BaseAddress = MapViewOfFile(hMapping, 00197 FILE_MAP_READ, 00198 0, 00199 0, 00200 0); 00201 if (BaseAddress == 0) 00202 { 00203 CloseHandle(hMapping); 00204 CloseHandle(hFile); 00205 return CHECKSUM_MAPVIEW_FAILURE; 00206 } 00207 00208 FileLength = GetFileSize(hFile, 00209 NULL); 00210 00211 CheckSumMappedFile(BaseAddress, 00212 FileLength, 00213 HeaderSum, 00214 CheckSum); 00215 00216 UnmapViewOfFile(BaseAddress); 00217 CloseHandle(hMapping); 00218 CloseHandle(hFile); 00219 00220 return 0; 00221 } 00222 00223 /*********************************************************************** 00224 * MapFileAndCheckSumW (IMAGEHLP.@) 00225 */ 00226 DWORD WINAPI MapFileAndCheckSumW( 00227 PCWSTR Filename, PDWORD HeaderSum, PDWORD CheckSum) 00228 { 00229 HANDLE hFile; 00230 HANDLE hMapping; 00231 LPVOID BaseAddress; 00232 DWORD FileLength; 00233 00234 TRACE("(%s, %p, %p): stub\n", 00235 debugstr_w(Filename), HeaderSum, CheckSum 00236 ); 00237 00238 hFile = CreateFileW(Filename, 00239 GENERIC_READ, 00240 FILE_SHARE_READ | FILE_SHARE_WRITE, 00241 NULL, 00242 OPEN_EXISTING, 00243 FILE_ATTRIBUTE_NORMAL, 00244 0); 00245 if (hFile == INVALID_HANDLE_VALUE) 00246 { 00247 return CHECKSUM_OPEN_FAILURE; 00248 } 00249 00250 hMapping = CreateFileMappingW(hFile, 00251 NULL, 00252 PAGE_READONLY, 00253 0, 00254 0, 00255 NULL); 00256 if (hMapping == 0) 00257 { 00258 CloseHandle(hFile); 00259 return CHECKSUM_MAP_FAILURE; 00260 } 00261 00262 BaseAddress = MapViewOfFile(hMapping, 00263 FILE_MAP_READ, 00264 0, 00265 0, 00266 0); 00267 if (BaseAddress == 0) 00268 { 00269 CloseHandle(hMapping); 00270 CloseHandle(hFile); 00271 return CHECKSUM_MAPVIEW_FAILURE; 00272 } 00273 00274 FileLength = GetFileSize(hFile, 00275 NULL); 00276 00277 CheckSumMappedFile(BaseAddress, 00278 FileLength, 00279 HeaderSum, 00280 CheckSum); 00281 00282 UnmapViewOfFile(BaseAddress); 00283 CloseHandle(hMapping); 00284 CloseHandle(hFile); 00285 00286 return 0; 00287 } 00288 00289 /*********************************************************************** 00290 * ReBaseImage (IMAGEHLP.@) 00291 */ 00292 BOOL WINAPI ReBaseImage( 00293 PCSTR CurrentImageName, PCSTR SymbolPath, BOOL fReBase, 00294 BOOL fRebaseSysfileOk, BOOL fGoingDown, ULONG CheckImageSize, 00295 ULONG *OldImageSize, ULONG_PTR *OldImageBase, ULONG *NewImageSize, 00296 ULONG_PTR *NewImageBase, ULONG TimeStamp) 00297 { 00298 FIXME( 00299 "(%s, %s, %d, %d, %d, %d, %p, %p, %p, %p, %d): stub\n", 00300 debugstr_a(CurrentImageName),debugstr_a(SymbolPath), fReBase, 00301 fRebaseSysfileOk, fGoingDown, CheckImageSize, OldImageSize, 00302 OldImageBase, NewImageSize, NewImageBase, TimeStamp 00303 ); 00304 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 00305 return FALSE; 00306 } 00307 00308 /*********************************************************************** 00309 * RemovePrivateCvSymbolic (IMAGEHLP.@) 00310 */ 00311 BOOL WINAPI RemovePrivateCvSymbolic( 00312 PCHAR DebugData, PCHAR *NewDebugData, ULONG *NewDebugSize) 00313 { 00314 FIXME("(%p, %p, %p): stub\n", 00315 DebugData, NewDebugData, NewDebugSize 00316 ); 00317 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 00318 return FALSE; 00319 } 00320 00321 /*********************************************************************** 00322 * RemoveRelocations (IMAGEHLP.@) 00323 */ 00324 VOID WINAPI RemoveRelocations(PCHAR ImageName) 00325 { 00326 FIXME("(%p): stub\n", ImageName); 00327 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 00328 } 00329 00330 /*********************************************************************** 00331 * SplitSymbols (IMAGEHLP.@) 00332 */ 00333 BOOL WINAPI SplitSymbols( 00334 PSTR ImageName, PCSTR SymbolsPath, 00335 PSTR SymbolFilePath, ULONG Flags) 00336 { 00337 FIXME("(%s, %s, %s, %d): stub\n", 00338 debugstr_a(ImageName), debugstr_a(SymbolsPath), 00339 debugstr_a(SymbolFilePath), Flags 00340 ); 00341 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 00342 return FALSE; 00343 } 00344 00345 /*********************************************************************** 00346 * UpdateDebugInfoFile (IMAGEHLP.@) 00347 */ 00348 BOOL WINAPI UpdateDebugInfoFile( 00349 PCSTR ImageFileName, PCSTR SymbolPath, 00350 PSTR DebugFilePath, PIMAGE_NT_HEADERS32 NtHeaders) 00351 { 00352 FIXME("(%s, %s, %s, %p): stub\n", 00353 debugstr_a(ImageFileName), debugstr_a(SymbolPath), 00354 debugstr_a(DebugFilePath), NtHeaders 00355 ); 00356 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 00357 return FALSE; 00358 } 00359 00360 /*********************************************************************** 00361 * UpdateDebugInfoFileEx (IMAGEHLP.@) 00362 */ 00363 BOOL WINAPI UpdateDebugInfoFileEx( 00364 PCSTR ImageFileName, PCSTR SymbolPath, PSTR DebugFilePath, 00365 PIMAGE_NT_HEADERS32 NtHeaders, DWORD OldChecksum) 00366 { 00367 FIXME("(%s, %s, %s, %p, %d): stub\n", 00368 debugstr_a(ImageFileName), debugstr_a(SymbolPath), 00369 debugstr_a(DebugFilePath), NtHeaders, OldChecksum 00370 ); 00371 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 00372 return FALSE; 00373 } Generated on Fri May 25 2012 04:22:06 for ReactOS by
1.7.6.1
|