https://git.reactos.org/?p=reactos.git;a=commitdiff;h=b607e0119ffcc64da433cf090d463c510d7abfc4

commit b607e0119ffcc64da433cf090d463c510d7abfc4
Author:     Andrew Boyarshin <andrew.boyars...@gmail.com>
AuthorDate: Sun Nov 25 14:11:04 2018 +0700
Commit:     Mark Jansen <mark.jan...@reactos.org>
CommitDate: Thu Aug 15 12:32:09 2019 +0200

    [NTOSKRNL][PS] Implement NtQueueApcThreadEx and use it in NtQueueApcThread
    
    Actually rename NtQueueApcThread to NtQueueApcThreadEx and ignore one 
additional parameter for now.
---
 ntoskrnl/ps/state.c       | 50 +++++++++++++++++++++++++++++++++++++++++++----
 sdk/include/ndk/kefuncs.h | 12 ++++++++++++
 2 files changed, 58 insertions(+), 4 deletions(-)

diff --git a/ntoskrnl/ps/state.c b/ntoskrnl/ps/state.c
index 5d3839b0b95..4511c1ff625 100644
--- a/ntoskrnl/ps/state.c
+++ b/ntoskrnl/ps/state.c
@@ -470,7 +470,7 @@ NtTestAlert(VOID)
 }
 
 /*++
- * @name NtQueueApcThread
+ * @name NtQueueApcThreadEx
  * NT4
  *
  *    This routine is used to queue an APC from user-mode for the specified
@@ -479,6 +479,10 @@ NtTestAlert(VOID)
  * @param ThreadHandle
  *        Handle to the Thread.
  *        This handle must have THREAD_SET_CONTEXT privileges.
+ *        
+ * @param UserApcReserveHandle
+ *        Optional handle to reserve object (introduced in Windows 7), 
providing ability to
+ *        reserve memory before performing stability-critical parts of code.
  *
  * @param ApcRoutine
  *        Pointer to the APC Routine to call when the APC executes.
@@ -497,11 +501,12 @@ NtTestAlert(VOID)
  *--*/
 NTSTATUS
 NTAPI
-NtQueueApcThread(IN HANDLE ThreadHandle,
+NtQueueApcThreadEx(IN HANDLE ThreadHandle,
+                 IN OPTIONAL HANDLE UserApcReserveHandle,
                  IN PKNORMAL_ROUTINE ApcRoutine,
                  IN PVOID NormalContext,
-                 IN PVOID SystemArgument1,
-                 IN PVOID SystemArgument2)
+                 IN OPTIONAL PVOID SystemArgument1,
+                 IN OPTIONAL PVOID SystemArgument2)
 {
     PKAPC Apc;
     PETHREAD Thread;
@@ -564,4 +569,41 @@ Quit:
     return Status;
 }
 
+/*++
+ * @name NtQueueApcThread
+ * NT4
+ *
+ *    This routine is used to queue an APC from user-mode for the specified
+ *    thread.
+ *
+ * @param ThreadHandle
+ *        Handle to the Thread.
+ *        This handle must have THREAD_SET_CONTEXT privileges.
+ *
+ * @param ApcRoutine
+ *        Pointer to the APC Routine to call when the APC executes.
+ *
+ * @param NormalContext
+ *        Pointer to the context to send to the Normal Routine.
+ *
+ * @param SystemArgument[1-2]
+ *        Pointer to a set of two parameters that contain untyped data.
+ *
+ * @return STATUS_SUCCESS or failure cute from associated calls.
+ *
+ * @remarks The thread must enter an alertable wait before the APC will be
+ *          delivered.
+ *
+ *--*/
+NTSTATUS
+NTAPI
+NtQueueApcThread(IN HANDLE ThreadHandle,
+    IN PKNORMAL_ROUTINE ApcRoutine,
+    IN PVOID NormalContext,
+    IN PVOID SystemArgument1,
+    IN PVOID SystemArgument2)
+{
+    return NtQueueApcThreadEx(ThreadHandle, NULL, ApcRoutine, NormalContext, 
SystemArgument1, SystemArgument2);
+}
+
 /* EOF */
diff --git a/sdk/include/ndk/kefuncs.h b/sdk/include/ndk/kefuncs.h
index 6d7b713cc8d..09627727937 100644
--- a/sdk/include/ndk/kefuncs.h
+++ b/sdk/include/ndk/kefuncs.h
@@ -467,6 +467,18 @@ NtQueueApcThread(
     _In_opt_ PVOID SystemArgument2
 );
 
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtQueueApcThreadEx(
+    _In_ HANDLE ThreadHandle,
+    _In_opt_ HANDLE UserApcReserveHandle,
+    _In_ PKNORMAL_ROUTINE ApcRoutine,
+    _In_opt_ PVOID NormalContext,
+    _In_opt_ PVOID SystemArgument1,
+    _In_opt_ PVOID SystemArgument2
+);
+
 NTSYSCALLAPI
 NTSTATUS
 NTAPI

Reply via email to