source: trunk/src/imagehlp/access.cpp@ 3634

Last change on this file since 3634 was 3634, checked in by sandervl, 25 years ago

JW: Updated (Wine 26/05/2000)

File size: 8.4 KB
Line 
1/*
2 * IMAGEHLP library
3 *
4 * Copyright 1998 Patrik Stridvall
5 */
6
7#include <os2win.h>
8#include <odinwrap.h>
9#include <imagehlp.h>
10#include <heapstring.h>
11
12ODINDEBUGCHANNEL(imagehlp)
13
14/***********************************************************************
15 * Data
16 */
17
18static PLOADED_IMAGE IMAGEHLP_pFirstLoadedImage=NULL;
19static PLOADED_IMAGE IMAGEHLP_pLastLoadedImage=NULL;
20
21static LOADED_IMAGE IMAGEHLP_EmptyLoadedImage = {
22 NULL, /* ModuleName */
23 0xffffffff, /* hFile */
24 NULL, /* MappedAddress */
25 NULL, /* FileHeader */
26 NULL, /* LastRvaSection */
27 0, /* NumberOfSections */
28 NULL, /* Sections */
29 1, /* Characteristics */
30 FALSE, /* fSystemImage */
31 FALSE, /* fDOSImage */
32 { &IMAGEHLP_EmptyLoadedImage.Links, &IMAGEHLP_EmptyLoadedImage.Links }, /* Links */
33 148, /* SizeOfImage; */
34};
35
36/***********************************************************************
37 * EnumerateLoadedModules (IMAGEHLP.@)
38 */
39BOOL WINAPI EnumerateLoadedModules(
40 HANDLE hProcess,
41 PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback,
42 PVOID UserContext)
43{
44 dprintf(("(0x%08x, %p, %p): stub\n",
45 hProcess, EnumLoadedModulesCallback, UserContext
46 ));
47 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
48 return FALSE;
49}
50
51/***********************************************************************
52 * GetTimestampForLoadedLibrary (IMAGEHLP.@)
53 */
54DWORD WINAPI GetTimestampForLoadedLibrary(HMODULE Module)
55{
56 dprintf(("(0x%08x): stub\n", Module));
57 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
58 return 0;
59}
60
61/***********************************************************************
62 * GetImageConfigInformation (IMAGEHLP.@)
63 */
64BOOL WINAPI GetImageConfigInformation(
65 PLOADED_IMAGE LoadedImage,
66 PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation)
67{
68 dprintf(("(%p, %p): stub\n",
69 LoadedImage, ImageConfigInformation
70 ));
71 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
72 return FALSE;
73}
74
75/***********************************************************************
76 * GetImageUnusedHeaderBytes (IMAGEHLP.@)
77 */
78DWORD WINAPI GetImageUnusedHeaderBytes(
79 PLOADED_IMAGE LoadedImage,
80 LPDWORD SizeUnusedHeaderBytes)
81{
82 dprintf(("(%p, %p): stub\n",
83 LoadedImage, SizeUnusedHeaderBytes
84 ));
85 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
86 return 0;
87}
88
89/***********************************************************************
90 * ImageDirectoryEntryToData (IMAGEHLP.@)
91 */
92PVOID WINAPI ImageDirectoryEntryToData(
93 PVOID Base, BOOLEAN MappedAsImage, USHORT DirectoryEntry, PULONG Size)
94{
95 dprintf(("(%p, %d, %hd, %p): stub\n",
96 Base, MappedAsImage, DirectoryEntry, Size
97 ));
98 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
99 return NULL;
100}
101
102/***********************************************************************
103 * ImageLoad (IMAGEHLP.@)
104 */
105PLOADED_IMAGE WINAPI ImageLoad(LPSTR DllName, LPSTR DllPath)
106{
107 PLOADED_IMAGE pLoadedImage =
108 (_LOADED_IMAGE*)HeapAlloc(IMAGEHLP_hHeap, 0, sizeof(LOADED_IMAGE));
109 return pLoadedImage;
110}
111
112/***********************************************************************
113 * ImageNtHeader (IMAGEHLP.@)
114 */
115PIMAGE_NT_HEADERS WINAPI ImageNtHeader(PVOID Base)
116{
117 return (PIMAGE_NT_HEADERS)
118 ((LPBYTE) Base + ((PIMAGE_DOS_HEADER) Base)->e_lfanew);
119}
120
121/***********************************************************************
122 * ImageRvaToSection (IMAGEHLP.@)
123 */
124PIMAGE_SECTION_HEADER WINAPI ImageRvaToSection(
125 PIMAGE_NT_HEADERS NtHeaders, PVOID Base, ULONG Rva)
126{
127 dprintf(("(%p, %p, %ld): stub\n", NtHeaders, Base, Rva));
128 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
129 return NULL;
130}
131
132/***********************************************************************
133 * ImageRvaToVa (IMAGEHLP.@)
134 */
135PVOID WINAPI ImageRvaToVa(
136 PIMAGE_NT_HEADERS NtHeaders, PVOID Base, ULONG Rva,
137 PIMAGE_SECTION_HEADER *LastRvaSection)
138{
139 dprintf(("(%p, %p, %ld, %p): stub\n",
140 NtHeaders, Base, Rva, LastRvaSection
141 ));
142 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
143 return NULL;
144}
145
146/***********************************************************************
147 * ImageUnload (IMAGEHLP.@)
148 */
149BOOL WINAPI ImageUnload(PLOADED_IMAGE pLoadedImage)
150{
151 LIST_ENTRY *pCurrent, *pFind;
152 if(!IMAGEHLP_pFirstLoadedImage || !pLoadedImage)
153 {
154 /* No image loaded or null pointer */
155 SetLastError(ERROR_INVALID_PARAMETER);
156 return FALSE;
157 }
158
159 pFind=&pLoadedImage->Links;
160 pCurrent=&IMAGEHLP_pFirstLoadedImage->Links;
161 while((pCurrent != pFind) &&
162 (pCurrent != NULL))
163 pCurrent = pCurrent->Flink;
164 if(!pCurrent)
165 {
166 /* Not found */
167 SetLastError(ERROR_INVALID_PARAMETER);
168 return FALSE;
169 }
170
171 if(pCurrent->Blink)
172 pCurrent->Blink->Flink = pCurrent->Flink;
173 else
174 IMAGEHLP_pFirstLoadedImage = pCurrent->Flink?CONTAINING_RECORD(
175 pCurrent->Flink, LOADED_IMAGE, Links):NULL;
176
177 if(pCurrent->Flink)
178 pCurrent->Flink->Blink = pCurrent->Blink;
179 else
180 IMAGEHLP_pLastLoadedImage = pCurrent->Blink?CONTAINING_RECORD(
181 pCurrent->Blink, LOADED_IMAGE, Links):NULL;
182
183 return FALSE;
184}
185
186/***********************************************************************
187 * MapAndLoad (IMAGEHLP.@)
188 */
189BOOL WINAPI MapAndLoad(
190 LPSTR pszImageName, LPSTR pszDllPath, PLOADED_IMAGE pLoadedImage,
191 BOOL bDotDll, BOOL bReadOnly)
192{
193 CHAR szFileName[MAX_PATH];
194 HANDLE hFile = (HANDLE) NULL;
195 HANDLE hFileMapping = (HANDLE) NULL;
196 HMODULE hModule = (HMODULE) NULL;
197 PIMAGE_NT_HEADERS pNtHeader = NULL;
198
199 /* PathCombine(&szFileName, pszDllPath, pszImageName); */
200 /* PathRenameExtension(&szFileName, bDotDll?:"dll":"exe"); */
201
202 /* FIXME: Check if the file already loaded (use IMAGEHLP_pFirstLoadedImage) */
203 if(!(hFile = CreateFileA(
204 szFileName, GENERIC_READ, 1, /* FIXME: FILE_SHARE_READ not defined */
205 NULL, OPEN_EXISTING, 0, (HANDLE) NULL)))
206 {
207 SetLastError(ERROR_FILE_NOT_FOUND);
208 goto Error;
209 }
210
211 if(!(hFileMapping = CreateFileMappingA(
212 hFile, NULL, PAGE_READONLY | SEC_COMMIT, 0, 0, NULL)))
213 {
214 DWORD dwLastError = GetLastError();
215 dprintf(("CreateFileMapping: Error = %ld\n", dwLastError));
216 SetLastError(dwLastError);
217 goto Error;
218 }
219 CloseHandle(hFile);
220 hFile = (HANDLE) NULL;
221
222 if(!(hModule = (HMODULE) MapViewOfFile(
223 hFileMapping, FILE_MAP_READ, 0, 0, 0)))
224 {
225 DWORD dwLastError = GetLastError();
226 dprintf(("MapViewOfFile: Error = %ld\n", dwLastError));
227 SetLastError(dwLastError);
228 goto Error;
229 }
230
231 CloseHandle(hFileMapping);
232 hFileMapping=(HANDLE) NULL;
233
234 pLoadedImage = (PLOADED_IMAGE) HeapAlloc(
235 IMAGEHLP_hHeap, 0, sizeof(LOADED_IMAGE)
236 );
237
238 pNtHeader = ImageNtHeader((PVOID) hModule);
239
240 pLoadedImage->ModuleName =
241 HEAP_strdupA(IMAGEHLP_hHeap, 0, pszDllPath); /* FIXME: Correct? */
242 pLoadedImage->hFile = hFile;
243 pLoadedImage->MappedAddress = (PUCHAR) hModule;
244 pLoadedImage->FileHeader = pNtHeader;
245 pLoadedImage->Sections = (PIMAGE_SECTION_HEADER)
246 ((LPBYTE) &pNtHeader->OptionalHeader +
247 pNtHeader->FileHeader.SizeOfOptionalHeader);
248 pLoadedImage->NumberOfSections =
249 pNtHeader->FileHeader.NumberOfSections;
250 pLoadedImage->SizeOfImage =
251 pNtHeader->OptionalHeader.SizeOfImage;
252 pLoadedImage->Characteristics =
253 pNtHeader->FileHeader.Characteristics;
254 pLoadedImage->LastRvaSection = pLoadedImage->Sections;
255
256 pLoadedImage->fSystemImage = FALSE; /* FIXME */
257 pLoadedImage->fDOSImage = FALSE; /* FIXME */
258
259 /* FIXME: Make thread safe */
260 pLoadedImage->Links.Flink = NULL;
261 pLoadedImage->Links.Blink = &IMAGEHLP_pLastLoadedImage->Links;
262 if(IMAGEHLP_pLastLoadedImage)
263 IMAGEHLP_pLastLoadedImage->Links.Flink = &pLoadedImage->Links;
264 IMAGEHLP_pLastLoadedImage = pLoadedImage;
265 if(!IMAGEHLP_pFirstLoadedImage)
266 IMAGEHLP_pFirstLoadedImage = pLoadedImage;
267
268 return TRUE;
269
270Error:
271 if(hModule)
272 UnmapViewOfFile((PVOID) hModule);
273 if(hFileMapping)
274 CloseHandle(hFileMapping);
275 if(hFile)
276 CloseHandle(hFile);
277 return FALSE;
278}
279
280/***********************************************************************
281 * SetImageConfigInformation (IMAGEHLP.@)
282 */
283BOOL WINAPI SetImageConfigInformation(
284 PLOADED_IMAGE LoadedImage,
285 PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation)
286{
287 dprintf(("(%p, %p): stub\n",
288 LoadedImage, ImageConfigInformation
289 ));
290 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
291 return FALSE;
292}
293
294/***********************************************************************
295 * UnMapAndLoad (IMAGEHLP.@)
296 */
297BOOL WINAPI UnMapAndLoad(PLOADED_IMAGE LoadedImage)
298{
299 dprintf(("(%p): stub\n", LoadedImage));
300 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
301 return FALSE;
302}
303
304
Note: See TracBrowser for help on using the repository browser.