UsbDk: WdfRequest: add generic request processor based on memory objects
Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
This commit is contained in:
parent
6708ad11c3
commit
5edf49500b
1 changed files with 43 additions and 0 deletions
|
|
@ -29,6 +29,18 @@ public:
|
|||
return WdfRequestRetrieveOutputBuffer(m_Request, sizeof(*objectPtr), (PVOID *)&objectPtr, Length);
|
||||
}
|
||||
|
||||
template <typename TObject>
|
||||
NTSTATUS FetchInputMemory(WDFMEMORY *Memory)
|
||||
{
|
||||
return WdfRequestRetrieveInputMemory(m_Request, Memory);
|
||||
}
|
||||
|
||||
template <typename TObject>
|
||||
NTSTATUS FetchOutputMemory(WDFMEMORY *Memory)
|
||||
{
|
||||
return WdfRequestRetrieveOutputMemory(m_Request, Memory);
|
||||
}
|
||||
|
||||
template <typename TObject>
|
||||
NTSTATUS FetchInputArray(TObject &arrayPtr, size_t &numElements)
|
||||
{
|
||||
|
|
@ -155,3 +167,34 @@ static void UsbDkHandleRequestWithOutput(CWdfRequest &Request,
|
|||
Request.SetOutputDataLen(outputLength);
|
||||
Request.SetStatus(status);
|
||||
}
|
||||
|
||||
template <typename THandler>
|
||||
static void UsbDkHandleRequestWithIOMemory(CWdfRequest &Request,
|
||||
THandler Handler)
|
||||
{
|
||||
WDFMEMORY output;
|
||||
|
||||
auto status = Request.FetchOutputMemory(&output);
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
Request.SetOutputDataLen(0);
|
||||
Request.SetStatus(status);
|
||||
return;
|
||||
}
|
||||
|
||||
WDFMEMORY input;
|
||||
|
||||
status = Request.FetchInputMemory(&input);
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
Request.SetOutputDataLen(0);
|
||||
Request.SetStatus(status);
|
||||
return;
|
||||
}
|
||||
|
||||
size_t outputLength;
|
||||
status = Handler(input, output, outputLength);
|
||||
|
||||
Request.SetOutputDataLen(outputLength);
|
||||
Request.SetStatus(status);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue