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;
247 swprintf(
Buffer,
L"%s&MI_%02x", (
LPWSTR)
Irp->IoStatus.Information, PDODeviceExtension->FunctionDescriptor->FunctionNumber);
268 DeviceString = &PDODeviceExtension->FunctionDescriptor->HardwareId;
287 swprintf(
Buffer,
L"%04x", PDODeviceExtension->FunctionDescriptor->FunctionNumber);
296 DeviceString = &PDODeviceExtension->FunctionDescriptor->CompatibleId;
303 return Irp->IoStatus.Status;
390 for(
Index = 0;
Index < PDODeviceExtension->FDODeviceExtension->FunctionDescriptorCount;
Index++)
397 PDODeviceExtension->FDODeviceExtension->ChildPDO[
Index] =
NULL;
444 DPRINT(
"[USBCCGP] PDO IRP_MN_START\n");
510 DPRINT(
"USBCCGP_BuildConfigurationDescriptor\n");
520 ConfigurationDescriptor = PDODeviceExtension->ConfigurationDescriptor;
527 for (
Index = 0;
Index < PDODeviceExtension->FunctionDescriptor->NumberOfInterfaces;
Index++)
593 DPRINT1(
"[USBCCGP] Failed to allocate %lu Bytes\n", TotalSize);
603 for (
Index = 0;
Index < PDODeviceExtension->FunctionDescriptor->NumberOfInterfaces;
Index++)
666 ConfigurationDescriptor =
Buffer;
668 ConfigurationDescriptor->
bNumInterfaces = PDODeviceExtension->FunctionDescriptor->NumberOfInterfaces;
709 ULONG NeedSelect, FoundInterface;
764 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);
769 FoundInterface =
FALSE;
772 if (PDODeviceExtension->FunctionDescriptor->InterfaceDescriptorList[
InterfaceIndex]->bInterfaceNumber == InterfaceInformation->
InterfaceNumber)
775 FoundInterface =
TRUE;
933 DPRINT1(
"[USBCCGP] SelectConfiguration Function %x Completed\n", PDODeviceExtension->FunctionDescriptor->FunctionNumber);
968 DPRINT(
"IOCTL_INTERNAL_USB_SUBMIT_URB Function %x\n", Urb->
UrbHeader.Function);
1031 (
PVOID*)&StringDescriptor);
1034 if (StringDescriptor->bLength == 2)
1042 StringDescriptor->bString,
1043 StringDescriptor->bLength +
sizeof(
WCHAR));
1080 DPRINT1(
"InputBufferLength %lu\n", IoStack->
Parameters.DeviceIoControl.InputBufferLength);
1081 DPRINT1(
"OutputBufferLength %lu\n", IoStack->
Parameters.DeviceIoControl.OutputBufferLength);
1082 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
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 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
__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
NTSTATUS NTAPI USBCCGP_SyncForwardIrp(PDEVICE_OBJECT DeviceObject, PIRP Irp)
#define IRP_MN_QUERY_CAPABILITIES