| 885 | ); |
| 886 | pNtOpenThread Real_NtOpenThread = NULL; |
| 887 | NTSTATUS NTAPI Catch_NtOpenThread( |
| 888 | OUT PHANDLE ThreadHandle, |
| 889 | IN ACCESS_MASK DesiredAccess, |
| 890 | IN POBJECT_ATTRIBUTES ObjectAttributes, |
| 891 | IN CLIENT_ID* ClientId |
| 892 | ) { |
| 893 | int64_t time = get_time(); |
| 894 | char buf[DATA_BUFFER_SIZE] = ""; |
| 895 | if (HooksInitialized) { // dont log our own hooking |
| 896 | int offset = 0; |
| 897 | offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "{"); |
| 898 | offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"type\":\"dll\","); |
| 899 | offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"time\":%llu,", time); |
| 900 | offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"pid\":%lu,", (DWORD)GetCurrentProcessId()); |
| 901 | offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"tid\":%lu,", (DWORD)GetCurrentThreadId()); |
| 902 | offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"func\":\"NtOpenThread\","); |
| 903 | offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"thread_handle\":%lld,", ThreadHandle); |
| 904 | offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"access_mask\":%lu,", DesiredAccess); |
| 905 | offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"client_id_process\":%llu,", ClientId->UniqueProcess); |
| 906 | offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "\"client_id_thread\":%llu,", ClientId->UniqueThread); |
| 907 | offset += LogMyStackTrace(&buf[offset], DATA_BUFFER_SIZE - offset); |
| 908 | offset += sprintf_s(buf + offset, DATA_BUFFER_SIZE - offset, "}"); |
| 909 | SendDllPipe(buf); |
| 910 | } |
| 911 | return Real_NtOpenThread(ThreadHandle, DesiredAccess, ObjectAttributes, ClientId); |
| 912 | } |
| 913 | |
| 914 | |
| 915 | /******************* NtCreateSection ************************/ |
nothing calls this directly
no test coverage detected