https://git.reactos.org/?p=reactos.git;a=commitdiff;h=b607e0119ffcc64da433c…
commit b607e0119ffcc64da433cf090d463c510d7abfc4
Author: Andrew Boyarshin <andrew.boyarshin(a)gmail.com>
AuthorDate: Sun Nov 25 14:11:04 2018 +0700
Commit: Mark Jansen <mark.jansen(a)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