Store the kernel32 module handle globally to avoid some
GetModuleHandle calls that can cause deadlocks with the loader section. Moved some 16-bit definitions out of kernel_private.h.
This commit is contained in:
parent
a4d1826c69
commit
e92b7eed7e
|
@ -41,6 +41,7 @@
|
||||||
#include "wine/winbase16.h"
|
#include "wine/winbase16.h"
|
||||||
|
|
||||||
#include "kernel_private.h"
|
#include "kernel_private.h"
|
||||||
|
#include "toolhelp.h"
|
||||||
#include "miscemu.h"
|
#include "miscemu.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
#include "winuser.h"
|
#include "winuser.h"
|
||||||
#include "winnls.h"
|
#include "winnls.h"
|
||||||
#include "wine/unicode.h"
|
#include "wine/unicode.h"
|
||||||
|
#include "kernel_private.h"
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
@ -172,7 +172,7 @@ DWORD WINAPI FormatMessageA(
|
||||||
}
|
}
|
||||||
if ((dwFlags & FORMAT_MESSAGE_FROM_SYSTEM) && (!bufsize))
|
if ((dwFlags & FORMAT_MESSAGE_FROM_SYSTEM) && (!bufsize))
|
||||||
{
|
{
|
||||||
hmodule = GetModuleHandleA("kernel32");
|
hmodule = kernel32_handle;
|
||||||
bufsize=load_messageA(hmodule,dwMessageId,dwLanguageId,NULL,100);
|
bufsize=load_messageA(hmodule,dwMessageId,dwLanguageId,NULL,100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -399,7 +399,7 @@ DWORD WINAPI FormatMessageW(
|
||||||
}
|
}
|
||||||
if ((dwFlags & FORMAT_MESSAGE_FROM_SYSTEM) && (!bufsize))
|
if ((dwFlags & FORMAT_MESSAGE_FROM_SYSTEM) && (!bufsize))
|
||||||
{
|
{
|
||||||
hmodule = GetModuleHandleA("kernel32");
|
hmodule = kernel32_handle;
|
||||||
bufsize=load_messageA(hmodule,dwMessageId,dwLanguageId,NULL,100);
|
bufsize=load_messageA(hmodule,dwMessageId,dwLanguageId,NULL,100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,7 @@
|
||||||
#include "thread.h"
|
#include "thread.h"
|
||||||
#include "stackframe.h"
|
#include "stackframe.h"
|
||||||
#include "wincon.h"
|
#include "wincon.h"
|
||||||
|
#include "toolhelp.h"
|
||||||
#include "kernel_private.h"
|
#include "kernel_private.h"
|
||||||
#include "console_private.h"
|
#include "console_private.h"
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,8 @@ static inline HANDLE console_handle_unmap(HANDLE h)
|
||||||
return h != INVALID_HANDLE_VALUE ? (HANDLE)((DWORD)h ^ 3) : INVALID_HANDLE_VALUE;
|
return h != INVALID_HANDLE_VALUE ? (HANDLE)((DWORD)h ^ 3) : INVALID_HANDLE_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern HMODULE kernel32_handle;
|
||||||
|
|
||||||
/* Size of per-process table of DOS handles */
|
/* Size of per-process table of DOS handles */
|
||||||
#define DOS_TABLE_SIZE 256
|
#define DOS_TABLE_SIZE 256
|
||||||
extern HANDLE dos_handles[DOS_TABLE_SIZE];
|
extern HANDLE dos_handles[DOS_TABLE_SIZE];
|
||||||
|
@ -65,12 +67,6 @@ extern void SELECTOR_FreeBlock( WORD sel );
|
||||||
#define IS_SELECTOR_32BIT(sel) \
|
#define IS_SELECTOR_32BIT(sel) \
|
||||||
(wine_ldt_is_system(sel) || (wine_ldt_copy.flags[LOWORD(sel) >> 3] & WINE_LDT_FLAGS_32BIT))
|
(wine_ldt_is_system(sel) || (wine_ldt_copy.flags[LOWORD(sel) >> 3] & WINE_LDT_FLAGS_32BIT))
|
||||||
|
|
||||||
extern HGLOBAL16 GLOBAL_CreateBlock( UINT16 flags, const void *ptr, DWORD size,
|
|
||||||
HGLOBAL16 hOwner, unsigned char selflags );
|
|
||||||
extern BOOL16 GLOBAL_FreeBlock( HGLOBAL16 handle );
|
|
||||||
extern BOOL16 GLOBAL_MoveBlock( HGLOBAL16 handle, const void *ptr, DWORD size );
|
|
||||||
extern HGLOBAL16 GLOBAL_Alloc( WORD flags, DWORD size, HGLOBAL16 hOwner, unsigned char selflags );
|
|
||||||
|
|
||||||
/* this structure is always located at offset 0 of the DGROUP segment */
|
/* this structure is always located at offset 0 of the DGROUP segment */
|
||||||
#include "pshpack1.h"
|
#include "pshpack1.h"
|
||||||
typedef struct
|
typedef struct
|
||||||
|
|
|
@ -41,14 +41,13 @@
|
||||||
#include "winnls.h"
|
#include "winnls.h"
|
||||||
#include "winerror.h"
|
#include "winerror.h"
|
||||||
#include "thread.h"
|
#include "thread.h"
|
||||||
|
#include "kernel_private.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(nls);
|
WINE_DEFAULT_DEBUG_CHANNEL(nls);
|
||||||
|
|
||||||
#define LOCALE_LOCALEINFOFLAGSMASK (LOCALE_NOUSEROVERRIDE|LOCALE_USE_CP_ACP|LOCALE_RETURN_NUMBER)
|
#define LOCALE_LOCALEINFOFLAGSMASK (LOCALE_NOUSEROVERRIDE|LOCALE_USE_CP_ACP|LOCALE_RETURN_NUMBER)
|
||||||
|
|
||||||
static const WCHAR kernel32W[] = { 'K','E','R','N','E','L','3','2','\0' };
|
|
||||||
|
|
||||||
/* current code pages */
|
/* current code pages */
|
||||||
static const union cptable *ansi_cptable;
|
static const union cptable *ansi_cptable;
|
||||||
static const union cptable *oem_cptable;
|
static const union cptable *oem_cptable;
|
||||||
|
@ -383,7 +382,6 @@ found:
|
||||||
static LANGID get_language_id(LPCSTR Lang, LPCSTR Country, LPCSTR Charset, LPCSTR Dialect)
|
static LANGID get_language_id(LPCSTR Lang, LPCSTR Country, LPCSTR Charset, LPCSTR Dialect)
|
||||||
{
|
{
|
||||||
LANG_FIND_DATA l_data;
|
LANG_FIND_DATA l_data;
|
||||||
HMODULE hKernel32;
|
|
||||||
|
|
||||||
if(!Lang)
|
if(!Lang)
|
||||||
{
|
{
|
||||||
|
@ -397,9 +395,7 @@ static LANGID get_language_id(LPCSTR Lang, LPCSTR Country, LPCSTR Charset, LPCST
|
||||||
if (Country) strcpynAtoW(l_data.country, Country, sizeof(l_data.country));
|
if (Country) strcpynAtoW(l_data.country, Country, sizeof(l_data.country));
|
||||||
else l_data.country[0] = 0;
|
else l_data.country[0] = 0;
|
||||||
|
|
||||||
hKernel32 = GetModuleHandleW(kernel32W);
|
EnumResourceLanguagesW(kernel32_handle, (LPCWSTR)RT_STRING, (LPCWSTR)LOCALE_ILANGUAGE,
|
||||||
|
|
||||||
EnumResourceLanguagesW(hKernel32, (LPCWSTR)RT_STRING, (LPCWSTR)LOCALE_ILANGUAGE,
|
|
||||||
find_language_id_proc, (LPARAM)&l_data);
|
find_language_id_proc, (LPARAM)&l_data);
|
||||||
|
|
||||||
if (l_data.n_found == 1) goto END;
|
if (l_data.n_found == 1) goto END;
|
||||||
|
@ -410,7 +406,7 @@ static LANGID get_language_id(LPCSTR Lang, LPCSTR Country, LPCSTR Charset, LPCST
|
||||||
{
|
{
|
||||||
/* retry without country name */
|
/* retry without country name */
|
||||||
l_data.country[0] = 0;
|
l_data.country[0] = 0;
|
||||||
EnumResourceLanguagesW(hKernel32, (LPCWSTR)RT_STRING, (LPCWSTR)LOCALE_ILANGUAGE,
|
EnumResourceLanguagesW(kernel32_handle, (LPCWSTR)RT_STRING, (LPCWSTR)LOCALE_ILANGUAGE,
|
||||||
find_language_id_proc, (LONG)&l_data);
|
find_language_id_proc, (LONG)&l_data);
|
||||||
if (!l_data.n_found)
|
if (!l_data.n_found)
|
||||||
{
|
{
|
||||||
|
@ -882,7 +878,6 @@ INT WINAPI GetLocaleInfoW( LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len )
|
||||||
LANGID lang_id;
|
LANGID lang_id;
|
||||||
HRSRC hrsrc;
|
HRSRC hrsrc;
|
||||||
HGLOBAL hmem;
|
HGLOBAL hmem;
|
||||||
HMODULE hModule;
|
|
||||||
INT ret;
|
INT ret;
|
||||||
UINT lcflags;
|
UINT lcflags;
|
||||||
const WCHAR *p;
|
const WCHAR *p;
|
||||||
|
@ -945,13 +940,13 @@ INT WINAPI GetLocaleInfoW( LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len )
|
||||||
if (SUBLANGID(lang_id) == SUBLANG_NEUTRAL)
|
if (SUBLANGID(lang_id) == SUBLANG_NEUTRAL)
|
||||||
lang_id = MAKELANGID(PRIMARYLANGID(lang_id), SUBLANG_DEFAULT);
|
lang_id = MAKELANGID(PRIMARYLANGID(lang_id), SUBLANG_DEFAULT);
|
||||||
|
|
||||||
hModule = GetModuleHandleW( kernel32W );
|
if (!(hrsrc = FindResourceExW( kernel32_handle, (LPWSTR)RT_STRING,
|
||||||
if (!(hrsrc = FindResourceExW( hModule, (LPWSTR)RT_STRING, (LPCWSTR)((lctype >> 4) + 1), lang_id )))
|
(LPCWSTR)((lctype >> 4) + 1), lang_id )))
|
||||||
{
|
{
|
||||||
SetLastError( ERROR_INVALID_FLAGS ); /* no such lctype */
|
SetLastError( ERROR_INVALID_FLAGS ); /* no such lctype */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (!(hmem = LoadResource( hModule, hrsrc )))
|
if (!(hmem = LoadResource( kernel32_handle, hrsrc )))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
p = LockResource( hmem );
|
p = LockResource( hmem );
|
||||||
|
@ -1675,7 +1670,7 @@ LCID WINAPI ConvertDefaultLocale( LCID lcid )
|
||||||
BOOL WINAPI IsValidLocale( LCID lcid, DWORD flags )
|
BOOL WINAPI IsValidLocale( LCID lcid, DWORD flags )
|
||||||
{
|
{
|
||||||
/* check if language is registered in the kernel32 resources */
|
/* check if language is registered in the kernel32 resources */
|
||||||
return FindResourceExW( GetModuleHandleW(kernel32W), (LPWSTR)RT_STRING,
|
return FindResourceExW( kernel32_handle, (LPWSTR)RT_STRING,
|
||||||
(LPCWSTR)LOCALE_ILANGUAGE, LANGIDFROMLCID(lcid)) != 0;
|
(LPCWSTR)LOCALE_ILANGUAGE, LANGIDFROMLCID(lcid)) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1716,7 +1711,7 @@ static BOOL CALLBACK enum_lang_proc_w( HMODULE hModule, LPCWSTR type,
|
||||||
BOOL WINAPI EnumSystemLocalesA( LOCALE_ENUMPROCA lpfnLocaleEnum, DWORD dwFlags )
|
BOOL WINAPI EnumSystemLocalesA( LOCALE_ENUMPROCA lpfnLocaleEnum, DWORD dwFlags )
|
||||||
{
|
{
|
||||||
TRACE("(%p,%08lx)\n", lpfnLocaleEnum, dwFlags);
|
TRACE("(%p,%08lx)\n", lpfnLocaleEnum, dwFlags);
|
||||||
EnumResourceLanguagesA( GetModuleHandleW(kernel32W), (LPSTR)RT_STRING,
|
EnumResourceLanguagesA( kernel32_handle, (LPSTR)RT_STRING,
|
||||||
(LPCSTR)LOCALE_ILANGUAGE, enum_lang_proc_a,
|
(LPCSTR)LOCALE_ILANGUAGE, enum_lang_proc_a,
|
||||||
(LONG)lpfnLocaleEnum);
|
(LONG)lpfnLocaleEnum);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -1731,7 +1726,7 @@ BOOL WINAPI EnumSystemLocalesA( LOCALE_ENUMPROCA lpfnLocaleEnum, DWORD dwFlags )
|
||||||
BOOL WINAPI EnumSystemLocalesW( LOCALE_ENUMPROCW lpfnLocaleEnum, DWORD dwFlags )
|
BOOL WINAPI EnumSystemLocalesW( LOCALE_ENUMPROCW lpfnLocaleEnum, DWORD dwFlags )
|
||||||
{
|
{
|
||||||
TRACE("(%p,%08lx)\n", lpfnLocaleEnum, dwFlags);
|
TRACE("(%p,%08lx)\n", lpfnLocaleEnum, dwFlags);
|
||||||
EnumResourceLanguagesW( GetModuleHandleW(kernel32W), (LPWSTR)RT_STRING,
|
EnumResourceLanguagesW( kernel32_handle, (LPWSTR)RT_STRING,
|
||||||
(LPCWSTR)LOCALE_ILANGUAGE, enum_lang_proc_w,
|
(LPCWSTR)LOCALE_ILANGUAGE, enum_lang_proc_w,
|
||||||
(LONG)lpfnLocaleEnum);
|
(LONG)lpfnLocaleEnum);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -2548,7 +2543,6 @@ static BOOL NLS_RegGetDword(HKEY hKey, LPCWSTR szValueName, DWORD *lpVal)
|
||||||
|
|
||||||
static BOOL NLS_GetLanguageGroupName(LGRPID lgrpid, LPWSTR szName, ULONG nameSize)
|
static BOOL NLS_GetLanguageGroupName(LGRPID lgrpid, LPWSTR szName, ULONG nameSize)
|
||||||
{
|
{
|
||||||
HMODULE hModule = GetModuleHandleW(kernel32W);
|
|
||||||
LANGID langId;
|
LANGID langId;
|
||||||
LPCWSTR szResourceName = (LPCWSTR)(((lgrpid + 0x2000) >> 4) + 1);
|
LPCWSTR szResourceName = (LPCWSTR)(((lgrpid + 0x2000) >> 4) + 1);
|
||||||
HRSRC hResource;
|
HRSRC hResource;
|
||||||
|
@ -2560,11 +2554,11 @@ static BOOL NLS_GetLanguageGroupName(LGRPID lgrpid, LPWSTR szName, ULONG nameSiz
|
||||||
if (SUBLANGID(langId) == SUBLANG_NEUTRAL)
|
if (SUBLANGID(langId) == SUBLANG_NEUTRAL)
|
||||||
langId = MAKELANGID( PRIMARYLANGID(langId), SUBLANG_DEFAULT );
|
langId = MAKELANGID( PRIMARYLANGID(langId), SUBLANG_DEFAULT );
|
||||||
|
|
||||||
hResource = FindResourceExW( hModule, (LPWSTR)RT_STRING, szResourceName, langId );
|
hResource = FindResourceExW( kernel32_handle, (LPWSTR)RT_STRING, szResourceName, langId );
|
||||||
|
|
||||||
if (hResource)
|
if (hResource)
|
||||||
{
|
{
|
||||||
HGLOBAL hResDir = LoadResource( hModule, hResource );
|
HGLOBAL hResDir = LoadResource( kernel32_handle, hResource );
|
||||||
|
|
||||||
if (hResDir)
|
if (hResDir)
|
||||||
{
|
{
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
#include "module.h"
|
#include "module.h"
|
||||||
#include "stackframe.h"
|
#include "stackframe.h"
|
||||||
#include "builtin16.h"
|
#include "builtin16.h"
|
||||||
|
#include "toolhelp.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(fixup);
|
WINE_DEFAULT_DEBUG_CHANNEL(fixup);
|
||||||
|
|
|
@ -64,6 +64,7 @@ static BOOL oem_file_apis;
|
||||||
|
|
||||||
static unsigned int server_startticks;
|
static unsigned int server_startticks;
|
||||||
int main_create_flags = 0;
|
int main_create_flags = 0;
|
||||||
|
HMODULE kernel32_handle = 0;
|
||||||
|
|
||||||
/* Process flags */
|
/* Process flags */
|
||||||
#define PDB32_DEBUGGED 0x0001 /* Process is being debugged */
|
#define PDB32_DEBUGGED 0x0001 /* Process is being debugged */
|
||||||
|
@ -613,6 +614,7 @@ static RTL_USER_PROCESS_PARAMETERS *init_user_process_params( size_t info_size )
|
||||||
*/
|
*/
|
||||||
static BOOL process_init( char *argv[], char **environ )
|
static BOOL process_init( char *argv[], char **environ )
|
||||||
{
|
{
|
||||||
|
static const WCHAR kernel32W[] = {'k','e','r','n','e','l','3','2',0};
|
||||||
BOOL ret;
|
BOOL ret;
|
||||||
size_t info_size = 0;
|
size_t info_size = 0;
|
||||||
RTL_USER_PROCESS_PARAMETERS *params;
|
RTL_USER_PROCESS_PARAMETERS *params;
|
||||||
|
@ -698,6 +700,8 @@ static BOOL process_init( char *argv[], char **environ )
|
||||||
params->hStdError = hstderr;
|
params->hStdError = hstderr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kernel32_handle = GetModuleHandleW(kernel32W);
|
||||||
|
|
||||||
LOCALE_Init();
|
LOCALE_Init();
|
||||||
|
|
||||||
/* Copy the parent environment */
|
/* Copy the parent environment */
|
||||||
|
|
|
@ -127,7 +127,7 @@ static void _write_ftprolog(LPBYTE relayCode ,DWORD *targetTable) {
|
||||||
*x++ = 0x0f;*x++=0xb6;*x++=0xd1; /* movzbl edx,cl */
|
*x++ = 0x0f;*x++=0xb6;*x++=0xd1; /* movzbl edx,cl */
|
||||||
*x++ = 0x8B;*x++=0x14;*x++=0x95;*(DWORD**)x= targetTable;
|
*x++ = 0x8B;*x++=0x14;*x++=0x95;*(DWORD**)x= targetTable;
|
||||||
x+=4; /* mov edx, [4*edx + targetTable] */
|
x+=4; /* mov edx, [4*edx + targetTable] */
|
||||||
*x++ = 0x68; *(DWORD*)x = (DWORD)GetProcAddress(GetModuleHandleA("KERNEL32"),"FT_Prolog");
|
*x++ = 0x68; *(DWORD*)x = (DWORD)GetProcAddress(kernel32_handle,"FT_Prolog");
|
||||||
x+=4; /* push FT_Prolog */
|
x+=4; /* push FT_Prolog */
|
||||||
*x++ = 0xC3; /* lret */
|
*x++ = 0xC3; /* lret */
|
||||||
/* fill rest with 0xCC / int 3 */
|
/* fill rest with 0xCC / int 3 */
|
||||||
|
@ -154,7 +154,7 @@ static void _write_qtthunk(
|
||||||
*x++ = 0x8A;*x++=0x4D;*x++=0xFC; /* movb cl,[ebp-04] */
|
*x++ = 0x8A;*x++=0x4D;*x++=0xFC; /* movb cl,[ebp-04] */
|
||||||
*x++ = 0x8B;*x++=0x14;*x++=0x8D;*(DWORD**)x= targetTable;
|
*x++ = 0x8B;*x++=0x14;*x++=0x8D;*(DWORD**)x= targetTable;
|
||||||
x+=4; /* mov edx, [4*ecx + targetTable */
|
x+=4; /* mov edx, [4*ecx + targetTable */
|
||||||
*x++ = 0xB8; *(DWORD*)x = (DWORD)GetProcAddress(GetModuleHandleA("KERNEL32"),"QT_Thunk");
|
*x++ = 0xB8; *(DWORD*)x = (DWORD)GetProcAddress(kernel32_handle,"QT_Thunk");
|
||||||
x+=4; /* mov eax , QT_Thunk */
|
x+=4; /* mov eax , QT_Thunk */
|
||||||
*x++ = 0xFF; *x++ = 0xE0; /* jmp eax */
|
*x++ = 0xFF; *x++ = 0xE0; /* jmp eax */
|
||||||
/* should fill the rest of the 32 bytes with 0xCC */
|
/* should fill the rest of the 32 bytes with 0xCC */
|
||||||
|
@ -817,13 +817,12 @@ LPVOID WINAPI ThunkInitLSF(
|
||||||
LPCSTR dll16, /* [in] name of win16 dll */
|
LPCSTR dll16, /* [in] name of win16 dll */
|
||||||
LPCSTR dll32 /* [in] name of win32 dll */
|
LPCSTR dll32 /* [in] name of win32 dll */
|
||||||
) {
|
) {
|
||||||
HMODULE hkrnl32 = GetModuleHandleA("KERNEL32");
|
|
||||||
LPDWORD addr,addr2;
|
LPDWORD addr,addr2;
|
||||||
|
|
||||||
/* FIXME: add checks for valid code ... */
|
/* FIXME: add checks for valid code ... */
|
||||||
/* write pointers to kernel32.89 and kernel32.90 (+ordinal base of 1) */
|
/* write pointers to kernel32.89 and kernel32.90 (+ordinal base of 1) */
|
||||||
*(DWORD*)(thunk+0x35) = (DWORD)GetProcAddress(hkrnl32,(LPSTR)90);
|
*(DWORD*)(thunk+0x35) = (DWORD)GetProcAddress(kernel32_handle,(LPSTR)90);
|
||||||
*(DWORD*)(thunk+0x6D) = (DWORD)GetProcAddress(hkrnl32,(LPSTR)89);
|
*(DWORD*)(thunk+0x6D) = (DWORD)GetProcAddress(kernel32_handle,(LPSTR)89);
|
||||||
|
|
||||||
|
|
||||||
if (!(addr = _loadthunk( dll16, thkbuf, dll32, NULL, len )))
|
if (!(addr = _loadthunk( dll16, thkbuf, dll32, NULL, len )))
|
||||||
|
@ -1973,7 +1972,7 @@ SEGPTR WINAPI Get16DLLAddress(HMODULE16 handle, LPSTR func_name)
|
||||||
|
|
||||||
/* jmpl QT_Thunk */
|
/* jmpl QT_Thunk */
|
||||||
*thunk++ = 0xea;
|
*thunk++ = 0xea;
|
||||||
*(FARPROC *)thunk = GetProcAddress(GetModuleHandleA("KERNEL32"),"QT_Thunk");
|
*(FARPROC *)thunk = GetProcAddress(kernel32_handle,"QT_Thunk");
|
||||||
thunk += sizeof(FARPROC16);
|
thunk += sizeof(FARPROC16);
|
||||||
*(WORD *)thunk = wine_get_cs();
|
*(WORD *)thunk = wine_get_cs();
|
||||||
|
|
||||||
|
|
|
@ -103,6 +103,13 @@ BOOL16 WINAPI GlobalEntryHandle16( GLOBALENTRY *pGlobal, HGLOBAL16 hItem );
|
||||||
BOOL16 WINAPI GlobalEntryModule16( GLOBALENTRY *pGlobal, HMODULE16 hModule,
|
BOOL16 WINAPI GlobalEntryModule16( GLOBALENTRY *pGlobal, HMODULE16 hModule,
|
||||||
WORD wSeg );
|
WORD wSeg );
|
||||||
|
|
||||||
|
/* FIXME: Wine internal functions */
|
||||||
|
extern HGLOBAL16 GLOBAL_CreateBlock( UINT16 flags, const void *ptr, DWORD size,
|
||||||
|
HGLOBAL16 hOwner, unsigned char selflags );
|
||||||
|
extern BOOL16 GLOBAL_FreeBlock( HGLOBAL16 handle );
|
||||||
|
extern BOOL16 GLOBAL_MoveBlock( HGLOBAL16 handle, const void *ptr, DWORD size );
|
||||||
|
extern HGLOBAL16 GLOBAL_Alloc( WORD flags, DWORD size, HGLOBAL16 hOwner, unsigned char selflags );
|
||||||
|
|
||||||
/* Local heap */
|
/* Local heap */
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
|
Loading…
Reference in New Issue