92 lines
2.1 KiB
C++
92 lines
2.1 KiB
C++
#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;
|
|
}
|
|
}
|
|
|