Files
reactos/reactos/lib/kernel32/misc/res.c
T
Royce Mitchell III 74ff28452f * added _DISABLE_TIDENTS macro to disable any ANSI/UNICODE ambiguous elements from the header files.
* enabled _DISABLE_TIDENTS for most ReactOS OS components.
* fixed all errors that resulted from this change
* a few small bugfixes along the way

svn path=/trunk/; revision=5449
2003-08-07 04:03:25 +00:00

418 lines
5.7 KiB
C

/* $Id: res.c,v 1.16 2003/08/07 04:03:23 royce Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT : ReactOS user mode libraries
* MODULE : kernel32.dll
* FILE : reactos/lib/kernel32/misc/res.c
* AUTHOR : ???
*/
#include <k32.h>
#define NDEBUG
#include <kernel32/kernel32.h>
/*
* @implemented
*/
HRSRC
STDCALL
FindResourceA (
HINSTANCE hModule,
LPCSTR lpName,
LPCSTR lpType
)
{
return FindResourceExA (hModule, lpType, lpName, 0);
}
/*
* @implemented
*/
HRSRC
STDCALL
FindResourceExA(
HINSTANCE hModule,
LPCSTR lpType,
LPCSTR lpName,
WORD wLanguage
)
{
UNICODE_STRING TypeU;
UNICODE_STRING NameU;
ANSI_STRING Type;
ANSI_STRING Name;
HRSRC Res;
RtlInitUnicodeString (&NameU,
NULL);
RtlInitUnicodeString (&TypeU,
NULL);
if (HIWORD(lpName) != 0)
{
RtlInitAnsiString (&Name,
(LPSTR)lpName);
RtlAnsiStringToUnicodeString (&NameU,
&Name,
TRUE);
}
else
NameU.Buffer = (PWSTR)lpName;
if (HIWORD(lpType) != 0)
{
RtlInitAnsiString (&Type,
(LPSTR)lpType);
RtlAnsiStringToUnicodeString (&TypeU,
&Type,
TRUE);
}
else
TypeU.Buffer = (PWSTR)lpType;
Res = FindResourceExW (hModule,
TypeU.Buffer,
NameU.Buffer,
wLanguage);
if (HIWORD(lpName) != 0)
RtlFreeUnicodeString (&NameU);
if (HIWORD(lpType) != 0)
RtlFreeUnicodeString (&TypeU);
return Res;
}
/*
* @implemented
*/
HRSRC
STDCALL
FindResourceW (
HINSTANCE hModule,
LPCWSTR lpName,
LPCWSTR lpType
)
{
return FindResourceExW (hModule, lpType, lpName, 0);
}
/*
* @implemented
*/
HRSRC
STDCALL
FindResourceExW (
HINSTANCE hModule,
LPCWSTR lpType,
LPCWSTR lpName,
WORD wLanguage
)
{
PIMAGE_RESOURCE_DATA_ENTRY ResourceDataEntry = NULL;
LDR_RESOURCE_INFO ResourceInfo;
NTSTATUS Status;
if ( hModule == NULL )
hModule = (HINSTANCE)GetModuleHandleW(NULL);
if ( !IS_INTRESOURCE(lpName) && lpName[0] == L'#' ) {
lpName = MAKEINTRESOURCEW(wcstoul(lpName + 1, NULL, 10));
}
if ( !IS_INTRESOURCE(lpType) && lpType[0] == L'#' ) {
lpType = MAKEINTRESOURCEW(wcstoul(lpType + 1, NULL, 10));
}
ResourceInfo.Type = (ULONG)lpType;
ResourceInfo.Name = (ULONG)lpName;
ResourceInfo.Language = (ULONG)wLanguage;
Status = LdrFindResource_U (hModule,
&ResourceInfo,
RESOURCE_DATA_LEVEL,
&ResourceDataEntry);
if (!NT_SUCCESS(Status))
{
SetLastErrorByStatus (Status);
return NULL;
}
return ResourceDataEntry;
}
/*
* @implemented
*/
HGLOBAL
STDCALL
LoadResource (
HINSTANCE hModule,
HRSRC hResInfo
)
{
NTSTATUS Status;
PVOID Data;
if (hModule == NULL)
{
hModule = (HINSTANCE)GetModuleHandleW(NULL);
}
Status = LdrAccessResource (hModule, hResInfo, &Data, NULL);
if (!NT_SUCCESS(Status))
{
SetLastErrorByStatus (Status);
return NULL;
}
return Data;
}
/*
* @implemented
*/
DWORD
STDCALL
SizeofResource (
HINSTANCE hModule,
HRSRC hResInfo
)
{
return ((PIMAGE_RESOURCE_DATA_ENTRY)hResInfo)->Size;
}
/*
* @unimplemented
*/
WINBOOL
STDCALL
FreeResource (
HGLOBAL hResData
)
{
return TRUE;
}
/*
* @unimplemented
*/
LPVOID
STDCALL
LockResource (
HGLOBAL hResData
)
{
return hResData;
}
/*
* @unimplemented
*/
HANDLE
STDCALL
BeginUpdateResourceW (
LPCWSTR pFileName,
WINBOOL bDeleteExistingResources
)
{
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/*
* @unimplemented
*/
HANDLE
STDCALL
BeginUpdateResourceA (
LPCSTR pFileName,
WINBOOL bDeleteExistingResources
)
{
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/*
* @unimplemented
*/
WINBOOL
STDCALL
EndUpdateResourceW (
HANDLE hUpdate,
WINBOOL fDiscard
)
{
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/*
* @unimplemented
*/
WINBOOL
STDCALL
EndUpdateResourceA (
HANDLE hUpdate,
WINBOOL fDiscard
)
{
return EndUpdateResourceW(
hUpdate,
fDiscard
);
}
/*
* @unimplemented
*/
WINBOOL
STDCALL
EnumResourceLanguagesW (
HINSTANCE hModule,
LPCWSTR lpType,
LPCWSTR lpName,
ENUMRESLANGPROCW lpEnumFunc,
LONG lParam
)
{
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
WINBOOL
STDCALL
EnumResourceLanguagesA (
HINSTANCE hModule,
LPCSTR lpType,
LPCSTR lpName,
ENUMRESLANGPROCA lpEnumFunc,
LONG lParam
)
{
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/*
* @unimplemented
*/
WINBOOL
STDCALL
EnumResourceNamesW (
HINSTANCE hModule,
LPCWSTR lpType,
ENUMRESNAMEPROCW lpEnumFunc,
LONG lParam
)
{
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/*
* @unimplemented
*/
WINBOOL
STDCALL
EnumResourceNamesA (
HINSTANCE hModule,
LPCSTR lpType,
ENUMRESNAMEPROCA lpEnumFunc,
LONG lParam
)
{
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/*
* @unimplemented
*/
WINBOOL
STDCALL
EnumResourceTypesW (
HINSTANCE hModule,
ENUMRESTYPEPROCW lpEnumFunc,
LONG lParam
)
{
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/*
* @unimplemented
*/
WINBOOL
STDCALL
EnumResourceTypesA (
HINSTANCE hModule,
ENUMRESTYPEPROCA lpEnumFunc,
LONG lParam
)
{
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/*
* @unimplemented
*/
WINBOOL
STDCALL
UpdateResourceA (
HANDLE hUpdate,
LPCSTR lpType,
LPCSTR lpName,
WORD wLanguage,
LPVOID lpData,
DWORD cbData
)
{
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/*
* @unimplemented
*/
WINBOOL
STDCALL
UpdateResourceW (
HANDLE hUpdate,
LPCWSTR lpType,
LPCWSTR lpName,
WORD wLanguage,
LPVOID lpData,
DWORD cbData
)
{
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/* EOF */