diff --git a/UsbDk/FilterDevice.cpp b/UsbDk/FilterDevice.cpp index 394266a..cd98389 100644 --- a/UsbDk/FilterDevice.cpp +++ b/UsbDk/FilterDevice.cpp @@ -70,10 +70,13 @@ NTSTATUS CUsbDkFilterDevice::QDRPostProcess(PIRP Irp) return STATUS_MORE_PROCESSING_REQUIRED; } +class CUsbDkRedirectorPDODevice; + typedef struct _USBDK_REDIRECTOR_PDO_EXTENSION { + CUsbDkRedirectorPDODevice *UsbDkRedirectorPDO; } USBDK_REDIRECTOR_PDO_EXTENSION, *PUSBDK_REDIRECTOR_PDO_EXTENSION; -WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(USBDK_REDIRECTOR_PDO_EXTENSION, RedirectorPdoGetData) +WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(USBDK_REDIRECTOR_PDO_EXTENSION, UsbDkRedirectorPdoGetData) class CDeviceRelations { @@ -256,6 +259,11 @@ NTSTATUS CUsbDkRedirectorPDOInit::Create(const WDFDEVICE ParentDevice) return status; } + SetExclusive(); + + //TODO: Must be direct + SetIoBuffered(); + return STATUS_SUCCESS; } @@ -264,6 +272,7 @@ class CUsbDkRedirectorPDODevice : public CWdfDevice, public CAllocatableUsbDkRedirectorPDO = this; + + return STATUS_SUCCESS; +} + +void CUsbDkRedirectorPDODevice::ContextCleanup(_In_ WDFOBJECT DeviceObject) +{ + PAGED_CODE(); + + TraceEvents(TRACE_LEVEL_INFORMATION, TRACE_FILTERDEVICE, "%!FUNC! Entry"); + + auto deviceContext = UsbDkRedirectorPdoGetData(DeviceObject); + UNREFERENCED_PARAMETER(deviceContext); + + delete deviceContext->UsbDkRedirectorPDO; } WDFDEVICE CUsbDkFilterDevice::CreateRedirectorPDO()