[PATCH 1/2] ntdll: Improve NtSetThreadExecutionState() stub.

Chip Davis cdavis at codeweavers.com
Wed Aug 7 10:58:56 CDT 2019


Signed-off-by: Chip Davis <cdavis at codeweavers.com>
---
 dlls/ntdll/nt.c         | 10 +++++-----
 dlls/ntdll/ntdll_misc.h |  1 +
 dlls/ntdll/server.c     |  1 +
 3 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
index a9985fbc224..c1b0816a35e 100644
--- a/dlls/ntdll/nt.c
+++ b/dlls/ntdll/nt.c
@@ -3062,14 +3062,14 @@ NTSTATUS WINAPI NtInitiatePowerAction(
  */
 NTSTATUS WINAPI NtSetThreadExecutionState( EXECUTION_STATE new_state, EXECUTION_STATE *old_state )
 {
-    static EXECUTION_STATE current =
-        ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED | ES_USER_PRESENT;
-    *old_state = current;
+    struct ntdll_thread_data *thread_data = ntdll_get_thread_data();
+
+    *old_state = thread_data->exec_state;
 
     WARN( "(0x%x, %p): stub, harmless.\n", new_state, old_state );
 
-    if (!(current & ES_CONTINUOUS) || (new_state & ES_CONTINUOUS))
-        current = new_state;
+    if (new_state & ES_CONTINUOUS)
+        thread_data->exec_state = new_state;
     return STATUS_SUCCESS;
 }
 
diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h
index 4556e1e5ce3..30080a47e53 100644
--- a/dlls/ntdll/ntdll_misc.h
+++ b/dlls/ntdll/ntdll_misc.h
@@ -245,6 +245,7 @@ struct ntdll_thread_data
     int                wait_fd[2];    /* fd for sleeping server requests */
     BOOL               wow64_redir;   /* Wow64 filesystem redirection flag */
     pthread_t          pthread_id;    /* pthread thread id */
+    EXECUTION_STATE    exec_state;    /* current thread power execution state */
 };
 
 C_ASSERT( sizeof(struct ntdll_thread_data) <= sizeof(((TEB *)0)->GdiTebBatch) );
diff --git a/dlls/ntdll/server.c b/dlls/ntdll/server.c
index 33ba95c00cc..385f5af6ebb 100644
--- a/dlls/ntdll/server.c
+++ b/dlls/ntdll/server.c
@@ -1525,6 +1525,7 @@ size_t server_init_thread( void *entry_point, BOOL *suspend )
 
     is_wow64 = !is_win64 && (server_cpus & ((1 << CPU_x86_64) | (1 << CPU_ARM64))) != 0;
     ntdll_get_thread_data()->wow64_redir = is_wow64;
+    ntdll_get_thread_data()->exec_state  = ES_CONTINUOUS;
 
     switch (ret)
     {
-- 
2.21.0




More information about the wine-devel mailing list