Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
48241e99
Commit
48241e99
authored
Mar 13, 1999
by
Ulrich Weigand
Committed by
Alexandre Julliard
Mar 13, 1999
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implemented UTRegister and UTUnRegister.
parent
39796474
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
302 additions
and
26 deletions
+302
-26
kernel.spec
if1632/kernel.spec
+1
-1
thunk.c
if1632/thunk.c
+1
-0
wprocs.spec
if1632/wprocs.spec
+1
-0
callback.h
include/callback.h
+1
-0
callback.c
misc/callback.c
+11
-0
Makefile.in
relay32/Makefile.in
+2
-1
utthunk.c
relay32/utthunk.c
+285
-0
newfns.c
win32/newfns.c
+0
-24
No files found.
if1632/kernel.spec
View file @
48241e99
...
...
@@ -397,7 +397,7 @@ file krnl386.exe
490 pascal16 KERNEL_490(word) KERNEL_490
491 pascal RegisterServiceProcess(long long) RegisterServiceProcess
492 stub WOAAbort
493
stub UTInit
493
pascal16 UTInit(long long long long) UTInit16
494 stub KERNEL_494
# 495 is present only in Win98
...
...
if1632/thunk.c
View file @
48241e99
...
...
@@ -166,6 +166,7 @@ static const CALLBACKS_TABLE CALLBACK_EmulatorTable =
(
void
*
)
CallTo16_word_www
,
/* CallResourceHandlerProc */
(
void
*
)
CallTo16_long_l
,
/* CallWOWCallbackProc */
THUNK_WOWCallback16Ex
,
/* CallWOWCallback16Ex */
(
void
*
)
CallTo16_long_ll
,
/* CallUTProc */
(
void
*
)
CallTo16_long_l
,
/* CallASPIPostProc */
(
void
*
)
CallTo16_word_lwll
,
/* CallDrvControlProc */
(
void
*
)
CallTo16_word_lwlll
,
/* CallDrvEnableProc */
...
...
if1632/wprocs.spec
View file @
48241e99
...
...
@@ -8,6 +8,7 @@ type win16
18 pascal ReplaceTextDlgProc(word word word long) ReplaceTextDlgProc16
19 pascal PrintSetupDlgProc(word word word long) PrintSetupDlgProc16
20 pascal PrintDlgProc(word word word long) PrintDlgProc16
23 pascal UTGlue16(ptr long ptr long) UTGlue16
24 pascal16 TASK_Reschedule() TASK_Reschedule
27 pascal EntryAddrProc(word word) NE_GetEntryPoint
28 pascal MyAlloc(word word word) NE_AllocateSegment
...
...
include/callback.h
View file @
48241e99
...
...
@@ -42,6 +42,7 @@ typedef struct
DWORD
(
CALLBACK
*
CallWOWCallbackProc
)(
FARPROC16
,
DWORD
);
BOOL
(
CALLBACK
*
CallWOWCallback16Ex
)(
FARPROC16
,
DWORD
,
DWORD
,
LPVOID
,
LPDWORD
);
DWORD
(
CALLBACK
*
CallUTProc
)(
FARPROC16
,
DWORD
,
DWORD
);
LRESULT
(
CALLBACK
*
CallASPIPostProc
)(
FARPROC16
,
SEGPTR
);
/* Following are the graphics driver callbacks */
WORD
(
CALLBACK
*
CallDrvControlProc
)(
FARPROC16
,
SEGPTR
,
WORD
,
...
...
misc/callback.c
View file @
48241e99
...
...
@@ -238,6 +238,16 @@ static BOOL WINAPI CALLBACK_CallWOWCallback16Ex(
}
/**********************************************************************
* CALLBACK_CallUTProc
*/
static
DWORD
WINAPI
CALLBACK_CallUTProc
(
DWORD
w1
,
DWORD
w2
)
{
ERR
(
relay
,
"Cannot call a UT thunk proc in Winelib
\n
"
);
assert
(
FALSE
);
return
0
;
}
/**********************************************************************
* CALLBACK_CallTaskRescheduleProc
*/
static
BOOL
WINAPI
CALLBACK_CallTaskRescheduleProc
(
void
)
...
...
@@ -275,6 +285,7 @@ static const CALLBACKS_TABLE CALLBACK_WinelibTable =
CALLBACK_CallResourceHandlerProc
,
/* CallResourceHandlerProc */
CALLBACK_CallWOWCallbackProc
,
/* CallWOWCallbackProc */
CALLBACK_CallWOWCallback16Ex
,
/* CallWOWCallback16Ex */
CALLBACK_CallUTProc
,
/* CallUTProc */
CALLBACK_CallASPIPostProc
,
/* CallASPIPostProc */
/* The graphics driver callbacks are never used in Winelib */
NULL
,
/* CallDrvControlProc */
...
...
relay32/Makefile.in
View file @
48241e99
...
...
@@ -48,7 +48,8 @@ DLLS = \
C_SRCS
=
\
builtin32.c
\
relay386.c
\
snoop.c
snoop.c
\
utthunk.c
SPEC_FILES
=
$
(
DLLS:.spec
=
.c
)
...
...
relay32/utthunk.c
0 → 100644
View file @
48241e99
/*
* Win32s Universal Thunk API
*
* Copyright 1999 Ulrich Weigand
*/
#include "wintypes.h"
#include "heap.h"
#include "module.h"
#include "selectors.h"
#include "callback.h"
#include "debug.h"
#include "debugstr.h"
#pragma pack(1)
typedef
struct
{
BYTE
popl_eax
;
BYTE
pushl
;
DWORD
target
;
BYTE
pushl_eax
;
BYTE
ljmp
;
DWORD
utglue16
;
}
UT16THUNK
;
typedef
struct
{
BYTE
popl_eax
;
BYTE
pushl
;
DWORD
target
;
BYTE
pushl_eax
;
BYTE
jmp
;
DWORD
utglue32
;
}
UT32THUNK
;
#pragma pack(4)
typedef
struct
tagUTINFO
{
struct
tagUTINFO
*
next
;
HMODULE
hModule
;
HMODULE16
hModule16
;
UT16THUNK
ut16
;
UT32THUNK
ut32
;
}
UTINFO
;
static
UTINFO
*
utAnchor
;
BOOL
WINAPI
UTRegister
(
HMODULE
hModule
,
LPSTR
lpsz16BITDLL
,
LPSTR
lpszInitName
,
LPSTR
lpszProcName
,
FARPROC
*
ppfn32Thunk
,
FARPROC
pfnUT32CallBack
,
LPVOID
lpBuff
);
VOID
WINAPI
UTUnRegister
(
HMODULE
hModule
);
/****************************************************************************
* UTGlue16 (WPROCS.*)
*/
DWORD
WINAPI
UTGlue16
(
LPVOID
lpBuff
,
DWORD
dwUserDefined
,
SEGPTR
translationList
[],
DWORD
(
CALLBACK
*
target
)(
LPVOID
lpBuff
,
DWORD
dwUserDefined
)
)
{
INT
i
;
/* Convert arguments to flat pointers */
if
(
translationList
)
for
(
i
=
0
;
translationList
[
i
];
i
++
)
{
LPVOID
flatPtr
=
PTR_SEG_TO_LIN
(
translationList
[
i
]
);
*
(
LPVOID
*
)
flatPtr
=
PTR_SEG_TO_LIN
(
*
(
SEGPTR
*
)
flatPtr
);
}
/* Call 32-bit routine */
return
target
(
lpBuff
,
dwUserDefined
);
}
/****************************************************************************
* UTGlue32
*/
DWORD
WINAPI
UTGlue32
(
FARPROC16
target
,
LPVOID
lpBuff
,
DWORD
dwUserDefined
,
LPVOID
translationList
[]
)
{
SEGPTR
segBuff
,
*
segptrList
=
NULL
;
INT
i
,
nList
=
0
;
DWORD
retv
;
/* Convert arguments to SEGPTRs */
if
(
translationList
)
for
(
nList
=
0
;
translationList
[
nList
];
nList
++
)
;
if
(
nList
)
{
segptrList
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
SEGPTR
)
*
nList
);
if
(
!
segptrList
)
{
FIXME
(
thunk
,
"Unable to allocate segptrList!"
);
return
0
;
}
for
(
i
=
0
;
i
<
nList
;
i
++
)
segptrList
[
i
]
=
*
(
SEGPTR
*
)
translationList
[
i
]
=
MapLS
(
*
(
LPVOID
*
)
translationList
[
i
]
);
}
segBuff
=
MapLS
(
lpBuff
);
/* Call 16-bit routine */
retv
=
Callbacks
->
CallUTProc
(
target
,
segBuff
,
dwUserDefined
);
/* Free temporary selectors */
UnMapLS
(
segBuff
);
if
(
nList
)
{
for
(
i
=
0
;
i
<
nList
;
i
++
)
UnMapLS
(
segptrList
[
i
]
);
HeapFree
(
GetProcessHeap
(),
0
,
segptrList
);
}
return
retv
;
}
/****************************************************************************
* UTAlloc
*/
static
UTINFO
*
UTAlloc
(
HMODULE
hModule
,
HMODULE16
hModule16
,
FARPROC16
target16
,
FARPROC
target32
)
{
UTINFO
*
ut
=
HeapAlloc
(
SegptrHeap
,
HEAP_ZERO_MEMORY
,
sizeof
(
UTINFO
)
);
if
(
!
ut
)
return
NULL
;
ut
->
hModule
=
hModule
;
ut
->
hModule16
=
hModule16
;
ut
->
ut16
.
popl_eax
=
0x58
;
ut
->
ut16
.
pushl
=
0x68
;
ut
->
ut16
.
target
=
(
DWORD
)
target32
;
ut
->
ut16
.
pushl_eax
=
0x50
;
ut
->
ut16
.
ljmp
=
0xea
;
ut
->
ut16
.
utglue16
=
(
DWORD
)
MODULE_GetWndProcEntry16
(
"UTGlue16"
);
ut
->
ut32
.
popl_eax
=
0x58
;
ut
->
ut32
.
pushl
=
0x68
;
ut
->
ut32
.
target
=
(
DWORD
)
target16
;
ut
->
ut32
.
pushl_eax
=
0x50
;
ut
->
ut32
.
jmp
=
0xe9
;
ut
->
ut32
.
utglue32
=
(
DWORD
)
UTGlue32
-
((
DWORD
)
&
ut
->
ut32
.
utglue32
+
sizeof
(
DWORD
));
ut
->
next
=
utAnchor
;
utAnchor
=
ut
;
return
ut
;
}
/****************************************************************************
* UTFree
*/
static
void
UTFree
(
UTINFO
*
ut
)
{
UTINFO
**
ptr
;
for
(
ptr
=
&
utAnchor
;
*
ptr
;
ptr
=
&
(
*
ptr
)
->
next
)
if
(
*
ptr
==
ut
)
{
*
ptr
=
ut
->
next
;
break
;
}
HeapFree
(
SegptrHeap
,
0
,
ut
);
}
/****************************************************************************
* UTFind
*/
static
UTINFO
*
UTFind
(
HMODULE
hModule
)
{
UTINFO
*
ut
;
for
(
ut
=
utAnchor
;
ut
;
ut
=
ut
->
next
)
if
(
ut
->
hModule
==
hModule
)
break
;
return
ut
;
}
/****************************************************************************
* UTRegister (KERNEL32.697)
*/
BOOL
WINAPI
UTRegister
(
HMODULE
hModule
,
LPSTR
lpsz16BITDLL
,
LPSTR
lpszInitName
,
LPSTR
lpszProcName
,
FARPROC
*
ppfn32Thunk
,
FARPROC
pfnUT32CallBack
,
LPVOID
lpBuff
)
{
UTINFO
*
ut
;
HMODULE16
hModule16
;
FARPROC16
target16
,
init16
;
/* Load 16-bit DLL and get UTProc16 entry point */
if
(
(
hModule16
=
LoadLibrary16
(
lpsz16BITDLL
))
<=
32
||
(
target16
=
WIN32_GetProcAddress16
(
hModule16
,
lpszProcName
))
==
0
)
return
FALSE
;
/* Allocate UTINFO struct */
SYSTEM_LOCK
();
if
(
(
ut
=
UTFind
(
hModule
))
!=
NULL
)
ut
=
NULL
;
else
ut
=
UTAlloc
(
hModule
,
hModule16
,
target16
,
pfnUT32CallBack
);
SYSTEM_UNLOCK
();
if
(
!
ut
)
{
FreeLibrary16
(
hModule16
);
return
FALSE
;
}
/* Call UTInit16 if present */
if
(
lpszInitName
&&
(
init16
=
WIN32_GetProcAddress16
(
hModule16
,
lpszInitName
))
!=
0
)
{
SEGPTR
callback
=
SEGPTR_GET
(
&
ut
->
ut16
);
SEGPTR
segBuff
=
MapLS
(
lpBuff
);
if
(
!
Callbacks
->
CallUTProc
(
init16
,
callback
,
segBuff
)
)
{
UnMapLS
(
segBuff
);
UTUnRegister
(
hModule
);
return
FALSE
;
}
UnMapLS
(
segBuff
);
}
/* Return 32-bit thunk */
*
ppfn32Thunk
=
(
FARPROC
)
&
ut
->
ut32
;
return
TRUE
;
}
/****************************************************************************
* UTUnRegister (KERNEL32.698)
*/
VOID
WINAPI
UTUnRegister
(
HMODULE
hModule
)
{
UTINFO
*
ut
;
HMODULE16
hModule16
=
0
;
SYSTEM_LOCK
();
ut
=
UTFind
(
hModule
);
if
(
!
ut
)
{
hModule16
=
ut
->
hModule16
;
UTFree
(
ut
);
}
SYSTEM_UNLOCK
();
if
(
hModule16
)
FreeLibrary16
(
hModule16
);
}
/****************************************************************************
* UTInit16 (KERNEL.494)
*/
WORD
WINAPI
UTInit16
(
DWORD
x1
,
DWORD
x2
,
DWORD
x3
,
DWORD
x4
)
{
FIXME
(
thunk
,
"(%08lx, %08lx, %08lx, %08lx): stub
\n
"
,
x1
,
x2
,
x3
,
x4
);
return
0
;
}
win32/newfns.c
View file @
48241e99
...
...
@@ -16,30 +16,6 @@ at a later date. */
#include "debug.h"
#include "debugstr.h"
/****************************************************************************
* UTRegister (KERNEL32.697)
*/
BOOL
WINAPI
UTRegister
(
HMODULE
hModule
,
LPSTR
lpsz16BITDLL
,
LPSTR
lpszInitName
,
LPSTR
lpszProcName
,
/*UT32PROC*/
LPVOID
*
ppfn32Thunk
,
/*FARPROC*/
LPVOID
pfnUT32CallBack
,
LPVOID
lpBuff
)
{
FIXME
(
updown
,
"(%#x,...): stub
\n
"
,
hModule
);
return
TRUE
;
}
/****************************************************************************
* UTUnRegister (KERNEL32.698)
*/
BOOL
WINAPI
UTUnRegister
(
HMODULE
hModule
)
{
FIXME
(
updown
,
"(%#x...): stub
\n
"
,
hModule
);
return
TRUE
;
}
/****************************************************************************
* QueryPerformanceCounter (KERNEL32.564)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment