| 556 | ); |
| 557 | pNtQueueApcThreadEx Real_NtQueueApcThreadEx = NULL; |
| 558 | NTSTATUS 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 ************************/ |
nothing calls this directly
no test coverage detected