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
fa5759b9
Commit
fa5759b9
authored
Jun 11, 2021
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ntdll: Simplify the platform-specific dispatcher interface.
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
7954b86f
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
64 additions
and
76 deletions
+64
-76
server.c
dlls/ntdll/unix/server.c
+3
-6
signal_arm.c
dlls/ntdll/unix/signal_arm.c
+14
-15
signal_arm64.c
dlls/ntdll/unix/signal_arm64.c
+13
-15
signal_i386.c
dlls/ntdll/unix/signal_i386.c
+14
-15
signal_x86_64.c
dlls/ntdll/unix/signal_x86_64.c
+14
-15
thread.c
dlls/ntdll/unix/thread.c
+1
-1
unix_private.h
dlls/ntdll/unix/unix_private.h
+5
-9
No files found.
dlls/ntdll/unix/server.c
View file @
fa5759b9
...
...
@@ -357,7 +357,7 @@ static int wait_select_reply( void *cookie )
static
NTSTATUS
invoke_user_apc
(
CONTEXT
*
context
,
const
user_apc_t
*
apc
,
NTSTATUS
status
)
{
return
call_user_apc_dispatcher
(
context
,
apc
->
args
[
0
],
apc
->
args
[
1
],
apc
->
args
[
2
],
wine_server_get_ptr
(
apc
->
func
),
pKiUserApcDispatcher
,
status
);
wine_server_get_ptr
(
apc
->
func
),
status
);
}
...
...
@@ -698,10 +698,7 @@ NTSTATUS WINAPI NtContinue( CONTEXT *context, BOOLEAN alertable )
status
=
server_select
(
NULL
,
0
,
SELECT_INTERRUPTIBLE
|
SELECT_ALERTABLE
,
0
,
NULL
,
NULL
,
&
apc
);
if
(
status
==
STATUS_USER_APC
)
return
invoke_user_apc
(
context
,
&
apc
,
status
);
}
status
=
NtSetContextThread
(
GetCurrentThread
(),
context
);
if
(
!
status
&&
(
context
->
ContextFlags
&
CONTEXT_INTEGER
)
==
CONTEXT_INTEGER
)
signal_restore_full_cpu_context
();
return
status
;
return
signal_set_full_context
(
context
);
}
...
...
@@ -1745,7 +1742,7 @@ NTSTATUS WINAPI NtClose( HANDLE handle )
if
(
!
NtQueryInformationProcess
(
NtCurrentProcess
(),
ProcessDebugPort
,
&
port
,
sizeof
(
port
),
NULL
)
&&
port
)
{
NtCurrentTeb
()
->
ExceptionCode
=
ret
;
call_raise_user_exception_dispatcher
(
pKiRaiseUserExceptionDispatcher
);
call_raise_user_exception_dispatcher
();
}
return
ret
;
}
dlls/ntdll/unix/signal_arm.c
View file @
fa5759b9
...
...
@@ -319,13 +319,15 @@ static void restore_context( const CONTEXT *context, ucontext_t *sigcontext )
/***********************************************************************
* signal_restore_full_cpu_context
*
* Restore full context from syscall frame
* signal_set_full_context
*/
void
signal_restore_full_cpu_context
(
void
)
NTSTATUS
signal_set_full_context
(
CONTEXT
*
context
)
{
arm_thread_data
()
->
syscall_frame
->
restore_flags
|=
CONTEXT_INTEGER
;
NTSTATUS
status
=
NtSetContextThread
(
GetCurrentThread
(),
context
);
if
(
!
status
&&
(
context
->
ContextFlags
&
CONTEXT_INTEGER
)
==
CONTEXT_INTEGER
)
arm_thread_data
()
->
syscall_frame
->
restore_flags
|=
CONTEXT_INTEGER
;
return
status
;
}
...
...
@@ -496,10 +498,8 @@ static void setup_exception( ucontext_t *sigcontext, EXCEPTION_RECORD *rec )
/***********************************************************************
* call_user_apc_dispatcher
*/
NTSTATUS
WINAPI
call_user_apc_dispatcher
(
CONTEXT
*
context
,
ULONG_PTR
arg1
,
ULONG_PTR
arg2
,
ULONG_PTR
arg3
,
PNTAPCFUNC
func
,
void
(
WINAPI
*
dispatcher
)(
CONTEXT
*
,
ULONG_PTR
,
ULONG_PTR
,
ULONG_PTR
,
PNTAPCFUNC
),
NTSTATUS
status
)
NTSTATUS
call_user_apc_dispatcher
(
CONTEXT
*
context
,
ULONG_PTR
arg1
,
ULONG_PTR
arg2
,
ULONG_PTR
arg3
,
PNTAPCFUNC
func
,
NTSTATUS
status
)
{
struct
syscall_frame
*
frame
=
arm_thread_data
()
->
syscall_frame
;
ULONG
sp
=
context
?
context
->
Sp
:
frame
->
sp
;
...
...
@@ -524,7 +524,7 @@ NTSTATUS WINAPI call_user_apc_dispatcher( CONTEXT *context, ULONG_PTR arg1, ULON
stack
->
context
.
R0
=
status
;
}
frame
->
sp
=
(
DWORD
)
stack
;
frame
->
pc
=
(
DWORD
)
d
ispatcher
;
frame
->
pc
=
(
DWORD
)
pKiUserApcD
ispatcher
;
frame
->
r0
=
(
DWORD
)
&
stack
->
context
;
frame
->
r1
=
arg1
;
frame
->
r2
=
arg2
;
...
...
@@ -538,17 +538,16 @@ NTSTATUS WINAPI call_user_apc_dispatcher( CONTEXT *context, ULONG_PTR arg1, ULON
/***********************************************************************
* call_raise_user_exception_dispatcher
*/
void
WINAPI
call_raise_user_exception_dispatcher
(
NTSTATUS
(
WINAPI
*
dispatcher
)(
void
)
)
void
call_raise_user_exception_dispatcher
(
void
)
{
arm_thread_data
()
->
syscall_frame
->
pc
=
(
DWORD
)
d
ispatcher
;
arm_thread_data
()
->
syscall_frame
->
pc
=
(
DWORD
)
pKiRaiseUserExceptionD
ispatcher
;
}
/***********************************************************************
* call_user_exception_dispatcher
*/
NTSTATUS
WINAPI
call_user_exception_dispatcher
(
EXCEPTION_RECORD
*
rec
,
CONTEXT
*
context
,
NTSTATUS
(
WINAPI
*
dispatcher
)(
EXCEPTION_RECORD
*
,
CONTEXT
*
)
)
NTSTATUS
call_user_exception_dispatcher
(
EXCEPTION_RECORD
*
rec
,
CONTEXT
*
context
)
{
struct
syscall_frame
*
frame
=
arm_thread_data
()
->
syscall_frame
;
NTSTATUS
status
=
NtSetContextThread
(
GetCurrentThread
(),
context
);
...
...
@@ -556,7 +555,7 @@ NTSTATUS WINAPI call_user_exception_dispatcher( EXCEPTION_RECORD *rec, CONTEXT *
if
(
status
)
return
status
;
frame
->
r0
=
(
DWORD
)
rec
;
frame
->
r1
=
(
DWORD
)
context
;
frame
->
pc
=
(
DWORD
)
d
ispatcher
;
frame
->
pc
=
(
DWORD
)
pKiUserExceptionD
ispatcher
;
frame
->
restore_flags
|=
CONTEXT_INTEGER
|
CONTEXT_CONTROL
;
return
status
;
}
...
...
dlls/ntdll/unix/signal_arm64.c
View file @
fa5759b9
...
...
@@ -409,13 +409,14 @@ static void restore_fpu( struct syscall_frame *frame, ucontext_t *sigcontext )
/***********************************************************************
* signal_restore_full_cpu_context
*
* Restore full context from syscall frame
* signal_set_full_context
*/
void
signal_restore_full_cpu_context
(
void
)
NTSTATUS
signal_set_full_context
(
CONTEXT
*
context
)
{
raise
(
SIGUSR2
);
NTSTATUS
status
=
NtSetContextThread
(
GetCurrentThread
(),
context
);
if
(
!
status
&&
(
context
->
ContextFlags
&
CONTEXT_INTEGER
)
==
CONTEXT_INTEGER
)
raise
(
SIGUSR2
);
return
status
;
}
...
...
@@ -643,10 +644,8 @@ static void setup_exception( ucontext_t *sigcontext, EXCEPTION_RECORD *rec )
/***********************************************************************
* call_user_apc_dispatcher
*/
NTSTATUS
WINAPI
call_user_apc_dispatcher
(
CONTEXT
*
context
,
ULONG_PTR
arg1
,
ULONG_PTR
arg2
,
ULONG_PTR
arg3
,
PNTAPCFUNC
func
,
void
(
WINAPI
*
dispatcher
)(
CONTEXT
*
,
ULONG_PTR
,
ULONG_PTR
,
ULONG_PTR
,
PNTAPCFUNC
),
NTSTATUS
status
)
NTSTATUS
call_user_apc_dispatcher
(
CONTEXT
*
context
,
ULONG_PTR
arg1
,
ULONG_PTR
arg2
,
ULONG_PTR
arg3
,
PNTAPCFUNC
func
,
NTSTATUS
status
)
{
struct
syscall_frame
*
frame
=
arm64_thread_data
()
->
syscall_frame
;
ULONG64
sp
=
context
?
context
->
Sp
:
frame
->
sp
;
...
...
@@ -666,7 +665,7 @@ NTSTATUS WINAPI call_user_apc_dispatcher( CONTEXT *context, ULONG_PTR arg1, ULON
stack
->
context
.
u
.
s
.
X0
=
status
;
}
frame
->
sp
=
(
ULONG64
)
stack
;
frame
->
pc
=
(
ULONG64
)
d
ispatcher
;
frame
->
pc
=
(
ULONG64
)
pKiUserApcD
ispatcher
;
frame
->
x
[
0
]
=
(
ULONG64
)
&
stack
->
context
;
frame
->
x
[
1
]
=
arg1
;
frame
->
x
[
2
]
=
arg2
;
...
...
@@ -680,17 +679,16 @@ NTSTATUS WINAPI call_user_apc_dispatcher( CONTEXT *context, ULONG_PTR arg1, ULON
/***********************************************************************
* call_raise_user_exception_dispatcher
*/
void
WINAPI
call_raise_user_exception_dispatcher
(
NTSTATUS
(
WINAPI
*
dispatcher
)(
void
)
)
void
call_raise_user_exception_dispatcher
(
void
)
{
arm64_thread_data
()
->
syscall_frame
->
pc
=
(
UINT64
)
d
ispatcher
;
arm64_thread_data
()
->
syscall_frame
->
pc
=
(
UINT64
)
pKiRaiseUserExceptionD
ispatcher
;
}
/***********************************************************************
* call_user_exception_dispatcher
*/
NTSTATUS
WINAPI
call_user_exception_dispatcher
(
EXCEPTION_RECORD
*
rec
,
CONTEXT
*
context
,
NTSTATUS
(
WINAPI
*
dispatcher
)(
EXCEPTION_RECORD
*
,
CONTEXT
*
)
)
NTSTATUS
call_user_exception_dispatcher
(
EXCEPTION_RECORD
*
rec
,
CONTEXT
*
context
)
{
struct
syscall_frame
*
frame
=
arm64_thread_data
()
->
syscall_frame
;
NTSTATUS
status
=
NtSetContextThread
(
GetCurrentThread
(),
context
);
...
...
@@ -698,7 +696,7 @@ NTSTATUS WINAPI call_user_exception_dispatcher( EXCEPTION_RECORD *rec, CONTEXT *
if
(
status
)
return
status
;
frame
->
x
[
0
]
=
(
ULONG64
)
rec
;
frame
->
x
[
1
]
=
(
ULONG64
)
context
;
frame
->
pc
=
(
ULONG64
)
d
ispatcher
;
frame
->
pc
=
(
ULONG64
)
pKiUserExceptionD
ispatcher
;
frame
->
restore_flags
|=
CONTEXT_INTEGER
|
CONTEXT_CONTROL
;
return
status
;
}
...
...
dlls/ntdll/unix/signal_i386.c
View file @
fa5759b9
...
...
@@ -921,13 +921,15 @@ static inline void restore_context( const struct xcontext *xcontext, ucontext_t
/***********************************************************************
* signal_restore_full_cpu_context
*
* Restore full context from syscall frame
* signal_set_full_context
*/
void
signal_restore_full_cpu_context
(
void
)
NTSTATUS
signal_set_full_context
(
CONTEXT
*
context
)
{
x86_thread_data
()
->
syscall_frame
->
restore_flags
|=
CONTEXT_INTEGER
;
NTSTATUS
status
=
NtSetContextThread
(
GetCurrentThread
(),
context
);
if
(
!
status
&&
(
context
->
ContextFlags
&
CONTEXT_INTEGER
)
==
CONTEXT_INTEGER
)
x86_thread_data
()
->
syscall_frame
->
restore_flags
|=
CONTEXT_INTEGER
;
return
status
;
}
...
...
@@ -1566,10 +1568,8 @@ struct apc_stack_layout
/***********************************************************************
* call_user_apc_dispatcher
*/
NTSTATUS
WINAPI
call_user_apc_dispatcher
(
CONTEXT
*
context
,
ULONG_PTR
arg1
,
ULONG_PTR
arg2
,
ULONG_PTR
arg3
,
PNTAPCFUNC
func
,
void
(
WINAPI
*
dispatcher
)(
CONTEXT
*
,
ULONG_PTR
,
ULONG_PTR
,
ULONG_PTR
,
PNTAPCFUNC
),
NTSTATUS
status
)
NTSTATUS
call_user_apc_dispatcher
(
CONTEXT
*
context
,
ULONG_PTR
arg1
,
ULONG_PTR
arg2
,
ULONG_PTR
arg3
,
PNTAPCFUNC
func
,
NTSTATUS
status
)
{
struct
syscall_frame
*
frame
=
x86_thread_data
()
->
syscall_frame
;
ULONG
esp
=
context
?
context
->
Esp
:
frame
->
esp
;
...
...
@@ -1590,7 +1590,7 @@ NTSTATUS WINAPI call_user_apc_dispatcher( CONTEXT *context, ULONG_PTR arg1,
stack
->
func
=
func
;
frame
->
ebp
=
stack
->
context
.
Ebp
;
frame
->
esp
=
(
ULONG
)
stack
-
4
;
frame
->
eip
=
(
ULONG
)
d
ispatcher
;
frame
->
eip
=
(
ULONG
)
pKiUserApcD
ispatcher
;
return
status
;
}
...
...
@@ -1598,17 +1598,16 @@ NTSTATUS WINAPI call_user_apc_dispatcher( CONTEXT *context, ULONG_PTR arg1,
/***********************************************************************
* call_raise_user_exception_dispatcher
*/
void
WINAPI
call_raise_user_exception_dispatcher
(
NTSTATUS
(
WINAPI
*
dispatcher
)(
void
)
)
void
call_raise_user_exception_dispatcher
(
void
)
{
x86_thread_data
()
->
syscall_frame
->
eip
=
(
DWORD
)
d
ispatcher
;
x86_thread_data
()
->
syscall_frame
->
eip
=
(
DWORD
)
pKiRaiseUserExceptionD
ispatcher
;
}
/***********************************************************************
* call_user_exception_dispatcher
*/
NTSTATUS
WINAPI
call_user_exception_dispatcher
(
EXCEPTION_RECORD
*
rec
,
CONTEXT
*
context
,
NTSTATUS
(
WINAPI
*
dispatcher
)(
EXCEPTION_RECORD
*
,
CONTEXT
*
)
)
NTSTATUS
call_user_exception_dispatcher
(
EXCEPTION_RECORD
*
rec
,
CONTEXT
*
context
)
{
struct
syscall_frame
*
frame
=
x86_thread_data
()
->
syscall_frame
;
void
**
stack
=
(
void
**
)
frame
->
esp
;
...
...
@@ -1617,7 +1616,7 @@ NTSTATUS WINAPI call_user_exception_dispatcher( EXCEPTION_RECORD *rec, CONTEXT *
*
(
--
stack
)
=
context
;
*
(
--
stack
)
=
rec
;
frame
->
esp
=
(
ULONG
)
stack
;
frame
->
eip
=
(
ULONG
)
d
ispatcher
;
frame
->
eip
=
(
ULONG
)
pKiUserExceptionD
ispatcher
;
return
STATUS_SUCCESS
;
}
...
...
dlls/ntdll/unix/signal_x86_64.c
View file @
fa5759b9
...
...
@@ -1551,13 +1551,15 @@ static void restore_context( const struct xcontext *xcontext, ucontext_t *sigcon
/***********************************************************************
* signal_restore_full_cpu_context
*
* Restore full context from syscall frame
* signal_set_full_context
*/
void
signal_restore_full_cpu_context
(
void
)
NTSTATUS
signal_set_full_context
(
CONTEXT
*
context
)
{
amd64_thread_data
()
->
syscall_frame
->
restore_flags
|=
CONTEXT_INTEGER
;
NTSTATUS
status
=
NtSetContextThread
(
GetCurrentThread
(),
context
);
if
(
!
status
&&
(
context
->
ContextFlags
&
CONTEXT_INTEGER
)
==
CONTEXT_INTEGER
)
amd64_thread_data
()
->
syscall_frame
->
restore_flags
|=
CONTEXT_INTEGER
;
return
status
;
}
...
...
@@ -1915,10 +1917,8 @@ static void setup_exception( ucontext_t *sigcontext, EXCEPTION_RECORD *rec )
/***********************************************************************
* call_user_apc_dispatcher
*/
NTSTATUS
WINAPI
call_user_apc_dispatcher
(
CONTEXT
*
context
,
ULONG_PTR
arg1
,
ULONG_PTR
arg2
,
ULONG_PTR
arg3
,
PNTAPCFUNC
func
,
void
(
WINAPI
*
dispatcher
)(
CONTEXT
*
,
ULONG_PTR
,
ULONG_PTR
,
ULONG_PTR
,
PNTAPCFUNC
),
NTSTATUS
status
)
NTSTATUS
call_user_apc_dispatcher
(
CONTEXT
*
context
,
ULONG_PTR
arg1
,
ULONG_PTR
arg2
,
ULONG_PTR
arg3
,
PNTAPCFUNC
func
,
NTSTATUS
status
)
{
struct
syscall_frame
*
frame
=
amd64_thread_data
()
->
syscall_frame
;
ULONG64
rsp
=
context
?
context
->
Rsp
:
frame
->
rsp
;
...
...
@@ -1939,7 +1939,7 @@ NTSTATUS WINAPI call_user_apc_dispatcher( CONTEXT *context, ULONG_PTR arg1, ULON
}
frame
->
rbp
=
stack
->
context
.
Rbp
;
frame
->
rsp
=
(
ULONG64
)
stack
-
8
;
frame
->
rip
=
(
ULONG64
)
d
ispatcher
;
frame
->
rip
=
(
ULONG64
)
pKiUserApcD
ispatcher
;
frame
->
rcx
=
(
ULONG64
)
&
stack
->
context
;
frame
->
rdx
=
arg1
;
frame
->
r8
=
arg2
;
...
...
@@ -1953,17 +1953,16 @@ NTSTATUS WINAPI call_user_apc_dispatcher( CONTEXT *context, ULONG_PTR arg1, ULON
/***********************************************************************
* call_raise_user_exception_dispatcher
*/
void
WINAPI
call_raise_user_exception_dispatcher
(
NTSTATUS
(
WINAPI
*
dispatcher
)(
void
)
)
void
call_raise_user_exception_dispatcher
(
void
)
{
amd64_thread_data
()
->
syscall_frame
->
rip
=
(
UINT64
)
d
ispatcher
;
amd64_thread_data
()
->
syscall_frame
->
rip
=
(
UINT64
)
pKiRaiseUserExceptionD
ispatcher
;
}
/***********************************************************************
* call_user_exception_dispatcher
*/
NTSTATUS
WINAPI
call_user_exception_dispatcher
(
EXCEPTION_RECORD
*
rec
,
CONTEXT
*
context
,
NTSTATUS
(
WINAPI
*
dispatcher
)(
EXCEPTION_RECORD
*
,
CONTEXT
*
)
)
NTSTATUS
call_user_exception_dispatcher
(
EXCEPTION_RECORD
*
rec
,
CONTEXT
*
context
)
{
struct
syscall_frame
*
frame
=
amd64_thread_data
()
->
syscall_frame
;
struct
stack_layout
*
stack
;
...
...
@@ -1989,7 +1988,7 @@ NTSTATUS WINAPI call_user_exception_dispatcher( EXCEPTION_RECORD *rec, CONTEXT *
if
(
stack
->
rec
.
ExceptionCode
==
EXCEPTION_BREAKPOINT
)
stack
->
context
.
Rip
--
;
frame
->
rbp
=
context
->
Rbp
;
frame
->
rsp
=
(
ULONG64
)
stack
;
frame
->
rip
=
(
ULONG64
)
d
ispatcher
;
frame
->
rip
=
(
ULONG64
)
pKiUserExceptionD
ispatcher
;
frame
->
restore_flags
|=
CONTEXT_CONTROL
;
return
status
;
}
...
...
dlls/ntdll/unix/thread.c
View file @
fa5759b9
...
...
@@ -1152,7 +1152,7 @@ NTSTATUS WINAPI NtRaiseException( EXCEPTION_RECORD *rec, CONTEXT *context, BOOL
if
(
status
==
DBG_CONTINUE
||
status
==
DBG_EXCEPTION_HANDLED
)
return
NtContinue
(
context
,
FALSE
);
if
(
first_chance
)
return
call_user_exception_dispatcher
(
rec
,
context
,
pKiUserExceptionDispatcher
);
if
(
first_chance
)
return
call_user_exception_dispatcher
(
rec
,
context
);
if
(
rec
->
ExceptionFlags
&
EH_STACK_INVALID
)
ERR_
(
seh
)(
"Exception frame is not in stack limits => unable to dispatch exception.
\n
"
);
...
...
dlls/ntdll/unix/unix_private.h
View file @
fa5759b9
...
...
@@ -249,7 +249,7 @@ extern void DECLSPEC_NORETURN signal_start_thread( PRTL_THREAD_START_ROUTINE ent
extern
void
DECLSPEC_NORETURN
signal_exit_thread
(
int
status
,
void
(
*
func
)(
int
)
)
DECLSPEC_HIDDEN
;
extern
void
__wine_syscall_dispatcher
(
void
)
DECLSPEC_HIDDEN
;
extern
unsigned
int
__wine_syscall_flags
DECLSPEC_HIDDEN
;
extern
void
signal_restore_full_cpu_context
(
void
)
DECLSPEC_HIDDEN
;
extern
NTSTATUS
signal_set_full_context
(
CONTEXT
*
context
)
DECLSPEC_HIDDEN
;
extern
NTSTATUS
get_thread_wow64_context
(
HANDLE
handle
,
void
*
ctx
,
ULONG
size
)
DECLSPEC_HIDDEN
;
extern
NTSTATUS
set_thread_wow64_context
(
HANDLE
handle
,
const
void
*
ctx
,
ULONG
size
)
DECLSPEC_HIDDEN
;
extern
void
fill_vm_counters
(
VM_COUNTERS_EX
*
pvmi
,
int
unix_pid
)
DECLSPEC_HIDDEN
;
...
...
@@ -284,14 +284,10 @@ extern void add_completion( HANDLE handle, ULONG_PTR value, NTSTATUS status, ULO
extern
void
dbg_init
(
void
)
DECLSPEC_HIDDEN
;
extern
NTSTATUS
WINAPI
call_user_apc_dispatcher
(
CONTEXT
*
context_ptr
,
ULONG_PTR
arg1
,
ULONG_PTR
arg2
,
ULONG_PTR
arg3
,
PNTAPCFUNC
func
,
void
(
WINAPI
*
dispatcher
)(
CONTEXT
*
,
ULONG_PTR
,
ULONG_PTR
,
ULONG_PTR
,
PNTAPCFUNC
),
NTSTATUS
status
)
DECLSPEC_HIDDEN
;
extern
NTSTATUS
WINAPI
call_user_exception_dispatcher
(
EXCEPTION_RECORD
*
rec
,
CONTEXT
*
context
,
NTSTATUS
(
WINAPI
*
dispatcher
)(
EXCEPTION_RECORD
*
,
CONTEXT
*
)
)
DECLSPEC_HIDDEN
;
extern
void
WINAPI
call_raise_user_exception_dispatcher
(
NTSTATUS
(
WINAPI
*
dispatcher
)(
void
)
)
DECLSPEC_HIDDEN
;
extern
NTSTATUS
call_user_apc_dispatcher
(
CONTEXT
*
context_ptr
,
ULONG_PTR
arg1
,
ULONG_PTR
arg2
,
ULONG_PTR
arg3
,
PNTAPCFUNC
func
,
NTSTATUS
status
)
DECLSPEC_HIDDEN
;
extern
NTSTATUS
call_user_exception_dispatcher
(
EXCEPTION_RECORD
*
rec
,
CONTEXT
*
context
)
DECLSPEC_HIDDEN
;
extern
void
call_raise_user_exception_dispatcher
(
void
)
DECLSPEC_HIDDEN
;
#define IMAGE_DLLCHARACTERISTICS_PREFER_NATIVE 0x0010
/* Wine extension */
...
...
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