Large-scale renaming of all Win32 functions and types to use the
[wine/hacks.git] / dlls / imagehlp / access.c
blob30c44fa39ed5e0201b666f6bf9a75844f0f2cf1a
1 /*
2 * IMAGEHLP library
4 * Copyright 1998 Patrik Stridvall
5 */
7 #include "winbase.h"
8 #include "winnt.h"
9 #include "winerror.h"
10 #include "wintypes.h"
11 #include "heap.h"
12 #include "debug.h"
13 #include "imagehlp.h"
15 /***********************************************************************
16 * Data
19 static PLOADED_IMAGE IMAGEHLP_pFirstLoadedImage=NULL;
20 static PLOADED_IMAGE IMAGEHLP_pLastLoadedImage=NULL;
22 static LOADED_IMAGE IMAGEHLP_EmptyLoadedImage = {
23 NULL, /* ModuleName */
24 0xffffffff, /* hFile */
25 NULL, /* MappedAddress */
26 NULL, /* FileHeader */
27 NULL, /* LastRvaSection */
28 0, /* NumberOfSections */
29 NULL, /* Sections */
30 1, /* Characteristics */
31 FALSE, /* fSystemImage */
32 FALSE, /* fDOSImage */
33 { &IMAGEHLP_EmptyLoadedImage.Links, &IMAGEHLP_EmptyLoadedImage.Links }, /* Links */
34 148, /* SizeOfImage; */
37 /***********************************************************************
38 * EnumerateLoadedModules32 (IMAGEHLP.4)
40 BOOL WINAPI EnumerateLoadedModules(
41 HANDLE hProcess,
42 PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback,
43 PVOID UserContext)
45 FIXME(imagehlp, "(0x%08x, %p, %p): stub\n",
46 hProcess, EnumLoadedModulesCallback, UserContext
48 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
49 return FALSE;
52 /***********************************************************************
53 * GetTimestampForLoadedLibrary32 (IMAGEHLP.9)
55 DWORD WINAPI GetTimestampForLoadedLibrary(HMODULE Module)
57 FIXME(imagehlp, "(0x%08x): stub\n", Module);
58 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
59 return 0;
62 /***********************************************************************
63 * GetImageConfigInformation32 (IMAGEHLP.7)
65 BOOL WINAPI GetImageConfigInformation(
66 PLOADED_IMAGE LoadedImage,
67 PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation)
69 FIXME(imagehlp, "(%p, %p): stub\n",
70 LoadedImage, ImageConfigInformation
72 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
73 return FALSE;
76 /***********************************************************************
77 * GetImageUnusedHeaderBytes32 (IMAGEHLP.8)
79 DWORD WINAPI GetImageUnusedHeaderBytes(
80 PLOADED_IMAGE LoadedImage,
81 LPDWORD SizeUnusedHeaderBytes)
83 FIXME(imagehlp, "(%p, %p): stub\n",
84 LoadedImage, SizeUnusedHeaderBytes
86 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
87 return 0;
90 /***********************************************************************
91 * ImageDirectoryEntryToData32 (IMAGEHLP.11)
93 PVOID WINAPI ImageDirectoryEntryToData(
94 PVOID Base, BOOLEAN MappedAsImage, USHORT DirectoryEntry, PULONG Size)
96 FIXME(imagehlp, "(%p, %d, %d, %p): stub\n",
97 Base, MappedAsImage, DirectoryEntry, Size
99 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
100 return NULL;
103 /***********************************************************************
104 * ImageLoad32 (IMAGEHLP.16)
106 PLOADED_IMAGE WINAPI ImageLoad(LPSTR DllName, LPSTR DllPath)
108 PLOADED_IMAGE pLoadedImage =
109 HeapAlloc(IMAGEHLP_hHeap, 0, sizeof(LOADED_IMAGE));
110 return pLoadedImage;
113 /***********************************************************************
114 * ImageNtHeader32 (IMAGEHLP.17)
116 PIMAGE_NT_HEADERS WINAPI ImageNtHeader(PVOID Base)
118 return (PIMAGE_NT_HEADERS)
119 ((LPBYTE) Base + ((PIMAGE_DOS_HEADER) Base)->e_lfanew);
122 /***********************************************************************
123 * ImageRvaToSection32 (IMAGEHLP.19)
125 PIMAGE_SECTION_HEADER WINAPI ImageRvaToSection(
126 PIMAGE_NT_HEADERS NtHeaders, PVOID Base, ULONG Rva)
128 FIXME(imagehlp, "(%p, %p, %ld): stub\n", NtHeaders, Base, Rva);
129 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
130 return NULL;
133 /***********************************************************************
134 * ImageRvaToVa32 (IMAGEHLP.20)
136 PVOID WINAPI ImageRvaToVa(
137 PIMAGE_NT_HEADERS NtHeaders, PVOID Base, ULONG Rva,
138 PIMAGE_SECTION_HEADER *LastRvaSection)
140 FIXME(imagehlp, "(%p, %p, %ld, %p): stub\n",
141 NtHeaders, Base, Rva, LastRvaSection
143 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
144 return NULL;
147 /***********************************************************************
148 * ImageUnload32 (IMAGEHLP.21)
150 BOOL WINAPI ImageUnload(PLOADED_IMAGE pLoadedImage)
152 LIST_ENTRY *pCurrent, *pFind;
153 if(!IMAGEHLP_pFirstLoadedImage || !pLoadedImage)
155 /* No image loaded or null pointer */
156 SetLastError(ERROR_INVALID_PARAMETER);
157 return FALSE;
160 pFind=&pLoadedImage->Links;
161 pCurrent=&IMAGEHLP_pFirstLoadedImage->Links;
162 while((pCurrent != pFind) &&
163 (pCurrent != NULL))
164 pCurrent = pCurrent->Flink;
165 if(!pCurrent)
167 /* Not found */
168 SetLastError(ERROR_INVALID_PARAMETER);
169 return FALSE;
172 if(pCurrent->Blink)
173 pCurrent->Blink->Flink = pCurrent->Flink;
174 else
175 IMAGEHLP_pFirstLoadedImage = pCurrent->Flink?CONTAINING_RECORD(
176 pCurrent->Flink, LOADED_IMAGE, Links):NULL;
178 if(pCurrent->Flink)
179 pCurrent->Flink->Blink = pCurrent->Blink;
180 else
181 IMAGEHLP_pLastLoadedImage = pCurrent->Blink?CONTAINING_RECORD(
182 pCurrent->Blink, LOADED_IMAGE, Links):NULL;
184 return FALSE;
187 /***********************************************************************
188 * MapAndLoad32 (IMAGEHLP.25)
190 BOOL WINAPI MapAndLoad(
191 LPSTR pszImageName, LPSTR pszDllPath, PLOADED_IMAGE pLoadedImage,
192 BOOL bDotDll, BOOL bReadOnly)
194 CHAR szFileName[MAX_PATH];
195 HANDLE hFile = (HANDLE) NULL;
196 HANDLE hFileMapping = (HANDLE) NULL;
197 HMODULE hModule = (HMODULE) NULL;
198 PIMAGE_NT_HEADERS pNtHeader = NULL;
200 /* PathCombine(&szFileName, pszDllPath, pszImageName); */
201 /* PathRenameExtension(&szFileName, bDotDll?:"dll":"exe"); */
203 /* FIXME: Check if the file already loaded (use IMAGEHLP_pFirstLoadedImage32) */
204 if(!(hFile = CreateFileA(
205 szFileName, GENERIC_READ, 1, /* FIXME: FILE_SHARE_READ not defined */
206 NULL, OPEN_EXISTING, 0, (HANDLE) NULL)))
208 SetLastError(ERROR_FILE_NOT_FOUND);
209 goto Error;
212 if(!(hFileMapping = CreateFileMappingA(
213 hFile, NULL, PAGE_READONLY | SEC_COMMIT, 0, 0, NULL)))
215 DWORD dwLastError = GetLastError();
216 WARN(imagehlp, "CreateFileMapping: Error = %ld\n", dwLastError);
217 SetLastError(dwLastError);
218 goto Error;
220 CloseHandle(hFile);
221 hFile = (HANDLE) NULL;
223 if(!(hModule = (HMODULE) MapViewOfFile(
224 hFileMapping, FILE_MAP_READ, 0, 0, 0)))
226 DWORD dwLastError = GetLastError();
227 WARN(imagehlp, "MapViewOfFile: Error = %ld\n", dwLastError);
228 SetLastError(dwLastError);
229 goto Error;
232 CloseHandle(hFileMapping);
233 hFileMapping=(HANDLE) NULL;
235 pLoadedImage = (PLOADED_IMAGE) HeapAlloc(
236 IMAGEHLP_hHeap, 0, sizeof(LOADED_IMAGE)
239 pNtHeader = ImageNtHeader((PVOID) hModule);
241 pLoadedImage->ModuleName =
242 HEAP_strdupA(IMAGEHLP_hHeap, 0, pszDllPath); /* FIXME: Correct? */
243 pLoadedImage->hFile = hFile;
244 pLoadedImage->MappedAddress = (PUCHAR) hModule;
245 pLoadedImage->FileHeader = pNtHeader;
246 pLoadedImage->Sections = (PIMAGE_SECTION_HEADER)
247 ((LPBYTE) &pNtHeader->OptionalHeader +
248 pNtHeader->FileHeader.SizeOfOptionalHeader);
249 pLoadedImage->NumberOfSections =
250 pNtHeader->FileHeader.NumberOfSections;
251 pLoadedImage->SizeOfImage =
252 pNtHeader->OptionalHeader.SizeOfImage;
253 pLoadedImage->Characteristics =
254 pNtHeader->FileHeader.Characteristics;
255 pLoadedImage->LastRvaSection = pLoadedImage->Sections;
257 pLoadedImage->fSystemImage = FALSE; /* FIXME */
258 pLoadedImage->fDOSImage = FALSE; /* FIXME */
260 /* FIXME: Make thread safe */
261 pLoadedImage->Links.Flink = NULL;
262 pLoadedImage->Links.Blink = &IMAGEHLP_pLastLoadedImage->Links;
263 if(IMAGEHLP_pLastLoadedImage)
264 IMAGEHLP_pLastLoadedImage->Links.Flink = &pLoadedImage->Links;
265 IMAGEHLP_pLastLoadedImage = pLoadedImage;
266 if(!IMAGEHLP_pFirstLoadedImage)
267 IMAGEHLP_pFirstLoadedImage = pLoadedImage;
269 return TRUE;
271 Error:
272 if(hModule)
273 UnmapViewOfFile((PVOID) hModule);
274 if(hFileMapping)
275 CloseHandle(hFileMapping);
276 if(hFile)
277 CloseHandle(hFile);
278 return FALSE;
281 /***********************************************************************
282 * SetImageConfigInformation32 (IMAGEHLP.34)
284 BOOL WINAPI SetImageConfigInformation(
285 PLOADED_IMAGE LoadedImage,
286 PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation)
288 FIXME(imagehlp, "(%p, %p): stub\n",
289 LoadedImage, ImageConfigInformation
291 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
292 return FALSE;
295 /***********************************************************************
296 * UnMapAndLoad32 (IMAGEHLP.58)
298 BOOL WINAPI UnMapAndLoad(PLOADED_IMAGE LoadedImage)
300 FIXME(imagehlp, "(%p): stub\n", LoadedImage);
301 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
302 return FALSE;