[NTOSKRNL][PS] Implement NtQueueApcThreadEx and use it in NtQueueApcThread
authorAndrew Boyarshin <andrew.boyarshin@gmail.com>
Sun, 25 Nov 2018 07:11:04 +0000 (14:11 +0700)
committerMark Jansen <mark.jansen@reactos.org>
Thu, 15 Aug 2019 10:32:09 +0000 (12:32 +0200)
Actually rename NtQueueApcThread to NtQueueApcThreadEx and ignore one additional parameter for now.

ntoskrnl/ps/state.c
sdk/include/ndk/kefuncs.h

index 5d3839b..4511c1f 100644 (file)
@@ -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 */
index 6d7b713..0962772 100644 (file)
@@ -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