ReactOS 0.4.16-dev-1946-g52006dd
FxUsbDeviceStringContext Struct Reference

#include <fxusbdevice.hpp>

Inheritance diagram for FxUsbDeviceStringContext:
Collaboration diagram for FxUsbDeviceStringContext:

Public Member Functions

 FxUsbDeviceStringContext (__in FX_URB_TYPE FxUrbType)
 
 ~FxUsbDeviceStringContext (VOID)
 
__checkReturn NTSTATUS AllocateUrb (__in USBD_HANDLE USBDHandle)
 
virtual VOID Dispose (VOID)
 
virtual VOID CopyParameters (__in FxRequestBase *Request)
 
VOID SetUrbInfo (__in UCHAR StringIndex, __in USHORT LangID)
 
USBD_STATUS GetUsbdStatus (VOID)
 
_Must_inspect_result_ NTSTATUS AllocateDescriptor (__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in size_t BufferSize)
 
- Public Member Functions inherited from FxUsbRequestContext
 FxUsbRequestContext (__in FX_REQUEST_CONTEXT_TYPE Type)
 
virtual USBD_STATUS GetUsbdStatus (VOID)=0
 
virtual VOID CopyParameters (__in FxRequestBase *Request)
 
VOID SetUsbType (__in WDF_USB_REQUEST_TYPE Type)
 
VOID __inline InitUsbParameters (VOID)
 
- Public Member Functions inherited from FxRequestContext
 FxRequestContext (__in FX_REQUEST_CONTEXT_TYPE Type)
 
virtual ~FxRequestContext (VOID)
 
virtual VOID Dispose (VOID)
 
virtual VOID StoreAndReferenceMemory (__in FxRequestBuffer *Buffer)
 
virtual VOID ReleaseAndRestore (__in FxRequestBase *Request)
 
__inline BOOLEAN IsType (__in FX_REQUEST_CONTEXT_TYPE Type)
 
virtual VOID CopyParameters (__in FxRequestBase *Request)
 
VOID FormatWriteParams (__in_opt IFxMemory *WriteMemory, __in_opt PWDFMEMORY_OFFSET WriteOffsets)
 
VOID FormatReadParams (__in_opt IFxMemory *ReadMemory, __in_opt PWDFMEMORY_OFFSET ReadOffsets)
 
VOID FormatOtherParams (__in FxInternalIoctlParams *InternalIoctlParams)
 
- Public Member Functions inherited from FxStump
PVOID operator new (__in size_t Size, __in PFX_DRIVER_GLOBALS FxDriverGlobals)
 
PVOID operator new (__in size_t Size, __in PFX_DRIVER_GLOBALS FxDriverGlobals, __in POOL_TYPE PoolType)
 
VOID operator delete (__in PVOID pointer)
 
PVOID operator new[] (__in size_t Size, __in PFX_DRIVER_GLOBALS FxDriverGlobals)
 
VOID operator delete[] (__in PVOID pointer)
 

Public Attributes

_URB_CONTROL_DESCRIPTOR_REQUEST m_UrbLegacy
 
_URB_CONTROL_DESCRIPTOR_REQUESTm_Urb
 
PUSB_STRING_DESCRIPTOR m_StringDescriptor
 
ULONG m_StringDescriptorLength
 
- Public Attributes inherited from FxUsbRequestContext
WDF_USB_REQUEST_COMPLETION_PARAMS m_UsbParameters
 
UMURB m_UmUrb
 
- Public Attributes inherited from FxRequestContext
WDF_REQUEST_COMPLETION_PARAMS m_CompletionParams
 
IFxMemorym_RequestMemory
 
FX_REQUEST_CONTEXT_TYPE m_RequestType
 

Private Attributes

USBD_HANDLE m_USBDHandle
 

Additional Inherited Members

- Protected Member Functions inherited from FxRequestContext
VOID __inline InitCompletionParams (VOID)
 
- Protected Member Functions inherited from FxStump
 FxStump (VOID)
 
- Static Protected Member Functions inherited from FxRequestContext
static VOID _StoreAndReferenceMemoryWorker (__in PVOID Tag, __deref_out_opt IFxMemory **PPMemory, __in FxRequestBuffer *Buffer)
 

Detailed Description

Definition at line 93 of file fxusbdevice.hpp.

Constructor & Destructor Documentation

◆ FxUsbDeviceStringContext()

FxUsbDeviceStringContext::FxUsbDeviceStringContext ( __in FX_URB_TYPE  FxUrbType)

Definition at line 149 of file fxusbdevice.cpp.

151 :
153{
158
159 if (FxUrbType == FxUrbTypeLegacy) {
162 m_Urb->Hdr.Length = sizeof(*m_Urb);
164 }
165 else {
166 m_Urb = NULL;
167 }
168}
#define NULL
Definition: types.h:112
@ FX_RCT_USB_STRING_REQUEST
@ FxUrbTypeLegacy
Definition: fxusbdevice.hpp:27
PUSB_STRING_DESCRIPTOR m_StringDescriptor
_URB_CONTROL_DESCRIPTOR_REQUEST m_UrbLegacy
_URB_CONTROL_DESCRIPTOR_REQUEST * m_Urb
struct _URB_HEADER Hdr
Definition: usb.h:341
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
#define USB_STRING_DESCRIPTOR_TYPE
Definition: usb100.h:51
#define URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE
Definition: usb.h:97

◆ ~FxUsbDeviceStringContext()

FxUsbDeviceStringContext::~FxUsbDeviceStringContext ( VOID  )

Definition at line 170 of file fxusbdevice.cpp.

173{
174 if (m_StringDescriptor != NULL) {
177 }
178
179 if (m_Urb && (m_Urb != &m_UrbLegacy)){
181 }
182 m_Urb = NULL;
184}
void FxPoolFree(__in_xcount(ptr is at an offset from AllocationStart) PVOID ptr)
Definition: wdfpool.cpp:361
Definition: usb.h:529
VOID USBD_UrbFree(_In_ USBD_HANDLE USBDHandle, _In_ PURB Urb)
Definition: usbdex.c:83

Member Function Documentation

◆ AllocateDescriptor()

_Must_inspect_result_ NTSTATUS FxUsbDeviceStringContext::AllocateDescriptor ( __in PFX_DRIVER_GLOBALS  FxDriverGlobals,
__in size_t  BufferSize 
)

Definition at line 307 of file fxusbdevice.cpp.

311{
312 PUSB_STRING_DESCRIPTOR pDescriptor;
313 size_t length;
315
317 return STATUS_SUCCESS;
318 }
319
320 length = sizeof(USB_STRING_DESCRIPTOR) - sizeof(pDescriptor->bString[0]) +
322
323 pDescriptor = (PUSB_STRING_DESCRIPTOR) FxPoolAllocate(
324 FxDriverGlobals,
326 length);
327
328 if (pDescriptor == NULL) {
330 }
331
332 if (m_StringDescriptor != NULL) {
334 }
335
336 RtlZeroMemory(pDescriptor, length);
337
338 m_StringDescriptor = pDescriptor;
339
341
342 return status;
343}
LONG NTSTATUS
Definition: precomp.h:26
#define BufferSize
Definition: mmc.h:75
#define NonPagedPool
Definition: env_spec_w32.h:307
#define RtlSizeTToULong
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
#define STATUS_SUCCESS
Definition: shellext.h:65
Definition: ps.c:97
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
struct _USB_STRING_DESCRIPTOR * PUSB_STRING_DESCRIPTOR
struct _USB_STRING_DESCRIPTOR USB_STRING_DESCRIPTOR
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
Definition: wdfmemory.h:254

Referenced by FxUsbDevice::FormatStringRequest().

◆ AllocateUrb()

__checkReturn NTSTATUS FxUsbDeviceStringContext::AllocateUrb ( __in USBD_HANDLE  USBDHandle)

Definition at line 188 of file fxusbdevice.cpp.

191{
193
195 ASSERT(m_Urb == NULL);
196
198
199 if (!NT_SUCCESS(status)) {
200 goto Done;
201 }
202
204
206 m_Urb->Hdr.Length = sizeof(*m_Urb);
208
209Done:
210 return status;
211}
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
#define ASSERT(a)
Definition: mode.c:44
NTSTATUS USBD_UrbAllocate(_In_ USBD_HANDLE USBDHandle, _Outptr_result_bytebuffer_(sizeof(URB)) PURB *Urb)
Definition: usbdex.c:59
_Must_inspect_result_ _In_ PDEVICE_OBJECT _In_ ULONG _In_ ULONG _Out_ USBD_HANDLE * USBDHandle
Definition: usbdlib.h:278

Referenced by FxUsbDevice::FormatStringRequest().

◆ CopyParameters()

VOID FxUsbDeviceStringContext::CopyParameters ( __in FxRequestBase Request)
virtual

Reimplemented from FxUsbRequestContext.

Definition at line 227 of file fxusbdevice.cpp.

230{
231 //
232 // Make sure we got an even number of bytes and that we got a header
233 //
234 if ((m_StringDescriptor->bLength & 0x1) ||
237 }
238 else if (NT_SUCCESS(Request->GetSubmitFxIrp()->GetStatus())) {
239 //
240 // No matter what, indicate the required size to the caller
241 //
244
245 if (m_UsbParameters.Parameters.DeviceString.RequiredSize >
247 //
248 // Too much string to fit into the buffer supplied by the client.
249 // Morph the status into a warning. Copy as much as we can.
250 //
255 }
256 else {
257 //
258 // Everything fits, copy it over
259 //
262
266 }
267 }
268
270}
virtual size_t GetBufferSize(VOID)=0
virtual PVOID GetBuffer(VOID)=0
#define STATUS_BUFFER_OVERFLOW
Definition: shellext.h:66
WDF_REQUEST_COMPLETION_PARAMS m_CompletionParams
IFxMemory * m_RequestMemory
WDF_USB_REQUEST_COMPLETION_PARAMS m_UsbParameters
virtual VOID CopyParameters(__in FxRequestBase *Request)
struct _WDF_USB_REQUEST_COMPLETION_PARAMS::@4014::@4015 DeviceString
union _WDF_USB_REQUEST_COMPLETION_PARAMS::@4014 Parameters
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
#define STATUS_DEVICE_DATA_ERROR
Definition: udferr_usr.h:159
struct _USB_COMMON_DESCRIPTOR USB_COMMON_DESCRIPTOR
_In_ WDFREQUEST Request
Definition: wdfdevice.h:547

◆ Dispose()

VOID FxUsbDeviceStringContext::Dispose ( VOID  )
virtual

Reimplemented from FxRequestContext.

Definition at line 214 of file fxusbdevice.cpp.

217{
218 if (m_Urb && (m_Urb != &m_UrbLegacy)){
220 m_Urb = NULL;
222 }
223
224}

◆ GetUsbdStatus()

USBD_STATUS FxUsbDeviceStringContext::GetUsbdStatus ( VOID  )
virtual

Implements FxUsbRequestContext.

Definition at line 298 of file fxusbdevice.cpp.

301{
302 return m_Urb->Hdr.Status;
303}

◆ SetUrbInfo()

VOID FxUsbDeviceStringContext::SetUrbInfo ( __in UCHAR  StringIndex,
__in USHORT  LangID 
)

Definition at line 273 of file fxusbdevice.cpp.

277{
279
281
282#if (FX_CORE_MODE == FX_CORE_KERNEL_MODE)
285
288#elif (FX_CORE_MODE == FX_CORE_USER_MODE)
291
294#endif
295}
VOID SetUsbType(__in WDF_USB_REQUEST_TYPE Type)
struct _UMURB_DESCRIPTOR_REQUEST UmUrbDescriptorRequest
Definition: umusb.h:245
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_writes_opt_ NumCharacters PUSHORT _Inout_ PUSHORT _In_ UCHAR StringIndex
Definition: wdfusb.h:1080
@ WdfUsbRequestTypeDeviceString
Definition: wdfusb.h:89
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_writes_opt_ NumCharacters PUSHORT _Inout_ PUSHORT _In_ UCHAR _In_opt_ USHORT LangID
Definition: wdfusb.h:1083

Referenced by FxUsbDevice::FormatStringRequest().

Member Data Documentation

◆ m_StringDescriptor

PUSB_STRING_DESCRIPTOR FxUsbDeviceStringContext::m_StringDescriptor

◆ m_StringDescriptorLength

ULONG FxUsbDeviceStringContext::m_StringDescriptorLength

Definition at line 152 of file fxusbdevice.hpp.

Referenced by AllocateDescriptor(), FxUsbDeviceStringContext(), and SetUrbInfo().

◆ m_Urb

◆ m_UrbLegacy

◆ m_USBDHandle

USBD_HANDLE FxUsbDeviceStringContext::m_USBDHandle
private

The documentation for this struct was generated from the following files: