update for HEAD-2003091401
[reactos.git] / lib / kernel32 / misc / res.c
1 /* $Id$
2  *
3  * COPYRIGHT: See COPYING in the top level directory
4  * PROJECT  : ReactOS user mode libraries
5  * MODULE   : kernel32.dll
6  * FILE     : reactos/lib/kernel32/misc/res.c
7  * AUTHOR   : ???
8  */
9
10 #include <k32.h>
11
12 #define NDEBUG
13 #include <kernel32/kernel32.h>
14
15
16 /*
17  * @implemented
18  */
19 HRSRC
20 STDCALL
21 FindResourceA (
22         HINSTANCE       hModule,
23         LPCSTR          lpName,
24         LPCSTR          lpType
25         )
26 {
27         return FindResourceExA (hModule, lpType, lpName, 0);
28 }
29
30
31 /*
32  * @implemented
33  */
34 HRSRC
35 STDCALL
36 FindResourceExA(
37         HINSTANCE       hModule,
38         LPCSTR          lpType,
39         LPCSTR          lpName,
40         WORD            wLanguage
41         )
42 {
43         UNICODE_STRING TypeU;
44         UNICODE_STRING NameU;
45         ANSI_STRING Type;
46         ANSI_STRING Name;
47         HRSRC Res;
48
49         RtlInitUnicodeString (&NameU,
50                               NULL);
51         RtlInitUnicodeString (&TypeU,
52                               NULL);
53
54         if (HIWORD(lpName) != 0)
55         {
56                 RtlInitAnsiString (&Name,
57                                    (LPSTR)lpName);
58                 RtlAnsiStringToUnicodeString (&NameU,
59                                               &Name,
60                                               TRUE);
61         }
62         else
63                 NameU.Buffer = (PWSTR)lpName;
64
65         if (HIWORD(lpType) != 0)
66         {
67                 RtlInitAnsiString (&Type,
68                                    (LPSTR)lpType);
69                 RtlAnsiStringToUnicodeString (&TypeU,
70                                               &Type,
71                                               TRUE);
72         }
73         else
74                 TypeU.Buffer = (PWSTR)lpType;
75
76         Res = FindResourceExW (hModule,
77                                TypeU.Buffer,
78                                NameU.Buffer,
79                                wLanguage);
80
81         if (HIWORD(lpName) != 0)
82                 RtlFreeUnicodeString (&NameU);
83
84         if (HIWORD(lpType) != 0)
85                 RtlFreeUnicodeString (&TypeU);
86
87         return Res;
88 }
89
90
91 /*
92  * @implemented
93  */
94 HRSRC
95 STDCALL
96 FindResourceW (
97         HINSTANCE       hModule,
98         LPCWSTR         lpName,
99         LPCWSTR         lpType
100         )
101 {
102         return FindResourceExW (hModule, lpType, lpName, 0);
103 }
104
105
106 /*
107  * @implemented
108  */
109 HRSRC
110 STDCALL
111 FindResourceExW (
112         HINSTANCE       hModule,
113         LPCWSTR         lpType,
114         LPCWSTR         lpName,
115         WORD            wLanguage
116         )
117 {
118         PIMAGE_RESOURCE_DATA_ENTRY ResourceDataEntry = NULL;
119         LDR_RESOURCE_INFO ResourceInfo;
120         NTSTATUS Status;
121
122         if ( hModule == NULL )
123                 hModule = (HINSTANCE)GetModuleHandleW(NULL);
124
125         if ( !IS_INTRESOURCE(lpName) && lpName[0] == L'#' ) {
126                 lpName = MAKEINTRESOURCEW(wcstoul(lpName + 1, NULL, 10));
127         }
128         if ( !IS_INTRESOURCE(lpType) && lpType[0] == L'#' ) {
129                 lpType = MAKEINTRESOURCEW(wcstoul(lpType + 1, NULL, 10));
130         }
131
132         ResourceInfo.Type = (ULONG)lpType;
133         ResourceInfo.Name = (ULONG)lpName;
134         ResourceInfo.Language = (ULONG)wLanguage;
135
136         Status = LdrFindResource_U (hModule,
137                                     &ResourceInfo,
138                                     RESOURCE_DATA_LEVEL,
139                                     &ResourceDataEntry);
140         if (!NT_SUCCESS(Status))
141         {
142                 SetLastErrorByStatus (Status);
143                 return NULL;
144         }
145
146         return ResourceDataEntry;
147 }
148
149
150 /*
151  * @implemented
152  */
153 HGLOBAL
154 STDCALL
155 LoadResource (
156         HINSTANCE       hModule,
157         HRSRC           hResInfo
158         )
159 {
160         NTSTATUS Status;
161         PVOID Data;
162
163    if (hModule == NULL)
164    {
165      hModule = (HINSTANCE)GetModuleHandleW(NULL);
166    }
167
168         Status = LdrAccessResource (hModule, hResInfo, &Data, NULL);
169         if (!NT_SUCCESS(Status))
170         {
171                 SetLastErrorByStatus (Status);
172                 return NULL;
173         }
174
175         return Data;
176 }
177
178
179 /*
180  * @implemented
181  */
182 DWORD
183 STDCALL
184 SizeofResource (
185         HINSTANCE       hModule,
186         HRSRC           hResInfo
187         )
188 {
189         return ((PIMAGE_RESOURCE_DATA_ENTRY)hResInfo)->Size;
190 }
191
192
193 /*
194  * @unimplemented
195  */
196 WINBOOL
197 STDCALL
198 FreeResource (
199         HGLOBAL hResData
200         )
201 {
202         return TRUE;
203 }
204
205
206 /*
207  * @unimplemented
208  */
209 LPVOID
210 STDCALL
211 LockResource (
212         HGLOBAL hResData
213         )
214 {
215         return hResData;
216 }
217
218
219 /*
220  * @unimplemented
221  */
222 HANDLE
223 STDCALL
224 BeginUpdateResourceW (
225         LPCWSTR pFileName,
226         WINBOOL bDeleteExistingResources
227         )
228 {
229         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
230         return FALSE;
231 }
232
233
234 /*
235  * @unimplemented
236  */
237 HANDLE
238 STDCALL
239 BeginUpdateResourceA (
240         LPCSTR  pFileName,
241         WINBOOL bDeleteExistingResources
242         )
243 {
244         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
245         return FALSE;
246 }
247
248
249 /*
250  * @unimplemented
251  */
252 WINBOOL
253 STDCALL
254 EndUpdateResourceW (
255         HANDLE  hUpdate,
256         WINBOOL fDiscard
257         )
258 {
259         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
260         return FALSE;
261 }
262
263
264 /*
265  * @unimplemented
266  */
267 WINBOOL
268 STDCALL
269 EndUpdateResourceA (
270         HANDLE  hUpdate,
271         WINBOOL fDiscard
272         )
273 {
274         return EndUpdateResourceW(
275                         hUpdate,
276                         fDiscard
277                         );
278 }
279
280
281 /*
282  * @unimplemented
283  */
284 WINBOOL
285 STDCALL
286 EnumResourceLanguagesW (
287         HINSTANCE               hModule,
288         LPCWSTR                 lpType,
289         LPCWSTR                 lpName,
290         ENUMRESLANGPROCW        lpEnumFunc,
291         LONG                    lParam
292         )
293 {
294         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
295         return FALSE;
296 }
297
298
299 WINBOOL
300 STDCALL
301 EnumResourceLanguagesA (
302         HINSTANCE               hModule,
303         LPCSTR                  lpType,
304         LPCSTR                  lpName,
305         ENUMRESLANGPROCA        lpEnumFunc,
306         LONG                    lParam
307         )
308 {
309         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
310         return FALSE;
311 }
312
313
314 /*
315  * @unimplemented
316  */
317 WINBOOL
318 STDCALL
319 EnumResourceNamesW (
320         HINSTANCE               hModule,
321         LPCWSTR                 lpType,
322         ENUMRESNAMEPROCW        lpEnumFunc,
323         LONG                    lParam
324         )
325 {
326         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
327         return FALSE;
328 }
329
330
331 /*
332  * @unimplemented
333  */
334 WINBOOL
335 STDCALL
336 EnumResourceNamesA (
337         HINSTANCE               hModule,
338         LPCSTR                  lpType,
339         ENUMRESNAMEPROCA        lpEnumFunc,
340         LONG                    lParam
341         )
342 {
343         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
344         return FALSE;
345 }
346
347
348 /*
349  * @unimplemented
350  */
351 WINBOOL
352 STDCALL
353 EnumResourceTypesW (
354         HINSTANCE               hModule,
355         ENUMRESTYPEPROCW        lpEnumFunc,
356         LONG                    lParam
357         )
358 {
359         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
360         return FALSE;
361 }
362
363
364 /*
365  * @unimplemented
366  */
367 WINBOOL
368 STDCALL
369 EnumResourceTypesA (
370         HINSTANCE               hModule,
371         ENUMRESTYPEPROCA        lpEnumFunc,
372         LONG                    lParam
373         )
374 {
375         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
376         return FALSE;
377 }
378
379
380 /*
381  * @unimplemented
382  */
383 WINBOOL
384 STDCALL
385 UpdateResourceA (
386         HANDLE  hUpdate,
387         LPCSTR  lpType,
388         LPCSTR  lpName,
389         WORD    wLanguage,
390         LPVOID  lpData,
391         DWORD   cbData
392         )
393 {
394         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
395         return FALSE;
396 }
397
398
399 /*
400  * @unimplemented
401  */
402 WINBOOL
403 STDCALL
404 UpdateResourceW (
405         HANDLE  hUpdate,
406         LPCWSTR lpType,
407         LPCWSTR lpName,
408         WORD    wLanguage,
409         LPVOID  lpData,
410         DWORD   cbData
411         )
412 {
413         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
414         return FALSE;
415 }
416
417 /* EOF */