#pragma once #define SIMPLE_USER_APC_DEVICE_NAME_W L"SimpleUserApcDevice" #define SIMPLE_USER_APC_DEVICE_NAME_A "SimpleUserApcDevice" typedef VOID (*PPS_APC_ROUTINE)( PVOID SystemArgument1, PVOID SystemArgument2, PVOID SystemArgument3 ); typedef struct _SIMPLE_QUEUE_APC_THREAD { HANDLE ThreadHandle; PPS_APC_ROUTINE ApcRoutine; PVOID SystemArgument1; PVOID SystemArgument2; PVOID SystemArgument3; } SIMPLE_QUEUE_APC_THREAD, *PSIMPLE_QUEUE_APC_THREAD; #define IOCTL_SIMPLE_USER_APC_QUEUE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x1, METHOD_BUFFERED, FILE_ANY_ACCESS) typedef struct _SIMPLE_USER_APC_WAIT { HANDLE Event; BOOLEAN Alertable; LARGE_INTEGER Timeout; } SIMPLE_USER_APC_WAIT, *PSIMPLE_USER_APC_WAIT; #define IOCTL_SIMPLE_USER_APC_WAIT CTL_CODE(FILE_DEVICE_UNKNOWN, 0x2, METHOD_BUFFERED, FILE_ANY_ACCESS)