[NTOSKRNL][PS] Implement NtQueueApcThreadEx and use it in NtQueueApcThread

Actually rename NtQueueApcThread to NtQueueApcThreadEx and ignore one additional parameter for now.
This commit is contained in:
Andrew Boyarshin 2018-11-25 14:11:04 +07:00 committed by Mark Jansen
parent c96ba1aff2
commit b607e0119f
2 changed files with 58 additions and 4 deletions

View 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 */

View 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