UsbDk: Introduce WDF request forwarding logic

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
This commit is contained in:
Dmitry Fleytman 2014-04-22 09:01:16 +03:00
parent 31d1737fbe
commit 4566ccdac0
2 changed files with 30 additions and 2 deletions

View file

@ -1,6 +1,26 @@
#include <ntddk.h>
#include "WdfRequest.h"
NTSTATUS CWdfRequest::SendAndForget(WDFIOTARGET Target)
{
WDF_REQUEST_SEND_OPTIONS options;
WDF_REQUEST_SEND_OPTIONS_INIT(&options, WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET);
NTSTATUS status = STATUS_SUCCESS;
if (WdfRequestSend(m_Request, Target, &options))
{
Forget();
}
else
{
status = WdfRequestGetStatus(m_Request);
SetStatus(status);
}
return status;
}
NTSTATUS CWdfRequest::FetchSafeReadBuffer(WDFMEMORY *Buffer) const
{
PVOID Ptr;

View file

@ -10,8 +10,11 @@ public:
{}
~CWdfRequest()
{
WdfRequestSetInformation(m_Request, m_Information);
WdfRequestComplete(m_Request, m_Status);
if (m_Request != WDF_NO_HANDLE)
{
WdfRequestSetInformation(m_Request, m_Information);
WdfRequestComplete(m_Request, m_Status);
}
}
template <typename TObject>
@ -59,10 +62,15 @@ public:
WdfRequestGetParameters(m_Request, &Params);
}
NTSTATUS SendAndForget(WDFIOTARGET Target);
protected:
WDFREQUEST m_Request;
private:
void Forget()
{ m_Request = WDF_NO_HANDLE; }
NTSTATUS m_Status = STATUS_UNSUCCESSFUL;
ULONG_PTR m_Information = 0;