Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
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-winehq
Commits
84516400
Commit
84516400
authored
Jul 27, 2015
by
Sebastian Lackner
Committed by
Alexandre Julliard
Jul 29, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ntdll: Implement ThreadQuerySetWin32StartAddress info class in NtQueryInformationThread.
parent
6ab494ce
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
29 additions
and
8 deletions
+29
-8
thread.c
dlls/ntdll/thread.c
+17
-1
server_protocol.h
include/wine/server_protocol.h
+3
-2
protocol.def
server/protocol.def
+1
-0
request.h
server/request.h
+6
-5
thread.c
server/thread.c
+1
-0
trace.c
server/trace.c
+1
-0
No files found.
dlls/ntdll/thread.c
View file @
84516400
...
...
@@ -1086,12 +1086,28 @@ NTSTATUS WINAPI NtQueryInformationThread( HANDLE handle, THREADINFOCLASS class,
SERVER_END_REQ
;
return
status
;
}
case
ThreadQuerySetWin32StartAddress
:
{
SERVER_START_REQ
(
get_thread_info
)
{
req
->
handle
=
wine_server_obj_handle
(
handle
);
req
->
tid_in
=
0
;
status
=
wine_server_call
(
req
);
if
(
status
==
STATUS_SUCCESS
)
{
PRTL_THREAD_START_ROUTINE
entry
=
wine_server_get_ptr
(
reply
->
entry_point
);
if
(
data
)
memcpy
(
data
,
&
entry
,
min
(
length
,
sizeof
(
entry
)
)
);
if
(
ret_len
)
*
ret_len
=
min
(
length
,
sizeof
(
entry
)
);
}
}
SERVER_END_REQ
;
return
status
;
}
case
ThreadPriority
:
case
ThreadBasePriority
:
case
ThreadImpersonationToken
:
case
ThreadEnableAlignmentFaultFixup
:
case
ThreadEventPair_Reusable
:
case
ThreadQuerySetWin32StartAddress
:
case
ThreadZeroTlsCell
:
case
ThreadPerformanceCount
:
case
ThreadIdealProcessor
:
...
...
include/wine/server_protocol.h
View file @
84516400
...
...
@@ -892,11 +892,12 @@ struct get_thread_info_reply
process_id_t
pid
;
thread_id_t
tid
;
client_ptr_t
teb
;
client_ptr_t
entry_point
;
affinity_t
affinity
;
int
exit_code
;
int
priority
;
int
last
;
char
__pad_
44
[
4
];
char
__pad_
52
[
4
];
};
...
...
@@ -6113,6 +6114,6 @@ union generic_reply
struct
terminate_job_reply
terminate_job_reply
;
};
#define SERVER_PROTOCOL_VERSION 48
3
#define SERVER_PROTOCOL_VERSION 48
4
#endif
/* __WINE_WINE_SERVER_PROTOCOL_H */
server/protocol.def
View file @
84516400
...
...
@@ -841,6 +841,7 @@ struct rawinput_device
process_id_t pid; /* server process id */
thread_id_t tid; /* server thread id */
client_ptr_t teb; /* thread teb pointer */
client_ptr_t entry_point; /* thread entry point */
affinity_t affinity; /* thread affinity mask */
int exit_code; /* thread exit code */
int priority; /* thread priority level */
...
...
server/request.h
View file @
84516400
...
...
@@ -768,11 +768,12 @@ C_ASSERT( sizeof(struct get_thread_info_request) == 24 );
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
pid
)
==
8
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
tid
)
==
12
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
teb
)
==
16
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
affinity
)
==
24
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
exit_code
)
==
32
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
priority
)
==
36
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
last
)
==
40
);
C_ASSERT
(
sizeof
(
struct
get_thread_info_reply
)
==
48
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
entry_point
)
==
24
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
affinity
)
==
32
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
exit_code
)
==
40
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
priority
)
==
44
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_info_reply
,
last
)
==
48
);
C_ASSERT
(
sizeof
(
struct
get_thread_info_reply
)
==
56
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_times_request
,
handle
)
==
12
);
C_ASSERT
(
sizeof
(
struct
get_thread_times_request
)
==
16
);
C_ASSERT
(
FIELD_OFFSET
(
struct
get_thread_times_reply
,
creation_time
)
==
8
);
...
...
server/thread.c
View file @
84516400
...
...
@@ -1375,6 +1375,7 @@ DECL_HANDLER(get_thread_info)
reply
->
pid
=
get_process_id
(
thread
->
process
);
reply
->
tid
=
get_thread_id
(
thread
);
reply
->
teb
=
thread
->
teb
;
reply
->
entry_point
=
thread
->
entry_point
;
reply
->
exit_code
=
(
thread
->
state
==
TERMINATED
)
?
thread
->
exit_code
:
STATUS_PENDING
;
reply
->
priority
=
thread
->
priority
;
reply
->
affinity
=
thread
->
affinity
;
...
...
server/trace.c
View file @
84516400
...
...
@@ -1300,6 +1300,7 @@ static void dump_get_thread_info_reply( const struct get_thread_info_reply *req
fprintf
(
stderr
,
" pid=%04x"
,
req
->
pid
);
fprintf
(
stderr
,
", tid=%04x"
,
req
->
tid
);
dump_uint64
(
", teb="
,
&
req
->
teb
);
dump_uint64
(
", entry_point="
,
&
req
->
entry_point
);
dump_uint64
(
", affinity="
,
&
req
->
affinity
);
fprintf
(
stderr
,
", exit_code=%d"
,
req
->
exit_code
);
fprintf
(
stderr
,
", priority=%d"
,
req
->
priority
);
...
...
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