diff --git a/UsbDk/RedirectorStrategy.cpp b/UsbDk/RedirectorStrategy.cpp index 918eba6..ed1946a 100644 --- a/UsbDk/RedirectorStrategy.cpp +++ b/UsbDk/RedirectorStrategy.cpp @@ -208,8 +208,7 @@ void CUsbDkRedirectorStrategy::IoInCallerContext(WDFDEVICE Device, WDFREQUEST Re if (NT_SUCCESS(status)) { - WdfRequest.Detach(); - CUsbDkFilterStrategy::IoInCallerContext(Device, Request); + CUsbDkFilterStrategy::IoInCallerContext(Device, WdfRequest.Detach()); } } //-------------------------------------------------------------------------------------------------- diff --git a/UsbDk/WdfRequest.h b/UsbDk/WdfRequest.h index 73921f7..ea15f66 100644 --- a/UsbDk/WdfRequest.h +++ b/UsbDk/WdfRequest.h @@ -94,8 +94,12 @@ public: NTSTATUS SendAndForget(WDFIOTARGET Target); NTSTATUS SendWithCompletion(WDFIOTARGET Target, PFN_WDF_REQUEST_COMPLETION_ROUTINE CompletionFunc); - void Detach() - { m_Request = WDF_NO_HANDLE; } + WDFREQUEST Detach() + { + WDFREQUEST Request = m_Request; + m_Request = WDF_NO_HANDLE; + return Request; + } operator WDFREQUEST() const { return m_Request; }