#include "comm_dispatch.h" #include "protect_filter.h" #include "anit_screen_grap.h" #include "create_thread_callback.h" #include "mouse_keybord_hook.h" namespace comm_dispatch { auto dispatch(CMD_COMM* data) -> NTSTATUS { auto status = STATUS_UNSUCCESSFUL; switch (data->CommID) { case CMD::DRIVER_COMM_TEST: { status = STATUS_SUCCESS; break; } case CMD::DRIVER_PROTECT_PROCESS: { auto process_data = (IOCTL_PROCESS*)data->Buf; status = protect_filter::add_protect_list((ULONG)process_data->Pid, NULL, FALSE); break; } case CMD::DRIVER_CANCEL_PROTECT_PROCESS: { auto process_data = (IOCTL_PROCESS*)data->Buf; status = protect_filter::remove_protect_list((ULONG)process_data->Pid, NULL); break; } case CMD::ADD_WHITE_PROCESS: { auto process_data = (IOCTL_PROCESS*)data->Buf; status = protect_filter::add_protect_list((ULONG)process_data->Pid, NULL, TRUE); break; } case CMD::WINDOW_ANIT_SCREEN: { auto window_data = (IOCTL_WINDOW*)data->Buf; status = anit_screen_grap::GreProtectSpriteContent( (HWND)window_data->HWND, (UINT)window_data->Flags); break; } case CMD::USER_EVENT_HANDLE: { auto user_handle = (HANDLE*)data->Buf; status = ObReferenceObjectByHandle( *user_handle, EVENT_MODIFY_STATE, *ExEventObjectType, UserMode, (PVOID*)&thread_notify_routine::g_UserEvent, NULL); DbgPrintEx(77, 0, "ObReferenceObjectByHandle[status]:%x\n", status); DbgPrintEx(77, 0, "g_UserEvent:%p\n", thread_notify_routine::g_UserEvent); break; } case CMD::PROTECT_THREAD_CONTRL: { auto process_data = (IOCTL_PROCESS*)data->Buf; thread_notify_routine::g_thread_protect = process_data->is_no_create_remote_thread; status = STATUS_SUCCESS; break; } case CMD::INSTALL_MOUSE_KEYBOARD: { status = mouse_keybord_hook::install_mouse_keybord_hook(); break; } case CMD::UNLOAD_MOUSE_KEYBOARD: { status = mouse_keybord_hook::remove_mouse_keybord_hook(); break; } default: break; } *(NTSTATUS*)data->status = status; return status; } }