35 if (
Removed == deviceExtension->DeviceState)
38 Irp->IoStatus.Status = ntStatus;
39 Irp->IoStatus.Information = 0;
49 ASSERT(deviceExtension->IdleReqPend == 0);
55 if (deviceExtension->SSEnable)
63 FreeBT_DbgPrint(3, (
"FBTUSB: ///////////////////////////////////////////\n"));
90 FreeBT_DbgPrint(3, (
"FBTUSB: FreeBT_DispatchPnP::IRP_MN_STOP_DEVICE::"));
107 FreeBT_DbgPrint(3, (
"FBTUSB: FreeBT_DispatchPnP::IRP_MN_SURPRISE_REMOVAL::"));
131 Irp->IoStatus.Status = ntStatus;
132 Irp->IoStatus.Information = 0;
153 deviceExtension->UsbConfigurationDescriptor =
NULL;
154 deviceExtension->UsbInterface =
NULL;
155 deviceExtension->PipeContext =
NULL;
164 (
PVOID)&startDeviceEvent,
173 ntStatus =
Irp->IoStatus.Status;
179 FreeBT_DbgPrint(1, (
"FBTUSB: HandleStartDevice: Lower drivers failed this Irp (0x%08x)\n", ntStatus));
189 FreeBT_DbgPrint(1, (
"FBTUSB: HandleStartDevice: ReadandSelectDescriptors failed (0x%08x)\n", ntStatus));
199 FreeBT_DbgPrint(1, (
"FBTUSB: HandleStartDevice: IoSetDeviceInterfaceState failed (0x%08x)\n", ntStatus));
211 deviceExtension->FlagWWOutstanding = 0;
212 deviceExtension->FlagWWCancel = 0;
213 deviceExtension->WaitWakeIrp =
NULL;
215 if (deviceExtension->WaitWakeEnable)
224 deviceExtension->SSEnable = deviceExtension->SSRegistryEnable;
227 if (deviceExtension->SSEnable)
231 deviceExtension->FreeIdleIrpCount = 0;
252 deviceDescriptor =
NULL;
260 if (deviceDescriptor)
288 FreeBT_DbgPrint(1, (
"FBTUSB: ReadandSelectDescriptors: Failed to allocate memory for deviceDescriptor"));
298 FreeBT_DbgPrint(1, (
"FBTUSB: ReadandSelectDescriptors: Failed to allocate memory for urb"));
317 configurationDescriptor =
NULL;
330 if(configurationDescriptor)
338 configurationDescriptor,
346 FreeBT_DbgPrint(1, (
"FBTUSB: ConfigureDevice: UsbBuildGetDescriptorRequest failed\n"));
347 goto ConfigureDevice_Exit;
355 FreeBT_DbgPrint(1, (
"FBTUSB: ConfigureDevice: Failed to allocate mem for config Descriptor\n"));
357 goto ConfigureDevice_Exit;
365 if (configurationDescriptor)
373 configurationDescriptor,
381 FreeBT_DbgPrint(1,(
"FBTUSB: ConfigureDevice: Failed to read configuration descriptor"));
382 goto ConfigureDevice_Exit;
390 FreeBT_DbgPrint(1, (
"FBTUSB: ConfigureDevice: Failed to alloc mem for config Descriptor\n"));
392 goto ConfigureDevice_Exit;
400 FreeBT_DbgPrint(1, (
"FBTUSB: ConfigureDevice: Failed to allocate memory for urb\n"));
402 goto ConfigureDevice_Exit;
406 if (configurationDescriptor)
410 deviceExtension->UsbConfigurationDescriptor = configurationDescriptor;
415 deviceExtension->WaitWakeEnable = 1;
421 deviceExtension->WaitWakeEnable = 0;
431 deviceExtension->UsbConfigurationDescriptor =
NULL;
448 LONG numberOfInterfaces, interfaceNumber, interfaceindex;
461 interfaceDescriptor =
NULL;
463 numberOfInterfaces = ConfigurationDescriptor->bNumInterfaces;
464 interfaceindex = interfaceNumber = 0;
473 FreeBT_DbgPrint(1, (
"FBTUSB: SelectInterfaces: Failed to allocate mem for interfaceList\n"));
480 FreeBT_DbgPrint(3, (
"FBTUSB: Number of interfaces %d\n", numberOfInterfaces));
482 while (interfaceNumber < numberOfInterfaces)
485 ConfigurationDescriptor,
486 ConfigurationDescriptor,
490 if (interfaceDescriptor)
524 if (deviceExtension->UsbInterface)
533 FreeBT_DbgPrint(1, (
"FBTUSB: SelectInterfaces: Memory alloc for UsbInterface failed\n"));
545 FreeBT_DbgPrint(3, (
"FBTUSB: Class, subclass, protocol 0x%x 0x%x 0x%x\n",
553 FreeBT_DbgPrint(3, (
"FBTUSB: This is a standard USB Bluetooth device\n"));
559 FreeBT_DbgPrint(3, (
"FBTUSB: WARNING: This device does not report itself as a standard USB Bluetooth device\n"));
570 if (!deviceExtension->PipeContext)
573 FreeBT_DbgPrint(1, (
"FBTUSB: Memory alloc for UsbInterface failed\n"));
579 FreeBT_DbgPrint(3, (
"FBTUSB: SelectInterfaces: Allocated PipeContext %p\n", deviceExtension->PipeContext));
582 deviceExtension->PipeContext[
i].PipeOpen =
FALSE;
599 deviceExtension->EventPipe=
Interface->Pipes[
i];
604 deviceExtension->PipeContext[
i].PipeType=
AclDataIn;
605 deviceExtension->DataInPipe=
Interface->Pipes[
i];
610 deviceExtension->PipeContext[
i].PipeType=
AclDataOut;
611 deviceExtension->DataOutPipe=
Interface->Pipes[
i];
616 deviceExtension->PipeContext[
i].PipeType=
SCODataIn;
617 deviceExtension->AudioInPipe=
Interface->Pipes[
i];
622 deviceExtension->PipeContext[
i].PipeType=
SCODataOut;
623 deviceExtension->AudioOutPipe=
Interface->Pipes[
i];
639 FreeBT_DbgPrint(1, (
"FBTUSB: SelectInterfaces: Failed to select an interface\n"));
647 FreeBT_DbgPrint(1, (
"FBTUSB: SelectInterfaces: USBD_CreateConfigurationRequestEx failed\n"));
682 FreeBT_DbgPrint(3, (
"FBTUSB: DeconfigureDevice: Failed to deconfigure device\n"));
692 FreeBT_DbgPrint(1, (
"FBTUSB: DeconfigureDevice: Failed to allocate urb\n"));
715 deviceExtension->TopOfStackDeviceObject,
726 FreeBT_DbgPrint(1, (
"FBTUSB: CallUSBD: IoBuildDeviceIoControlRequest failed\n"));
742 ntStatus = ioStatus.
Status;
779 Irp->IoStatus.Information = 0;
826 ntStatus =
Irp->IoStatus.Status;
870 if(deviceExtension->SSEnable)
884 deviceExtension->SSEnable = 0;
900 if (deviceExtension->WaitWakeEnable)
919 Irp->IoStatus.Status = ntStatus;
920 Irp->IoStatus.Information = 0;
961 Irp->IoStatus.Information = 0;
1003 ntStatus =
IoCallDriver(deviceExtension->TopOfStackDeviceObject,
Irp);
1007 ntStatus =
Irp->IoStatus.Status;
1055 if(deviceExtension->WaitWakeEnable)
1064 if (deviceExtension->SSEnable)
1071 deviceExtension->SSEnable = 0;
1094 FreeBT_DbgPrint(1, (
"FBTUSB: HandleSurpriseRemoval: IoSetDeviceInterfaceState::disable:failed\n"));
1101 Irp->IoStatus.Information = 0;
1104 ntStatus =
IoCallDriver(deviceExtension->TopOfStackDeviceObject,
Irp);
1136 if(deviceExtension->WaitWakeEnable)
1144 if (deviceExtension->SSEnable)
1150 deviceExtension->SSEnable = 0;
1168 FreeBT_DbgPrint(1, (
"FBTUSB: HandleRemoveDevice: IoSetDeviceInterfaceState::disable:failed\n"));
1187 ASSERT(requestCount > 0);
1204 Irp->IoStatus.Information = 0;
1207 ntStatus =
IoCallDriver(deviceExtension->TopOfStackDeviceObject,
Irp);
1236 FreeBT_DbgPrint(1, (
"FBTUSB: HandleQueryCapabilities::request failed\n"));
1243 pdc->SurpriseRemovalOK =
TRUE;
1255 ntStatus =
IoCallDriver(deviceExtension->TopOfStackDeviceObject,
Irp);
1259 ntStatus =
Irp->IoStatus.Status;
1267 deviceExtension->DeviceCapabilities = *pdc;
1270 if(deviceExtension->DeviceCapabilities.DeviceState[
i] <
PowerDeviceD3)
1272 deviceExtension->PowerDownLevel = deviceExtension->DeviceCapabilities.DeviceState[
i];
1281 pdc->SurpriseRemovalOK = 1;
1317 KeClearEvent(&deviceExtension->NoDpcWorkItemPendingEvent);
1333 FreeBT_DbgPrint(3, (
"FBTUSB: DpcRoutine: Cannot alloc memory for work item\n"));
1343 FreeBT_DbgPrint(3, (
"FBTUSB: DpcRoutine: Idle event not signaled\n"));
1366 FreeBT_DbgPrint(3, (
"FBTUSB: IdleRequestWorkerRoutine: Device is idle\n"));
1370 FreeBT_DbgPrint(1, (
"FBTUSB: IdleRequestWorkerRoutine: SubmitIdleRequestIrp failed\n"));
1378 FreeBT_DbgPrint(3, (
"FBTUSB: IdleRequestWorkerRoutine: Device is not idle\n"));
1415 PVOID cancelRoutine;
1421 cancelRoutine =
NULL;
1432 if(
IsListEmpty(&DeviceExtension->NewRequestsQueue))
1445 if (nextIrp->Cancel)
1488 IoCallDriver(DeviceExtension->TopOfStackDeviceObject, nextIrp);
1587 listHead = &deviceExtension->NewRequestsQueue;
1588 for(thisEntry = listHead->
Flink, nextEntry = thisEntry->
Flink;
1589 thisEntry != listHead;
1590 thisEntry = nextEntry, nextEntry = thisEntry->
Flink)
1627 Irp->IoStatus.Information = 0;
1644 if ((DeviceExtension->OpenHandleCount == 0) && (DeviceExtension->OutStandingIO == 1))
1662 pipeContext = deviceExtension->PipeContext;
1663 interfaceInfo = deviceExtension->UsbInterface;
1667 if(interfaceInfo ==
NULL || pipeContext ==
NULL)
1672 if(pipeContext[
i].PipeOpen)
1674 FreeBT_DbgPrint(3, (
"FBTUSB: FreeBT_AbortPipes: Aborting open pipe %d\n",
i));
1691 FreeBT_DbgPrint(1, (
"FBTUSB: FreeBT_AbortPipes: Failed to alloc memory for urb\n"));
1798 if (deviceExtension->UsbConfigurationDescriptor)
1800 FreeBT_DbgPrint(3, (
"FBTUSB: ReleaseMemory: Freeing UsbConfigurationDescriptor\n"));
1801 ExFreePool(deviceExtension->UsbConfigurationDescriptor);
1802 deviceExtension->UsbConfigurationDescriptor =
NULL;
1806 if(deviceExtension->UsbInterface)
1808 FreeBT_DbgPrint(3, (
"FBTUSB: ReleaseMemory: Freeing UsbInterface\n"));
1810 deviceExtension->UsbInterface =
NULL;
1814 if(deviceExtension->PipeContext)
1819 FreeBT_DbgPrint(3, (
"FBTUSB: Failed to delete symbolic link %ws\n", deviceExtension->wszDosDeviceName));
1821 FreeBT_DbgPrint(3, (
"FBTUSB: ReleaseMemory: Freeing PipeContext %p\n", deviceExtension->PipeContext));
1823 deviceExtension->PipeContext =
NULL;
1836 return "IRP_MN_START_DEVICE\n";
1839 return "IRP_MN_QUERY_REMOVE_DEVICE\n";
1842 return "IRP_MN_REMOVE_DEVICE\n";
1845 return "IRP_MN_CANCEL_REMOVE_DEVICE\n";
1848 return "IRP_MN_STOP_DEVICE\n";
1851 return "IRP_MN_QUERY_STOP_DEVICE\n";
1854 return "IRP_MN_CANCEL_STOP_DEVICE\n";
1857 return "IRP_MN_QUERY_DEVICE_RELATIONS\n";
1860 return "IRP_MN_QUERY_INTERFACE\n";
1863 return "IRP_MN_QUERY_CAPABILITIES\n";
1866 return "IRP_MN_QUERY_RESOURCES\n";
1869 return "IRP_MN_QUERY_RESOURCE_REQUIREMENTS\n";
1872 return "IRP_MN_QUERY_DEVICE_TEXT\n";
1875 return "IRP_MN_FILTER_RESOURCE_REQUIREMENTS\n";
1878 return "IRP_MN_READ_CONFIG\n";
1881 return "IRP_MN_WRITE_CONFIG\n";
1884 return "IRP_MN_EJECT\n";
1887 return "IRP_MN_SET_LOCK\n";
1890 return "IRP_MN_QUERY_ID\n";
1893 return "IRP_MN_QUERY_PNP_DEVICE_STATE\n";
1896 return "IRP_MN_QUERY_BUS_INFORMATION\n";
1899 return "IRP_MN_DEVICE_USAGE_NOTIFICATION\n";
1902 return "IRP_MN_SURPRISE_REMOVAL\n";
1905 return "IRP_MN_?????\n";
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
#define InterlockedIncrement
#define InterlockedDecrement
#define NT_SUCCESS(StatCode)
struct _BEEP_DEVICE_EXTENSION * PDEVICE_EXTENSION
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
#define IsListEmpty(ListHead)
#define MAXIMUM_FILENAME_LENGTH
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
struct _DEVICE_OBJECT * PDEVICE_OBJECT
#define KeInitializeEvent(pEvt, foo, foo2)
#define KeReleaseSpinLock(sl, irql)
#define KeSetEvent(pEvt, foo, foo2)
#define KeAcquireSpinLock(sl, irql)
#define RemoveHeadList(ListHead)
#define InitializeListHead(ListHead)
VOID NTAPI KeClearEvent(IN PKEVENT Event)
VOID NTAPI CancelSelectSuspend(IN PDEVICE_EXTENSION DeviceExtension)
NTSTATUS NTAPI SubmitIdleRequestIrp(IN PDEVICE_EXTENSION DeviceExtension)
NTSTATUS NTAPI DeconfigureDevice(IN PDEVICE_OBJECT DeviceObject)
NTSTATUS NTAPI CallUSBD(IN PDEVICE_OBJECT DeviceObject, IN PURB Urb)
VOID NTAPI ProcessQueuedRequests(IN OUT PDEVICE_EXTENSION DeviceExtension)
NTSTATUS NTAPI HandleCancelStopDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI FreeBT_DispatchPnP(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
BOOLEAN NTAPI CanDeviceSuspend(IN PDEVICE_EXTENSION DeviceExtension)
NTSTATUS NTAPI CanStopDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI HandleQueryRemoveDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI FreeBT_GetRegistryDword(IN PWCHAR RegPath, IN PWCHAR ValueName, IN OUT PULONG Value)
LONG NTAPI FreeBT_IoDecrement(IN OUT PDEVICE_EXTENSION DeviceExtension)
NTSTATUS NTAPI ReleaseMemory(IN PDEVICE_OBJECT DeviceObject)
NTSTATUS NTAPI FreeBT_DispatchClean(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI HandleQueryStopDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
VOID NTAPI DpcRoutine(IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
NTSTATUS NTAPI HandleCancelRemoveDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI HandleStartDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
LONG NTAPI FreeBT_IoIncrement(IN OUT PDEVICE_EXTENSION DeviceExtension)
NTSTATUS NTAPI ReadandSelectDescriptors(IN PDEVICE_OBJECT DeviceObject)
NTSTATUS NTAPI HandleStopDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
PCHAR NTAPI PnPMinorFunctionString(UCHAR MinorFunction)
NTSTATUS NTAPI HandleSurpriseRemoval(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI HandleRemoveDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI SelectInterfaces(IN PDEVICE_OBJECT DeviceObject, IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor)
NTSTATUS NTAPI CanRemoveDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI ConfigureDevice(IN PDEVICE_OBJECT DeviceObject)
NTSTATUS NTAPI IrpCompletionRoutine(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
NTSTATUS NTAPI HandleQueryCapabilities(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI FreeBT_AbortPipes(IN PDEVICE_OBJECT DeviceObject)
VOID NTAPI IdleRequestWorkerRoutine(IN PDEVICE_OBJECT DeviceObject, IN PVOID Context)
#define REMOTE_WAKEUP_MASK
VOID NTAPI CancelWaitWake(IN PDEVICE_EXTENSION DeviceExtension)
NTSTATUS NTAPI IssueWaitWake(IN PDEVICE_EXTENSION DeviceExtension)
#define FreeBT_DbgPrint(level, _x_)
#define FREEBT_STDENDPOINT_ACLIN
#define FREEBT_USB_STDCLASS
#define FREEBT_STDENDPOINT_HCIEVENT
#define SET_NEW_PNP_STATE(_Data_, _state_)
struct _FREEBT_PIPE_CONTEXT * PFREEBT_PIPE_CONTEXT
#define FREEBT_STDENDPOINT_AUDIOOUT
#define FREEBT_USB_STDSUBCLASS
#define FREEBT_STDENDPOINT_AUDIOIN
#define ExAllocatePool(type, size)
#define FREEBT_USB_STDPROTOCOL
#define RESTORE_PREVIOUS_PNP_STATE(_Data_)
#define FREEBT_STDENDPOINT_ACLOUT
NTSTATUS NTAPI FreeBT_WmiDeRegistration(IN OUT PDEVICE_EXTENSION DeviceExtension)
MxDeviceObject deviceObject
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
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
NTSYSAPI NTSTATUS WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID)
VOID NTAPI IoQueueWorkItem(IN PIO_WORKITEM IoWorkItem, IN PIO_WORKITEM_ROUTINE WorkerRoutine, IN WORK_QUEUE_TYPE QueueType, IN PVOID Context)
VOID NTAPI IoFreeWorkItem(IN PIO_WORKITEM IoWorkItem)
PIO_WORKITEM NTAPI IoAllocateWorkItem(IN PDEVICE_OBJECT DeviceObject)
IoSetCancelRoutine(Irp, CancelRoutine)
#define IoSetCompletionRoutine(_Irp, _CompletionRoutine, _Context, _InvokeOnSuccess, _InvokeOnError, _InvokeOnCancel)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RTL_REGISTRY_ABSOLUTE
#define RTL_QUERY_REGISTRY_DIRECT
#define RTL_REGISTRY_OPTIONAL
#define UNREFERENCED_PARAMETER(P)
#define IRP_MN_SURPRISE_REMOVAL
#define IoSkipCurrentIrpStackLocation(Irp)
#define IoCopyCurrentIrpStackLocationToNext(Irp)
VOID NTAPI IoDetachDevice(IN PDEVICE_OBJECT TargetDevice)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
NTSTATUS NTAPI IoSetDeviceInterfaceState(IN PUNICODE_STRING SymbolicLinkName, IN BOOLEAN Enable)
#define IoCompleteRequest
PIRP NTAPI IoBuildDeviceIoControlRequest(IN ULONG IoControlCode, IN PDEVICE_OBJECT DeviceObject, IN PVOID InputBuffer, IN ULONG InputBufferLength, IN PVOID OutputBuffer, IN ULONG OutputBufferLength, IN BOOLEAN InternalDeviceIoControl, IN PKEVENT Event, IN PIO_STATUS_BLOCK IoStatusBlock)
NTSTATUS NTAPI IoDeleteSymbolicLink(IN PUNICODE_STRING SymbolicLinkName)
#define STATUS_DELETE_PENDING
#define STATUS_MORE_PROCESSING_REQUIRED
union _IO_STACK_LOCATION::@1583 Parameters
struct _IO_STACK_LOCATION::@3982::@4009 DeviceCapabilities
struct _IO_STACK_LOCATION::@3982::@4021 Others
struct _LIST_ENTRY * Flink
struct _URB_SELECT_CONFIGURATION UrbSelectConfiguration
struct _URB_PIPE_REQUEST UrbPipeRequest
struct _URB_HEADER UrbHeader
PUSBD_INTERFACE_INFORMATION Interface
PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor
BOOLEAN NTAPI KeSetTimerEx(IN OUT PKTIMER Timer, IN LARGE_INTEGER DueTime, IN LONG Period, IN PKDPC Dpc OPTIONAL)
BOOLEAN NTAPI KeCancelTimer(IN OUT PKTIMER Timer)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define RtlMoveMemory(Destination, Source, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_UNSUCCESSFUL
#define STATUS_INSUFFICIENT_RESOURCES
struct _USB_CONFIGURATION_DESCRIPTOR USB_CONFIGURATION_DESCRIPTOR
struct _USB_CONFIGURATION_DESCRIPTOR * PUSB_CONFIGURATION_DESCRIPTOR
#define USB_CONFIGURATION_DESCRIPTOR_TYPE
#define USB_DEVICE_DESCRIPTOR_TYPE
struct _USB_DEVICE_DESCRIPTOR USB_DEVICE_DESCRIPTOR
struct _USB_DEVICE_DESCRIPTOR * PUSB_DEVICE_DESCRIPTOR
struct _USBD_INTERFACE_INFORMATION * PUSBD_INTERFACE_INFORMATION
#define URB_FUNCTION_ABORT_PIPE
#define USBD_DEFAULT_MAXIMUM_TRANSFER_SIZE
PURB NTAPI USBD_CreateConfigurationRequestEx(PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, PUSBD_INTERFACE_LIST_ENTRY InterfaceList)
PUSB_INTERFACE_DESCRIPTOR NTAPI USBD_ParseConfigurationDescriptorEx(PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, PVOID StartPosition, LONG InterfaceNumber, LONG AlternateSetting, LONG InterfaceClass, LONG InterfaceSubClass, LONG InterfaceProtocol)
#define UsbBuildSelectConfigurationRequest(urb, length, configurationDescriptor)
#define UsbBuildGetDescriptorRequest(urb, length, descriptorType, descriptorIndex, languageId, transferBuffer, transferBufferMDL, transferBufferLength, link)
#define IOCTL_INTERNAL_USB_SUBMIT_URB
_In_ PDEVICE_OBJECT DeviceObject
_In_ UCHAR _In_ UCHAR MinorFunction
_Must_inspect_result_ _In_ PWDF_DPC_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFDPC * Dpc
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE Interface
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING ValueName
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
#define IRP_MN_CANCEL_STOP_DEVICE
#define IRP_MN_QUERY_PNP_DEVICE_STATE
#define IRP_MN_QUERY_INTERFACE
#define IRP_MN_START_DEVICE
#define IRP_MN_DEVICE_USAGE_NOTIFICATION
#define IRP_MN_READ_CONFIG
#define IRP_MN_WRITE_CONFIG
#define IRP_MN_QUERY_RESOURCE_REQUIREMENTS
IO_COMPLETION_ROUTINE * PIO_COMPLETION_ROUTINE
#define IRP_MN_REMOVE_DEVICE
#define IRP_MN_FILTER_RESOURCE_REQUIREMENTS
#define IRP_MN_QUERY_DEVICE_RELATIONS
#define IRP_MN_QUERY_STOP_DEVICE
#define IRP_MN_QUERY_DEVICE_TEXT
#define IRP_MN_QUERY_CAPABILITIES
#define IRP_MN_QUERY_RESOURCES
#define IRP_MN_CANCEL_REMOVE_DEVICE
#define IRP_MN_STOP_DEVICE
#define IRP_MN_QUERY_BUS_INFORMATION
#define IRP_MN_QUERY_REMOVE_DEVICE
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
_In_opt_ PVOID DeferredContext
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2