Driver IOCTL Dispatcher.
24{
25 PIO_STACK_LOCATION IrpStack;
27 NTSTATUS Status;
28
29 UNREFERENCED_PARAMETER(DeviceObject);
30
31
32
33
34
35
36
37
38
40 {
41 IrpStack = IoGetCurrentIrpStackLocation(Irp);
42
43 switch (IrpStack->Parameters.DeviceIoControl.IoControlCode)
44 {
46
47
48
49
50 if (IrpStack->Parameters.DeviceIoControl.InputBufferLength <
SIZEOF_REGISTER_EVENT || Irp->AssociatedIrp.SystemBuffer == NULL)
51 {
52 Status = STATUS_INVALID_PARAMETER;
53 LogError(
"Err, invalid parameter to IOCTL dispatcher");
54 break;
55 }
56
57
58
59
60
61
63
64 switch (RegisterEventRequest->
Type)
65 {
67
69
70 break;
72
74 {
75 Status = STATUS_SUCCESS;
76 }
77 else
78 {
80 }
81
82 break;
83 default:
84 LogError(
"Err, unknown notification type from user-mode");
85 Status = STATUS_INVALID_PARAMETER;
86 break;
87 }
88 break;
89
90 default:
92 Status = STATUS_NOT_IMPLEMENTED;
93 break;
94 }
95 }
96 else
97 {
98
99
100
101 Status = STATUS_SUCCESS;
102 }
103
104 if (Status != STATUS_PENDING)
105 {
106 Irp->IoStatus.Status = Status;
107
108 IoCompleteRequest(Irp, IO_NO_INCREMENT);
109 }
110
111 return Status;
112}
#define STATUS_UNSUCCESSFUL
Definition Windows.h:172
IMPORT_EXPORT_HYPERLOG BOOLEAN LogRegisterEventBasedNotification(PVOID TargetIrp)
Create an event-based usermode notifying mechanism.
Definition Logging.c:1594
IMPORT_EXPORT_HYPERLOG BOOLEAN LogRegisterIrpBasedNotification(PVOID TargetIrp, LONG *Status)
Register a new IRP Pending thread which listens for new buffers.
Definition Logging.c:1475
#define LogError(format,...)
Log in the case of error.
Definition HyperDbgHyperLogIntrinsics.h:113
NOTIFY_TYPE Type
Definition DataTypes.h:312