Files
anit-cheat/Anti-Cheat_Driver/io_ctl.cpp
T
2026-06-16 10:24:26 +08:00

70 lines
1.5 KiB
C++

#include "io_ctl.h"
UNICODE_STRING g_usDeviceName = RTL_CONSTANT_STRING(L"\\Device\\dump_Test");
UNICODE_STRING g_usSymbolicName = RTL_CONSTANT_STRING(L"\\??\\_dump_");
auto io_ctl::init_device_and_symbolic(PDRIVER_OBJECT drv_obj) -> NTSTATUS
{
auto dispatch_create_close = [](PDEVICE_OBJECT devcie_object, PIRP irp)
{
UNREFERENCED_PARAMETER(devcie_object);
irp->IoStatus.Information = 0;
irp->IoStatus.Status = 0;
IoCompleteRequest(irp, IO_NO_INCREMENT);
return STATUS_SUCCESS;
};
NTSTATUS status{ 0 };
PDEVICE_OBJECT dev_obj{ 0 };
while (1)
{
status = IoCreateDevice(drv_obj, NULL, &g_usDeviceName, FILE_DEVICE_UNKNOWN, NULL, NULL, &dev_obj);
if (!NT_SUCCESS(status))
{
DbgPrintEx(77, 0, "[+] failed io create dev!!\n");
break;
}
status = IoCreateSymbolicLink(&g_usSymbolicName, &g_usDeviceName);
if (!NT_SUCCESS(status))
{
DbgPrintEx(77, 0, "[+] failed io create link!!\n");
break;
}
break;
}
drv_obj->MajorFunction[IRP_MJ_CLOSE] = dispatch_create_close;
drv_obj->MajorFunction[IRP_MJ_CREATE] = dispatch_create_close;
drv_obj->MajorFunction[IRP_MJ_DEVICE_CONTROL] = dispatch_device_io;
return status;
}
auto io_ctl::dispatch_device_io(PDEVICE_OBJECT devcie_object, PIRP irp) -> NTSTATUS
{
UNREFERENCED_PARAMETER(devcie_object);
NTSTATUS status{ 0 };
/*auto stack = IoGetCurrentIrpStackLocation(irp);
switch (stack->Parameters.DeviceIoControl.IoControlCode)
{
default:
break;
}*/
irp->IoStatus.Information = 0;
irp->IoStatus.Status = status;
IoCompleteRequest(irp, IO_NO_INCREMENT);
return status;
}