MCPcopy Create free account
hub / github.com/dobin/RedEdr / Catch_NtQueueApcThreadEx

Function Catch_NtQueueApcThreadEx

RedEdrDll/dllmain.cpp:558–589  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

556 );
557pNtQueueApcThreadEx Real_NtQueueApcThreadEx = NULL;
558NTSTATUS NTAPI Catch_NtQueueApcThreadEx(
559 IN HANDLE ThreadHandle,
560 IN HANDLE ApcThreadHandle,
561 IN PVOID ApcRoutine,
562 IN PVOID ApcArgument1,
563 IN PVOID ApcArgument2,
564 IN PVOID ApcArgument3
565) {
566 int64_t time = get_time();
567 char buf[DATA_BUFFER_SIZE] = "";
568
569 if (HooksInitialized) { // dont log our own hooking
570 int offset = 0;
571 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "{");
572 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"type\":\"dll\",");
573 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"time\":%llu,", time);
574 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"pid\":%lu,", (DWORD)GetCurrentProcessId());
575 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"tid\":%lu,", (DWORD)GetCurrentThreadId());
576 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"func\":\"NtQueueApcThreadEx\",");
577 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"thread_handle\":%lld,", ThreadHandle);
578 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"apc_thread\":%llu,", ApcThreadHandle);
579 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"apc_routine\":%llu,", ApcRoutine);
580 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"arg1\":%llu,", ApcArgument1);
581 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"arg2\":%llu,", ApcArgument2);
582 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"arg3\":%llu,", ApcArgument3);
583 offset += LogMyStackTrace(&buf[offset], DATA_BUFFER_SIZE - offset);
584 offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "}");
585
586 SendDllPipe(buf);
587 }
588 return Real_NtQueueApcThreadEx(ThreadHandle, ApcThreadHandle, ApcRoutine, ApcArgument1, ApcArgument2, ApcArgument3);
589}
590
591
592/******************* NtCreateProcess ************************/

Callers

nothing calls this directly

Calls 3

get_timeFunction · 0.85
LogMyStackTraceFunction · 0.85
SendDllPipeFunction · 0.85

Tested by

no test coverage detected