7 #include "FxUsbPipe.tmh" 10 #include "Fxglobals.h" 34 m_NumReaders(NumReaders),
68 reader[
i].Request->DeleteObject();
72 #if (FX_CORE_MODE == FX_CORE_USER_MODE) 73 reader[
i].ReadCompletedEvent.Uninitialize();
74 reader[
i].m_ReadWorkItem.Free();
105 "WDFUSBPIPE %p continuous reader queueing work item to recover " 114 "Could not Queue workitem");
123 if (
FALSE == queued) {
126 "WDFUSBPIPE %p continuous reader not queueing work item," 127 "WorkItemQueued = %d, target state %!WDF_IO_TARGET_STATE!",
172 "WDFUSBPIPE %p is being reset, continuous reader %p FxRequest %p" 173 " PIRP %p is deferred for later.",
175 Repeater->RequestIrp);
191 Repeater->ReadCompletedEvent.Clear();
206 status = Repeater->Request->GetFxIrp()->GetStatus();
214 Repeater->Request->GetFxIrp()->SetStatus(
status);
218 "WDFUSBPIPE %p continuous reader, format failed, %!STATUS!, " 234 "WDFUSBPIPE %p continuous reader, buffer alloc failed, but " 235 "there are %d readers left out of a max of %d",
249 "WDFUSBPIPE %p continuous reader, buffer alloc failed, but not " 279 readCompletedEventSet =
FALSE;
291 m_CompletionParams.Parameters.Usb.Completion;
294 params->Parameters.PipeRead.Buffer,
295 params->Parameters.PipeRead.Length,
309 "WDFUSBPIPE %p continuous reader FxRequest %p PIRP %p returned with " 317 readCompletedEventSet =
TRUE;
335 "WDFUSBPIPE %p continuous reader %p FxRequest %p PIRP %p canceled",
354 #if (FX_CORE_MODE == FX_CORE_KERNEL_MODE) 377 "WDFUSBPIPE %p continuous reader %p FxRequest %p PIRP %p got" 378 " asynchronously canceled",
384 else if (
FALSE == readCompletedEventSet) {
414 failedStatus = FailedRepeater->Request->GetStatus();
420 context = FailedRepeater->Request->GetContext();
421 usbCompletionParams =
context->m_CompletionParams.Parameters.Usb.Completion;
437 if (usbCompletionParams) {
678 return FxPoolAllocate(
724 if (pContext !=
NULL ) {
774 Mx::MxEnterCriticalRegion();
779 m_Readers[
i].ReadCompletedEvent.GetSelfPointer(),
780 "waiting for continuous reader to finish, WDFUSBPIPE",
787 Mx::MxLeaveCriticalRegion();
826 __in USBD_HANDLE USBDHandle
865 #if (FX_CORE_MODE == FX_CORE_KERNEL_MODE) 993 __in USBD_HANDLE USBDHandle
1035 m_Urb->
Hdr.Length =
sizeof(*m_Urb);
1059 #if (FX_CORE_MODE == FX_CORE_USER_MODE) 1241 "WDFUSBPIPE %p converting stop action %!WDF_IO_TARGET_SENT_IO_ACTION!" 1264 "WDFUSBPIPE %p is stopped from EvtUsbTargetPipeReadersFailed" 1319 "WDFUSBPIPE %p converting purge action %!WDF_IO_TARGET_PURGE_IO_ACTION!" 1327 PendedRequestListHead,
1328 SentRequestListHead,
1346 "WDFUSBPIPE %p is purged from EvtUsbTargetPipeReadersFailed" 1390 "WDFUSBPIPE %p was not stopped in EvtDeviceD0Exit callback",
1399 PendedRequestListHead,
1400 SentRequestListHead,
1426 "WDFUSBPIPE %p, waiting for continuous reader work item to complete",
1439 "WDFUSBPIPE %p, cancelling for continuous reader (max of %d)",
1453 "WDFUSBPIPE %p, waiting for all i/o to complete",
GetHandle());
1465 __in size_t TotalBufferLength
1479 "Continuous reader already initialized on WDFUSBPIPE %p %!STATUS!",
1485 numReaders =
Config->NumPendingReads;
1487 if (numReaders == 0) {
1497 if (pReader ==
NULL) {
1607 (TransferOffsets !=
NULL) ? TransferOffsets->BufferOffset
1617 "WDFUSBPIPE %p, WDFREQUEST %p, WDFMEMORY %p, %!STATUS!",
1655 "Failed to initialize FxSyncRequest");
1688 "WDFUSBPIPE %p, WDFREQUEST %p being submitted",
1689 Pipe,
request.m_TrueRequest->GetTraceObjectHandle());
1721 "Pipe %p, Request %p, setting target failed, " 1734 if (pContext ==
NULL) {
1738 #if (FX_CORE_MODE == FX_CORE_KERNEL_MODE) 1750 Request->EnableContextDisposeNotification();
1754 Request->SetContext(pContext);
1757 #if (FX_CORE_MODE == FX_CORE_KERNEL_MODE) 1770 #elif (FX_CORE_MODE == FX_CORE_USER_MODE) 1794 "Pipe %p, Request %p, setting target failed, " 1806 if (pContext ==
NULL) {
1810 #if (FX_CORE_MODE == FX_CORE_KERNEL_MODE) 1822 Request->EnableContextDisposeNotification();
1826 Request->SetContext(pContext);
1829 #if (FX_CORE_MODE == FX_CORE_KERNEL_MODE) 1846 #elif (FX_CORE_MODE == FX_CORE_USER_MODE) 1873 "Failed to initialize FxSyncRequest");
~FxUsbPipeContinuousReader()
__inline VOID SetCompletionRoutine(__in_opt PFN_WDF_REQUEST_COMPLETION_ROUTINE CompletionRoutine=NULL, __in_opt WDFCONTEXT CompletionContext=NULL)
FxUsbPipeRequestContext(__in FX_URB_TYPE FxUrbType)
__drv_restoresIRQL KIRQL __in BOOLEAN Unlock
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _In_ PWDF_USB_CONTROL_SETUP_PACKET _In_opt_ PWDF_MEMORY_DESCRIPTOR _Out_opt_ PULONG BytesTransferred
IFxMemory * m_RequestMemory
_Must_inspect_result_ NTSTATUS FormatTransferRequest(__in FxRequestBase *Request, __in FxRequestBuffer *Buffer, __in ULONG TransferFlags=0)
MdDeviceObject m_TargetDevice
virtual VOID DeleteObject(VOID)
WINUSB_INTERFACE_HANDLE m_WinUsbHandle
enum _WDF_IO_TARGET_PURGE_IO_ACTION WDF_IO_TARGET_PURGE_IO_ACTION
virtual VOID GotoPurgeState(__in WDF_IO_TARGET_PURGE_IO_ACTION Action, __in PLIST_ENTRY PendedRequestListHead, __in PSINGLE_LIST_ENTRY SentRequestListHead, __out PBOOLEAN Wait, __in BOOLEAN LockSelf)
return STATUS_NOT_SUPPORTED
_Must_inspect_result_ NTSTATUS ValidateMemoryOffsets(__in_opt PWDFMEMORY_OFFSET Offsets)
_Must_inspect_result_ NTSTATUS FormatAbortRequest(__in FxRequestBase *Request)
struct _UMURB_PIPE_REQUEST UmUrbPipeRequest
virtual VOID ReleaseAndRestore(__in FxRequestBase *Request)
FX_URB_TYPE GetFxUrbTypeForRequest(__in FxRequestBase *Request)
#define _Must_inspect_result_
virtual VOID Dispose(VOID)
#define STATUS_INSUFFICIENT_RESOURCES
static MX_WORKITEM_ROUTINE _ReadWorkItem
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
USBD_STATUS GetUsbdStatus(VOID)
static _Must_inspect_result_ NTSTATUS _FormatTransfer(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in WDFUSBPIPE Pipe, __in WDFREQUEST Request, __in_opt WDFMEMORY TransferMemory, __in_opt PWDFMEMORY_OFFSET TransferOffsets, __in ULONG Flags)
_In_ CDROM_SCAN_FOR_SPECIAL_INFO _In_ PCDROM_SCAN_FOR_SPECIAL_HANDLER Function
_Must_inspect_result_ _In_ WDFQUEUE _In_opt_ WDFREQUEST _In_opt_ WDFFILEOBJECT _Inout_opt_ PWDF_REQUEST_PARAMETERS Parameters
_In_ WDFIOTARGET _In_ PWDF_REQUEST_COMPLETION_PARAMS Params
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList
static _Must_inspect_result_ NTSTATUS _SendTransfer(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in WDFUSBPIPE Pipe, __in_opt WDFREQUEST Request, __in_opt PWDF_REQUEST_SEND_OPTIONS RequestOptions, __in_opt PWDF_MEMORY_DESCRIPTOR MemoryDescriptor, __out_opt PULONG BytesTransferred, __in ULONG Flags)
VOID GotoPurgeState(__in WDF_IO_TARGET_PURGE_IO_ACTION Action, __in PLIST_ENTRY PendedRequestListHead, __in PSINGLE_LIST_ENTRY SentRequestListHead, __out PBOOLEAN Wait, __in BOOLEAN LockSelf)
#define UNREFERENCED_PARAMETER(P)
virtual BOOLEAN Dispose(VOID)
virtual _Must_inspect_result_ NTSTATUS GotoStartState(__in PLIST_ENTRY RequestListHead, __in BOOLEAN Lock=TRUE)
VOID CancelRepeaters(VOID)
_In_ WDFDPC _In_ BOOLEAN Wait
WDFCASSERT(sizeof(WDF_DRIVER_CONFIG_V1_0)==sizeof(WDF_DRIVER_CONFIG_V1_1))
#define WDF_REQUEST_SEND_INTERNAL_OPTION_FAIL_ON_PEND
BOOLEAN NTAPI KeInsertQueueDpc(IN PKDPC Dpc, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
#define USBD_TRANSFER_DIRECTION_IN
friend FxUsbPipeContinuousReader
ULONG GetUrbTransferLength(VOID)
__inline FxIrp * GetSubmitFxIrp(VOID)
MxEvent ReadCompletedEvent
VOID DeleteMemory(__in FxRequestBase *Request)
FxUsbPipe(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in FxUsbDevice *UsbDevice)
IN PVOID IN PVOID IN USHORT IN USHORT Size
VOID NTAPI MmUnlockPages(IN PMDL Mdl)
_Must_inspect_result_ NTSTATUS SubmitSync(__in FxRequestBase *Request, __in_opt PWDF_REQUEST_SEND_OPTIONS Options=NULL, __out_opt PULONG Action=NULL)
FxObjectHandleGetPtr(GetFxDriverGlobals(DriverGlobals), Fdo, FX_TYPE_DEVICE,(PVOID *)&pFdo)
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _In_ PWDF_USB_CONTROL_SETUP_PACKET _In_opt_ PWDF_MEMORY_DESCRIPTOR MemoryDescriptor
VOID WaitForSignal(__in MxEvent *Event, __in PCSTR ReasonForWaiting, __in PVOID Handle, __in ULONG WarningTimeoutInSec, __in ULONG WaitSignalFlags)
__checkReturn NTSTATUS AllocateUrb(__in USBD_HANDLE USBDHandle)
#define InsertTailList(ListHead, Entry)
#define TRACE_LEVEL_INFORMATION
FxUsbPipeTransferContext(__in FX_URB_TYPE UrbType)
#define NUM_PENDING_READS_DEFAULT
PFN_WDF_USB_READERS_FAILED m_ReadersFailedCallback
ULONG ResubmitRepeater(__in FxUsbPipeRepeatReader *Repeater, __out NTSTATUS *Status)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
enum _FX_URB_TYPE FX_URB_TYPE
FxUsbDevice * m_UsbDevice
virtual BOOLEAN Dispose(VOID)
FxSystemWorkItem * m_WorkItem
__inline BOOLEAN Enqueue(__in PFN_WDF_SYSTEMWORKITEM CallbackFunc, __in PVOID Parameter)
virtual VOID CopyParameters(__in FxRequestBase *Request)
static EVT_SYSTEMWORKITEM _FxUsbPipeRequestWorkItemThunk
WDF_IO_TARGET_STATE m_State
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_ WDFREQUEST _In_ PWDF_USB_CONTROL_SETUP_PACKET _In_opt_ WDFMEMORY TransferMemory
BOOLEAN QueueWorkItemLocked(__in FxUsbPipeRepeatReader *Repeater)
NTSTATUS __inline FxValidateRequestOptions(_In_ PFX_DRIVER_GLOBALS FxDriverGlobals, _In_ PWDF_REQUEST_SEND_OPTIONS Options, _In_opt_ FxRequestBase *Request=NULL)
#define STATUS_INVALID_DEVICE_STATE
virtual VOID Dispose(VOID)
__inline VOID IncrementIoCount(VOID)
enum _WDF_IO_TARGET_SENT_IO_ACTION WDF_IO_TARGET_SENT_IO_ACTION
BOOLEAN m_ReadersSubmitted
GLenum GLuint GLenum GLsizei const GLchar * buf
_Must_inspect_result_ NTSTATUS SubmitSyncRequestIgnoreTargetState(__in FxRequestBase *Request, __in_opt PWDF_REQUEST_SEND_OPTIONS RequestOptions)
GLenum const GLfloat * params
#define TRACE_LEVEL_VERBOSE
_URB_BULK_OR_INTERRUPT_TRANSFER m_UrbLegacy
VOID SetUsbType(__in WDF_USB_REQUEST_TYPE Type)
virtual _Must_inspect_result_ NTSTATUS Allocate(__out FxMemoryObject **PPMemory)=0
#define FX_USB_WORKITEM_RERUN
#define InterlockedCompareExchangePointer
USBD_PIPE_HANDLE PipeHandle
PVOID __inline GetObjectHandle(VOID)
virtual VOID CopyParameters(__in FxRequestBase *Request)
FORCEINLINE VOID WDF_REQUEST_REUSE_PARAMS_INIT(_Out_ PWDF_REQUEST_REUSE_PARAMS Params, _In_ ULONG Flags, _In_ NTSTATUS Status)
virtual VOID ReleaseAndRestore(__in FxRequestBase *Request)
_Must_inspect_result_ BOOLEAN IsVersionGreaterThanOrEqualTo(__in ULONG Major, __in ULONG Minor)
NTSTATUS CallDriver(__in MdDeviceObject DeviceObject)
_Must_inspect_result_ NTSTATUS Config(__in PWDF_USB_CONTINUOUS_READER_CONFIG Config, __in size_t TotalBufferLength)
static EVT_WDF_REQUEST_COMPLETION_ROUTINE _FxUsbPipeRequestComplete
void restart(int argc, const char *argv[])
USBD_STATUS GetUsbdStatus(VOID)
struct _URB_HEADER UrbHeader
__inline MdDeviceObject GetTargetDevice(VOID)
_In_ PVOID _In_ LONG InterfaceNumber
virtual VOID GotoRemoveState(__in WDF_IO_TARGET_STATE NewState, __in PLIST_ENTRY PendedRequestListHead, __in PSINGLE_LIST_ENTRY SentRequestListHead, __in BOOLEAN Lock, __out PBOOLEAN Wait)
__inline NTSTATUS FxVerifierCheckIrqlLevel(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in KIRQL Irql)
_Must_inspect_result_ _In_ ULONG Flags
PFX_DRIVER_GLOBALS pFxDriverGlobals
_In_ WDFUSBINTERFACE UsbInterface
~FxUsbPipeRequestContext(VOID)
WDF_EXTERN_C_START enum _WDF_IO_TARGET_STATE WDF_IO_TARGET_STATE
#define NT_SUCCESS(StatCode)
FxUsbPipeContinuousReader(__in FxUsbPipe *Pipe, __in UCHAR NumReaders)
WDFUSBPIPE GetHandle(VOID)
FxLookasideList * m_Lookaside
struct _WDF_USB_REQUEST_COMPLETION_PARAMS::@3691::@3695 PipeWrite
USBD_STATUS GetUsbdStatus(VOID)
virtual VOID GotoStopState(__in WDF_IO_TARGET_SENT_IO_ACTION Action, __in PSINGLE_LIST_ENTRY SentRequestListHead, __out PBOOLEAN Wait, __in BOOLEAN LockSelf)
virtual VOID GotoStopState(__in WDF_IO_TARGET_SENT_IO_ACTION Action, __in PSINGLE_LIST_ENTRY SentRequestListHead, __out PBOOLEAN Wait, __in BOOLEAN LockSelf)
_Must_inspect_result_ BOOLEAN IsVerificationEnabled(__in ULONG Major, __in ULONG Minor, __in FxVerifierDownlevelOption DownLevel)
_Must_inspect_result_ _In_ WDFDEVICE _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFUSBDEVICE * UsbDevice
_In_opt_ PVOID _In_ ULONG _In_ PVOID context
FxUsbPipeContinuousReader * m_Reader
VOID SetInfo(__in WDF_USB_REQUEST_TYPE Type, __in USBD_PIPE_HANDLE PipeHandle, __in USHORT Function)
_Must_inspect_result_ NTSTATUS InitContinuousReader(__in PWDF_USB_CONTINUOUS_READER_CONFIG Config, __in size_t TotalBufferLength)
#define STATUS_UNSUCCESSFUL
virtual VOID ReleaseAndRestore(__in FxRequestBase *Request)
FxUsbInterface * m_UsbInterface
struct _SINGLE_LIST_ENTRY * Next
USBD_PIPE_INFORMATION m_PipeInformation
VOID USBD_UrbFree(_In_ USBD_HANDLE USBDHandle, _In_ PURB Urb)
WDFCONTEXT m_ReadCompleteContext
VOID __inline FxMdlFree(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in PMDL Mdl)
#define UMURB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL
VOID MarkNoDeleteDDI(__in FxObjectLockState State=ObjectLock)
LIST_ENTRY m_SentIoListHead
virtual VOID StoreAndReferenceMemory(__in FxRequestBuffer *Buffer)
WDF_USB_REQUEST_COMPLETION_PARAMS m_UsbParameters
_In_ WDFUSBINTERFACE _In_ UCHAR _Out_opt_ PWDF_USB_PIPE_INFORMATION PipeInfo
VOID FxUsbUmFormatRequest(__in FxRequestBase *Request, __in_xcount(Urb->Length) PUMURB_HEADER Urb, __in IWudfFile *HostFile, __in BOOLEAN Reuse)
virtual size_t GetBufferSize(VOID)
_Must_inspect_result_ NTSTATUS Reuse(__in PWDF_REQUEST_REUSE_PARAMS ReuseParams)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_CHILD_LIST_CONFIG Config
virtual VOID WaitForSentIoToComplete(VOID)
#define TRACE_LEVEL_ERROR
virtual _Must_inspect_result_ NTSTATUS GotoStartState(__in PLIST_ENTRY RequestListHead, __in BOOLEAN Lock=TRUE)
_Must_inspect_result_ NTSTATUS FormatRepeater(__in FxUsbPipeRepeatReader *Repeater)
ULONG SubmitLocked(__in FxRequestBase *Request, __in_opt PWDF_REQUEST_SEND_OPTIONS Options, __in ULONG Flags)
PFN_WDF_USB_READER_COMPLETION_ROUTINE m_ReadCompleteCallback
#define USBD_SHORT_TRANSFER_OK
static __inline MxThread MxGetCurrentThread()
#define URB_FUNCTION_RESET_PIPE
struct _WDF_USB_REQUEST_COMPLETION_PARAMS::@3691::@3696 PipeRead
FxUsbPipeRepeatReader m_Readers[1]
__inline PFX_DRIVER_GLOBALS GetDriverGlobals(VOID)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
ULONG FxVerifierDbgWaitForSignalTimeoutInSec
SINGLE_LIST_ENTRY m_DrainSingleEntry
VOID RemoveDeletedPipe(__in FxUsbPipe *Pipe)
_In_ WDFIOTARGET _In_ _Strict_type_match_ WDF_IO_TARGET_SENT_IO_ACTION Action
#define URB_FUNCTION_ABORT_PIPE
#define InitializeListHead(ListHead)
PFX_DRIVER_GLOBALS fxDriverGlobals
WDF_REQUEST_COMPLETION_PARAMS m_CompletionParams
__inline FxRequestContext * GetContext(VOID)
DoTraceLevelMessage(pFxDriverGlobals, TRACE_LEVEL_VERBOSE, TRACINGPNP, "Enter, WDFDEVICE %p", Device)
#define FIELD_OFFSET(t, f)
PVOID m_WorkItemRerunContext
WDFMEMORY_OFFSET m_Offsets
virtual VOID GotoRemoveState(__in WDF_IO_TARGET_STATE NewState, __in PLIST_ENTRY PendedRequestListHead, __in PSINGLE_LIST_ENTRY SentRequestListHead, __in BOOLEAN Lock, __out PBOOLEAN Wait)
VOID DeleteFromFailedCreate(VOID)
IO_WORKITEM_ROUTINE * PMX_WORKITEM_ROUTINE
_URB_PIPE_REQUEST * m_Urb
struct tagContext Context
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS RequestOptions
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFWAITLOCK * Lock
WINUSB_PIPE_INFORMATION m_PipeInformationUm
_URB_PIPE_REQUEST m_UrbLegacy
VOID __inline SetTarget(__in FxIoTarget *Target)
FxUsbPipeContinuousReader * Parent
FxObjectHandleGetPtrAndGlobals(GetFxDriverGlobals(DriverGlobals), Device, FX_TYPE_DEVICE,(PVOID *)&pDevice, &pFxDriverGlobals)
#define RtlZeroMemory(Destination, Length)
IWudfFile * m_pHostTargetFile
#define NUM_PENDING_READS_MAX
#define RtlCopyMemory(Destination, Source, Length)
__inline VOID FxUsbPipeRequestWorkItemHandler(__in FxUsbPipeRepeatReader *FailedRepeater)
VOID SetUrbInfo(__in USBD_PIPE_HANDLE PipeHandle, __in ULONG TransferFlags)
_Must_inspect_result_ NTSTATUS FormatResetRequest(__in FxRequestBase *Request)
USBD_PIPE_HANDLE PipeHandle
union _WDF_USB_REQUEST_COMPLETION_PARAMS::@3691 Parameters
virtual VOID StoreAndReferenceMemory(__in FxRequestBuffer *Buffer)
volatile POINTER_ALIGNMENT MxThread m_WorkItemThread
~FxUsbPipeTransferContext(VOID)
BOOLEAN m_CheckPacketSize
NTSTATUS USBD_UrbAllocate(_In_ USBD_HANDLE USBDHandle, _Outptr_result_bytebuffer_(sizeof(URB)) PURB *Urb)
static SERVICE_STATUS status
__checkReturn NTSTATUS AllocateUrb(__in USBD_HANDLE USBDHandle)
#define UMURB_FUNCTION_ABORT_PIPE
#define FX_USB_WORKITEM_IN_PROGRESS
FxVerifierDbgBreakPoint(pFxDriverGlobals)
virtual PVOID GetBuffer(VOID)=0
MdDeviceObject m_TargetDevice
enum _WDF_USB_REQUEST_TYPE WDF_USB_REQUEST_TYPE
VOID InitPipe(__in PUSBD_PIPE_INFORMATION PipeInfo, __in UCHAR InterfaceNumber, __in FxUsbInterface *UsbInterface)
virtual VOID WaitForSentIoToComplete(VOID)
VOID FxFormatUsbRequest(__in FxRequestBase *Request, __in PURB Urb, __in FX_URB_TYPE FxUrbType, __drv_when(FxUrbType==FxUrbTypeUsbdAllocated, __in) __drv_when(FxUrbType !=FxUrbTypeUsbdAllocated, __in_opt) USBD_HANDLE UsbdHandle)
_URB_BULK_OR_INTERRUPT_TRANSFER * m_Urb