| 89 | } |
| 90 | |
| 91 | VOID |
| 92 | loaderEvtIoDeviceControl( |
| 93 | _In_ WDFQUEUE Queue, |
| 94 | _In_ WDFREQUEST Request, |
| 95 | _In_ size_t OutputBufferLength, |
| 96 | _In_ size_t InputBufferLength, |
| 97 | _In_ ULONG IoControlCode) |
| 98 | /*++ |
| 99 | |
| 100 | Routine Description: |
| 101 | |
| 102 | This event is invoked when the framework receives IRP_MJ_DEVICE_CONTROL request. |
| 103 | |
| 104 | Arguments: |
| 105 | |
| 106 | Queue - Handle to the framework queue object that is associated with the |
| 107 | I/O request. |
| 108 | |
| 109 | Request - Handle to a framework request object. |
| 110 | |
| 111 | OutputBufferLength - Size of the output buffer in bytes |
| 112 | |
| 113 | InputBufferLength - Size of the input buffer in bytes |
| 114 | |
| 115 | IoControlCode - I/O control code. |
| 116 | |
| 117 | Return Value: |
| 118 | |
| 119 | VOID |
| 120 | |
| 121 | --*/ |
| 122 | { |
| 123 | PVOID in = 0; |
| 124 | PVOID out = 0; |
| 125 | size_t in_size = 0; |
| 126 | size_t out_size = 0; |
| 127 | |
| 128 | NTSTATUS status; |
| 129 | |
| 130 | TraceEvents( |
| 131 | TRACE_LEVEL_INFORMATION, |
| 132 | TRACE_QUEUE, |
| 133 | "%!FUNC! Queue 0x%p, Request 0x%p OutputBufferLength %d " |
| 134 | "InputBufferLength %d IoControlCode %d", |
| 135 | Queue, |
| 136 | Request, |
| 137 | (int)OutputBufferLength, |
| 138 | (int)InputBufferLength, |
| 139 | IoControlCode); |
| 140 | |
| 141 | if (InputBufferLength != 0) { |
| 142 | status = WdfRequestRetrieveInputBuffer(Request, InputBufferLength, &in, &in_size); |
| 143 | |
| 144 | if (!NT_SUCCESS(status)) { |
| 145 | WdfRequestComplete(Request, STATUS_ACCESS_DENIED); |
| 146 | return; |
| 147 | } |
| 148 | } |
nothing calls this directly
no test coverage detected