Panoptes 1.0.0
Endpoint Detection and Response
Loading...
Searching...
No Matches
ioctl.cpp
Go to the documentation of this file.
1#include "ioctl.h"
2
3//NTSTATUS DeviceCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp)
4//{
5// PAGED_CODE();
6// UNREFERENCED_PARAMETER(DeviceObject);
7// DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[+] Panoptes: Driver - DeviceCreate\n");
8//
9// Irp->IoStatus.Status = STATUS_SUCCESS;
10// Irp->IoStatus.Information = 0;
11// IoCompleteRequest(Irp, IO_NO_INCREMENT);
12//
13// return STATUS_SUCCESS;
14//}
15
16//NTSTATUS DeviceClose(PDEVICE_OBJECT DeviceObject, PIRP Irp)
17//{
18// PAGED_CODE();
19// UNREFERENCED_PARAMETER(DeviceObject);
20// DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[+] Panoptes: Driver - DeviceClose\n");
21//
22// Irp->IoStatus.Status = STATUS_SUCCESS;
23// Irp->IoStatus.Information = 0;
24// IoCompleteRequest(Irp, IO_NO_INCREMENT);
25//
26// return STATUS_SUCCESS;
27//}
28
29//NTSTATUS DeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
30//{
31// DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[+] Panoptes: HERE6\n");
32//
33// PIO_STACK_LOCATION irpSp = IoGetCurrentIrpStackLocation(Irp);
34// NTSTATUS status = STATUS_SUCCESS;
35// ULONG_PTR bytesTransferred = 0;
36// ULONG inputBufferLength = 0;
37// EVENT_DATA eventData;
38// RtlZeroMemory(&eventData, sizeof(EVENT_DATA));
39// DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[+] Panoptes: BEFORE\n");
40//
41//
42// switch (irpSp->Parameters.DeviceIoControl.IoControlCode) {
43// case IOCTL_GET_EVENT:
44// {
45// DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[+] Panoptes: Control Process Code Read\n");
46//
47// if (irpSp->Parameters.DeviceIoControl.OutputBufferLength < sizeof(EVENT_DATA))
48// {
49// status = STATUS_BUFFER_TOO_SMALL;
50// break;
51// }
52//
53// if (DequeueEvent(&eventData))
54// {
55// DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[+] Panoptes: Driver - Dequeued %wd Type Successfully\n", eventData.Type);
56//
57// DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[+] Panoptes: Dequeued an event\n");
58// if (eventData.Type == EVENT_TYPE_PROCESS_CREATE) {
59// DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[+] Panoptes: Sending Parent PID %llu\n", eventData.Data.ProcessData.ParentProcessId);
60// DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[+] Panoptes: Sending main PID %llu\n", eventData.Data.ProcessData.ProcessId);
61// }
62// else if (eventData.Type == EVENT_TYPE_IMAGE_LOAD) {
63// //DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[+] Panoptes: Sending %wZ\n", &eventData.Data.ImageLoadData);
64// //DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[+] Panoptes: Sending Parent PID %llu\n", eventData.Data.ProcessData.ParentProcessId);
65// //DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[+] Panoptes: Sending main PID %llu\n", eventData.Data.ProcessData.ProcessId);
66// }
67//
68// RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer, &eventData, sizeof(EVENT_DATA));
69// bytesTransferred = sizeof(EVENT_DATA);
70// status = STATUS_SUCCESS;
71//
72// }
73// else
74// {
75// // No event available, handle accordingly (e.g., wait or return status)
76// DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[-] Panoptes: NO MORE ENTRIES\n");
77// status = STATUS_NO_MORE_ENTRIES;
78// }
79// break;
80// }
81// case IOCTL_TERMINATE_PROCESS:
82// {
83// inputBufferLength = irpSp->Parameters.DeviceIoControl.InputBufferLength;
84// if (inputBufferLength < sizeof(TERMINATE_PROCESS))
85// {
86// status = STATUS_BUFFER_TOO_SMALL;
87// break;
88// }
89//
90// PTERMINATE_PROCESS inputBuffer = (PTERMINATE_PROCESS)Irp->AssociatedIrp.SystemBuffer;
91//
92// HANDLE processHandle;
93// NTSTATUS status = GetProcessHandleFromPID(inputBuffer->ProcessId, &processHandle);
94//
95// DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[+] Panoptes: PID to terminate = % lu\n", inputBuffer->ProcessId);
96//
97// ZwTerminateProcess(processHandle, STATUS_SUCCESS);
98//
99// ZwClose(processHandle);
100// break;
101// }
102// default:
103// DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[-] Panoptes: INVALID REQUEST\n");
104// status = STATUS_INVALID_DEVICE_REQUEST;
105// break;
106// }
107//
108// DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[+] Panoptes: Complete IRP\n");
109//
110// Irp->IoStatus.Information = bytesTransferred;
111// Irp->IoStatus.Status = status;
112// IoCompleteRequest(Irp, IO_NO_INCREMENT);
113//
114// return status;
115//}
116
117//NTSTATUS InitializeDriverLink(PDRIVER_OBJECT driverObject) {
118// PAGED_CODE();
119// NTSTATUS status = STATUS_SUCCESS;
120// DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[+] Panoptes: Initializing Driver Link\n");
121// //RtlInitUnicodeString(&g_deviceName, KERNEL_LINK);
122//
123// driverObject->MajorFunction[IRP_MJ_CREATE] = DeviceCreate;
124// driverObject->MajorFunction[IRP_MJ_CLOSE] = DeviceClose;
125// //driverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DeviceControl;
126//
127// //status = IoCreateDevice(
128// // driverObject,
129// // 0,
130// // &g_deviceName,
131// // FILE_DEVICE_UNKNOWN,
132// // FILE_DEVICE_SECURE_OPEN,
133// // FALSE,
134// // &g_deviceObject
135// //);
136// //if (!NT_SUCCESS(status))
137// //{
138// // DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[!] Panoptes: An error occured when attempting to create the device object\n");
139// // return status;
140// //}
141//
142// //RtlInitUnicodeString(&g_symLink, KERNEL_LINK_SYM);
143// //status = IoCreateSymbolicLink(&g_symLink, &g_deviceName);
144// //if (!NT_SUCCESS(status))
145// //{
146// // DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[!] Panoptes: An error occured when attempting to create the device object symobolic link\n");
147// // IoDeleteDevice(g_deviceObject);
148// // return status;
149// //}
150//
151//
152// return status;
153//}