Files
2020-06-28 13:51:36 +03:00

60 lines
942 B
C

#include <Windows.h>
#include "SimpleUserApcWaitTester.h"
#include <stdio.h>
DWORD
WINAPI
NonAlertableThread(
PVOID ThreadArgument
)
{
LARGE_INTEGER Timeout;
printf("NonAlertableThread, sleeping (non-alertable)..\n");
HANDLE EventHandle = CreateEventA(NULL, TRUE, FALSE, NULL);
//
// Sleep for 10 seconds.
//
Sleep(10*1000);
printf("Entering alertable state!\n");
Timeout.QuadPart = T_RELATIVE(T_SECONDS(1000));
DriverWaitForEvent(EventHandle, TRUE, Timeout);
printf("Exited wait!");
return 0;
}
VOID
UserApcToNonAlertableThread(
VOID
)
{
HANDLE ThreadHandle = CreateThread(
NULL,
0,
NonAlertableThread,
NULL,
0,
NULL
);
if (ThreadHandle == NULL) {
printf("CreateThread Failed: 0x%08X\n", GetLastError());
exit(-1);
}
Sleep(2000);
if (!QueueUserAPC(MyCustomApc, ThreadHandle, 0)) {
printf("QueueUserAPC Error: 0x%08X\n", GetLastError());
}
WaitForSingleObject(ThreadHandle, INFINITE);
}