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;
435 ConfigureDevice_Exit:
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"));
738 ntStatus =
IoCallDriver(deviceExtension->TopOfStackDeviceObject, irp);
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);
1231 pdc = irpStack->
Parameters.DeviceCapabilities.Capabilities;
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)
1474 nextIrp->IoStatus.Information = 0;
1488 IoCallDriver(DeviceExtension->TopOfStackDeviceObject, nextIrp);
1505 cancelledIrp->IoStatus.Information = 0;
1587 listHead = &deviceExtension->NewRequestsQueue;
1588 for(thisEntry = listHead->
Flink, nextEntry = thisEntry->
Flink;
1589 thisEntry != listHead;
1590 thisEntry = nextEntry, nextEntry = thisEntry->
Flink)
1621 pendingIrp->IoStatus.Information = 0;
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";
NTSTATUS NTAPI FreeBT_DispatchClean(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
LONG NTAPI FreeBT_IoDecrement(IN OUT PDEVICE_EXTENSION DeviceExtension)
_In_opt_ ULONG _Out_ PULONG Value
#define IRP_MN_CANCEL_REMOVE_DEVICE
struct _USB_DEVICE_DESCRIPTOR USB_DEVICE_DESCRIPTOR
VOID NTAPI DpcRoutine(IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
#define STATUS_DELETE_PENDING
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
#define IRP_MN_QUERY_RESOURCES
#define UsbBuildSelectConfigurationRequest(urb, length, configurationDescriptor)
#define IRP_MN_REMOVE_DEVICE
#define STATUS_INSUFFICIENT_RESOURCES
VOID NTAPI IdleRequestWorkerRoutine(IN PDEVICE_OBJECT DeviceObject, IN PVOID Context)
NTSTATUS NTAPI SelectInterfaces(IN PDEVICE_OBJECT DeviceObject, IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor)
#define IOCTL_INTERNAL_USB_SUBMIT_URB
VOID NTAPI CancelWaitWake(IN PDEVICE_EXTENSION DeviceExtension)
NTSTATUS NTAPI SubmitIdleRequestIrp(IN PDEVICE_EXTENSION DeviceExtension)
#define STATUS_MORE_PROCESSING_REQUIRED
#define FREEBT_STDENDPOINT_ACLOUT
#define UNREFERENCED_PARAMETER(P)
struct _DEVICE_OBJECT * PDEVICE_OBJECT
#define IRP_MN_FILTER_RESOURCE_REQUIREMENTS
NTSTATUS NTAPI ConfigureDevice(IN PDEVICE_OBJECT DeviceObject)
#define IRP_MN_QUERY_RESOURCE_REQUIREMENTS
#define IRP_MN_WRITE_CONFIG
NTSTATUS NTAPI HandleQueryCapabilities(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
LONG NTAPI FreeBT_IoIncrement(IN OUT PDEVICE_EXTENSION DeviceExtension)
struct _USBD_INTERFACE_INFORMATION * PUSBD_INTERFACE_INFORMATION
NTSTATUS NTAPI IoDeleteSymbolicLink(IN PUNICODE_STRING SymbolicLinkName)
VOID NTAPI IoDetachDevice(IN PDEVICE_OBJECT TargetDevice)
NTSTATUS NTAPI HandleStartDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
BOOLEAN NTAPI KeSetTimerEx(IN OUT PKTIMER Timer, IN LARGE_INTEGER DueTime, IN LONG Period, IN PKDPC Dpc OPTIONAL)
NTSTATUS NTAPI HandleCancelStopDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define InsertTailList(ListHead, Entry)
IoSetCancelRoutine(Irp, CancelRoutine)
NTSTATUS NTAPI FreeBT_GetRegistryDword(IN PWCHAR RegPath, IN PWCHAR ValueName, IN OUT PULONG Value)
#define UsbBuildGetDescriptorRequest(urb, length, descriptorType, descriptorIndex, languageId, transferBuffer, transferBufferMDL, transferBufferLength, link)
PIO_WORKITEM NTAPI IoAllocateWorkItem(IN PDEVICE_OBJECT DeviceObject)
LONG NTAPI KeSetEvent(IN PKEVENT Event, IN KPRIORITY Increment, IN BOOLEAN Wait)
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
VOID NTAPI IoFreeWorkItem(IN PIO_WORKITEM IoWorkItem)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
#define MAXIMUM_FILENAME_LENGTH
#define REMOTE_WAKEUP_MASK
#define FREEBT_STDENDPOINT_HCIEVENT
#define RtlMoveMemory(Destination, Source, Length)
NTSTATUS NTAPI HandleSurpriseRemoval(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define IoSetCompletionRoutine(_Irp, _CompletionRoutine, _Context, _InvokeOnSuccess, _InvokeOnError, _InvokeOnCancel)
struct _FREEBT_PIPE_CONTEXT * PFREEBT_PIPE_CONTEXT
struct _USB_CONFIGURATION_DESCRIPTOR * PUSB_CONFIGURATION_DESCRIPTOR
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
struct _USB_DEVICE_DESCRIPTOR * PUSB_DEVICE_DESCRIPTOR
FORCEINLINE VOID IoCopyCurrentIrpStackLocationToNext(_Inout_ PIRP Irp)
_In_ PUNICODE_STRING ValueName
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
NTSTATUS NTAPI CallUSBD(IN PDEVICE_OBJECT DeviceObject, IN PURB Urb)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
#define USB_DEVICE_DESCRIPTOR_TYPE
#define IRP_MN_QUERY_REMOVE_DEVICE
#define FREEBT_USB_STDSUBCLASS
#define USB_CONFIGURATION_DESCRIPTOR_TYPE
#define FREEBT_STDENDPOINT_AUDIOIN
#define FreeBT_DbgPrint(level, _x_)
VOID NTAPI ProcessQueuedRequests(IN OUT PDEVICE_EXTENSION DeviceExtension)
#define IoCompleteRequest
FORCEINLINE PLIST_ENTRY RemoveHeadList(_Inout_ PLIST_ENTRY ListHead)
#define FREEBT_USB_STDPROTOCOL
NTSTATUS NTAPI FreeBT_WmiDeRegistration(IN OUT PDEVICE_EXTENSION DeviceExtension)
NTSTATUS NTAPI IoSetDeviceInterfaceState(IN PUNICODE_STRING SymbolicLinkName, IN BOOLEAN Enable)
#define RTL_REGISTRY_OPTIONAL
NTSTATUS NTAPI HandleCancelRemoveDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI FreeBT_DispatchPnP(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
#define IRP_MN_READ_CONFIG
#define IRP_MN_QUERY_STOP_DEVICE
struct _URB_HEADER UrbHeader
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
struct _LIST_ENTRY * Flink
IN PVOID IN PVOID IN USHORT IN USHORT IN PINTERFACE Interface
_In_ LARGE_INTEGER _In_opt_ PKDPC Dpc
#define IRP_MN_SURPRISE_REMOVAL
BOOLEAN NTAPI KeCancelTimer(IN OUT PKTIMER Timer)
PUSB_INTERFACE_DESCRIPTOR NTAPI USBD_ParseConfigurationDescriptorEx(PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, PVOID StartPosition, LONG InterfaceNumber, LONG AlternateSetting, LONG InterfaceClass, LONG InterfaceSubClass, LONG InterfaceProtocol)
BOOLEAN NTAPI CanDeviceSuspend(IN PDEVICE_EXTENSION DeviceExtension)
#define IRP_MN_STOP_DEVICE
#define NT_SUCCESS(StatCode)
#define RESTORE_PREVIOUS_PNP_STATE(_Data_)
#define KeAcquireSpinLock(sl, irql)
#define IRP_MN_START_DEVICE
NTSTATUS NTAPI ReadandSelectDescriptors(IN PDEVICE_OBJECT DeviceObject)
#define IRP_MN_QUERY_DEVICE_TEXT
#define IRP_MN_QUERY_INTERFACE
NTSYSAPI NTSTATUS WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID)
VOID NTAPI CancelSelectSuspend(IN PDEVICE_EXTENSION DeviceExtension)
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
#define STATUS_UNSUCCESSFUL
#define IRP_MN_QUERY_BUS_INFORMATION
struct _URB_PIPE_REQUEST UrbPipeRequest
NTSTATUS NTAPI CanRemoveDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define InterlockedDecrement
#define ExAllocatePool(type, size)
NTSTATUS NTAPI FreeBT_AbortPipes(IN PDEVICE_OBJECT DeviceObject)
#define RTL_REGISTRY_ABSOLUTE
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
struct _USB_CONFIGURATION_DESCRIPTOR USB_CONFIGURATION_DESCRIPTOR
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2
NTSTATUS NTAPI HandleQueryStopDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
VOID NTAPI IoQueueWorkItem(IN PIO_WORKITEM IoWorkItem, IN PIO_WORKITEM_ROUTINE WorkerRoutine, IN WORK_QUEUE_TYPE QueueType, IN PVOID Context)
#define USBD_DEFAULT_MAXIMUM_TRANSFER_SIZE
NTSTATUS NTAPI HandleQueryRemoveDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
IN PDEVICE_OBJECT DeviceObject
PCHAR NTAPI PnPMinorFunctionString(UCHAR MinorFunction)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
struct _URB_SELECT_CONFIGURATION UrbSelectConfiguration
#define KeInitializeEvent(pEvt, foo, foo2)
NTSTATUS NTAPI IssueWaitWake(IN PDEVICE_EXTENSION DeviceExtension)
#define InterlockedIncrement
PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor
#define URB_FUNCTION_ABORT_PIPE
#define InitializeListHead(ListHead)
NTSTATUS NTAPI IoCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define KeReleaseSpinLock(sl, irql)
#define IRP_MN_QUERY_DEVICE_RELATIONS
IO_COMPLETION_ROUTINE * PIO_COMPLETION_ROUTINE
#define IoSkipCurrentIrpStackLocation(Irp)
PUSBD_INTERFACE_INFORMATION Interface
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)
#define SET_NEW_PNP_STATE(_Data_, _state_)
NTSTATUS NTAPI HandleRemoveDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI HandleStopDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
struct tagContext Context
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
NTSTATUS NTAPI DeconfigureDevice(IN PDEVICE_OBJECT DeviceObject)
#define IRP_MN_CANCEL_STOP_DEVICE
#define IRP_MN_DEVICE_USAGE_NOTIFICATION
NTSTATUS NTAPI IrpCompletionRoutine(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
#define FREEBT_STDENDPOINT_AUDIOOUT
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
VOID NTAPI KeClearEvent(IN PKEVENT Event)
PURB NTAPI USBD_CreateConfigurationRequestEx(PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, PUSBD_INTERFACE_LIST_ENTRY InterfaceList)
struct _BEEP_DEVICE_EXTENSION * PDEVICE_EXTENSION
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
NTSTATUS NTAPI ReleaseMemory(IN PDEVICE_OBJECT DeviceObject)
#define IRP_MN_QUERY_PNP_DEVICE_STATE
NTSTATUS NTAPI CanStopDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define RTL_QUERY_REGISTRY_DIRECT
#define FREEBT_USB_STDCLASS
#define FREEBT_STDENDPOINT_ACLIN
#define IRP_MN_QUERY_CAPABILITIES
_In_opt_ PVOID DeferredContext