27 LPWSTR GenericString =
L"Composite USB Device";
47 return Irp->IoStatus.Status;
53 if (PDODeviceExtension->FunctionDescriptor->FunctionDescription.Length)
71 RtlCopyMemory(
Buffer, PDODeviceExtension->FunctionDescriptor->FunctionDescription.Buffer, PDODeviceExtension->FunctionDescriptor->FunctionDescription.Length);
101 DPRINT(
"USBCCGP_PdoHandleDeviceRelations\n");
116 return Irp->IoStatus.Status;
123 if (!DeviceRelations)
134 DeviceRelations->
Count = 1;
255 swprintf(
Buffer,
L"%s&MI_%02x", (
LPWSTR)
Irp->IoStatus.Information, PDODeviceExtension->FunctionDescriptor->FunctionNumber);
276 DeviceString = &PDODeviceExtension->FunctionDescriptor->HardwareId;
295 swprintf(
Buffer,
L"%04x", PDODeviceExtension->FunctionDescriptor->FunctionNumber);
304 DeviceString = &PDODeviceExtension->FunctionDescriptor->CompatibleId;
311 return Irp->IoStatus.Status;
398 for(
Index = 0;
Index < PDODeviceExtension->FDODeviceExtension->FunctionDescriptorCount;
Index++)
405 PDODeviceExtension->FDODeviceExtension->ChildPDO[
Index] =
NULL;
452 DPRINT(
"[USBCCGP] PDO IRP_MN_START\n");
518 DPRINT(
"USBCCGP_BuildConfigurationDescriptor\n");
528 ConfigurationDescriptor = PDODeviceExtension->ConfigurationDescriptor;
535 for (
Index = 0;
Index < PDODeviceExtension->FunctionDescriptor->NumberOfInterfaces;
Index++)
601 DPRINT1(
"[USBCCGP] Failed to allocate %lu Bytes\n", TotalSize);
611 for (
Index = 0;
Index < PDODeviceExtension->FunctionDescriptor->NumberOfInterfaces;
Index++)
674 ConfigurationDescriptor =
Buffer;
676 ConfigurationDescriptor->
bNumInterfaces = PDODeviceExtension->FunctionDescriptor->NumberOfInterfaces;
717 ULONG NeedSelect, FoundInterface;
772 DPRINT1(
"[USBCCGP] SelectConfiguration Function %x InterfaceNumber %x Alternative %x Length %lu InterfaceInformation->Length %lu\n", PDODeviceExtension->FunctionDescriptor->FunctionNumber, InterfaceInformation->
InterfaceNumber, InterfaceInformation->
AlternateSetting,
Length, InterfaceInformation->
Length);
777 FoundInterface =
FALSE;
780 if (PDODeviceExtension->FunctionDescriptor->InterfaceDescriptorList[
InterfaceIndex]->bInterfaceNumber == InterfaceInformation->
InterfaceNumber)
783 FoundInterface =
TRUE;
941 DPRINT1(
"[USBCCGP] SelectConfiguration Function %x Completed\n", PDODeviceExtension->FunctionDescriptor->FunctionNumber);
976 DPRINT(
"IOCTL_INTERNAL_USB_SUBMIT_URB Function %x\n", Urb->
UrbHeader.Function);
1039 (
PVOID*)&StringDescriptor);
1042 if (StringDescriptor->bLength == 2)
1050 StringDescriptor->bString,
1051 StringDescriptor->bLength +
sizeof(
WCHAR));
1088 DPRINT1(
"InputBufferLength %lu\n", IoStack->
Parameters.DeviceIoControl.InputBufferLength);
1089 DPRINT1(
"OutputBufferLength %lu\n", IoStack->
Parameters.DeviceIoControl.OutputBufferLength);
1090 DPRINT1(
"Type3InputBuffer %p\n", IoStack->
Parameters.DeviceIoControl.Type3InputBuffer);
struct _USB_DEVICE_DESCRIPTOR USB_DEVICE_DESCRIPTOR
_In_ WDFUSBDEVICE _In_ UCHAR InterfaceIndex
#define IRP_MN_REMOVE_DEVICE
#define STATUS_INSUFFICIENT_RESOURCES
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define IOCTL_INTERNAL_USB_SUBMIT_URB
#define IRP_MN_QUERY_POWER
IN BOOLEAN OUT PSTR Buffer
#define STATUS_INVALID_PARAMETER
BOOLEAN NTAPI IoForwardIrpSynchronously(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
PDEVICE_OBJECT Objects[1]
_In_ WDFUSBINTERFACE _In_ UCHAR _Out_ PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor
PVOID AllocateItem(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes)
NTSTATUS USBCCGP_BuildConfigurationDescriptor(PDEVICE_OBJECT DeviceObject, PIRP Irp)
#define GET_SELECT_INTERFACE_REQUEST_SIZE(totalPipes)
struct _PDO_DEVICE_EXTENSION * PPDO_DEVICE_EXTENSION
struct _USBD_INTERFACE_INFORMATION * PUSBD_INTERFACE_INFORMATION
NTSTATUS PDO_HandlePnp(PDEVICE_OBJECT DeviceObject, PIRP Irp)
IN PVOID IN PVOID IN USHORT IN USHORT Size
struct _USB_INTERFACE_DESCRIPTOR * PUSB_INTERFACE_DESCRIPTOR
#define USB_STRING_DESCRIPTOR_TYPE
_In_ PDEVICE_OBJECT DeviceObject
return STATUS_NOT_IMPLEMENTED
NTSTATUS USBCCGP_PdoHandleQueryDeviceText(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
VOID FreeItem(IN PVOID Item)
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
#define USB_DEVICE_DESCRIPTOR_TYPE
#define IRP_MN_QUERY_REMOVE_DEVICE
DECLSPEC_NORETURN VOID NTAPI KeBugCheck(ULONG BugCheckCode)
#define USB_CONFIGURATION_DESCRIPTOR_TYPE
struct _DEVICE_RELATIONS * PDEVICE_RELATIONS
#define USB_INTERFACE_DESCRIPTOR_TYPE
#define IoCompleteRequest
COMMON_DEVICE_EXTENSION Common
NTSTATUS USBCCGP_PdoAppendInterfaceNumber(IN LPWSTR DeviceId, IN ULONG InterfaceNumber, OUT LPWSTR *OutString)
#define IOCTL_INTERNAL_USB_CYCLE_PORT
#define IRP_MN_QUERY_STOP_DEVICE
#define STATUS_INVALID_BUFFER_SIZE
struct _URB_HEADER UrbHeader
_In_ PVOID _In_ LONG InterfaceNumber
NTSTATUS PDO_HandlePower(PDEVICE_OBJECT DeviceObject, PIRP Irp)
#define NT_SUCCESS(StatCode)
_In_ WDFCOLLECTION _In_ ULONG Index
#define IRP_MN_START_DEVICE
NTSTATUS USBCCGP_PDOSelectConfiguration(PDEVICE_OBJECT DeviceObject, PIRP Irp)
NTSTATUS USBCCGP_PdoHandleDeviceRelations(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
#define IRP_MN_QUERY_DEVICE_TEXT
#define IRP_MN_QUERY_INTERFACE
#define IRP_MJ_INTERNAL_DEVICE_CONTROL
NTSTATUS NTAPI USBCCGP_GetDescriptor(IN PDEVICE_OBJECT DeviceObject, IN UCHAR DescriptorType, IN ULONG DescriptorLength, IN UCHAR DescriptorIndex, IN LANGID LanguageId, OUT PVOID *OutDescriptor)
#define STATUS_UNSUCCESSFUL
#define USB_INTERFACE_ASSOCIATION_DESCRIPTOR_TYPE
#define URB_FUNCTION_SELECT_CONFIGURATION
NTSTATUS PDO_Dispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
#define URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE
int _cdecl swprintf(const WCHAR *,...)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
struct _URB_SELECT_CONFIGURATION UrbSelectConfiguration
VOID NTAPI PoStartNextPowerIrp(IN PIRP Irp)
IN PVOID IN PVOID IN USHORT IN USHORT IN PINTERFACE Interface
NTSTATUS USBCCGP_SyncUrbRequest(IN PDEVICE_OBJECT DeviceObject, OUT PURB UrbRequest)
#define FIELD_OFFSET(t, f)
NTSTATUS USBCCGP_PdoHandleQueryId(PDEVICE_OBJECT DeviceObject, PIRP Irp)
NTSTATUS NTAPI IoCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define IRP_MN_QUERY_DEVICE_RELATIONS
#define IoSkipCurrentIrpStackLocation(Irp)
#define IOCTL_INTERNAL_USB_RESET_PORT
#define IOCTL_INTERNAL_USB_GET_PORT_STATUS
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define UsbBuildSelectInterfaceRequest(urb, length, configurationHandle, interfaceNumber, alternateSetting)
#define ObReferenceObject
#define RtlCopyMemory(Destination, Source, Length)
struct _URB_CONTROL_DESCRIPTOR_REQUEST UrbControlDescriptorRequest
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
NTSTATUS PDO_HandleInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
base of all file and directory entries
struct _URB_SELECT_INTERFACE UrbSelectInterface
#define STATUS_DEVICE_DATA_ERROR
#define IRP_MN_QUERY_CAPABILITIES