windows-nt/Source/XPSP1/NT/base/tools/kdexts2/usbd.c

1186 lines
47 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
USBD.c
Abstract:
WinDbg Extension Api
Author:
Chris Robinson (crobins) Feburary 1999
Environment:
User Mode.
Revision History:
--*/
#include "precomp.h"
//#include "usbd.h"
typedef union _URB_FLAGS {
struct {
ULONG FullListing : 1;
ULONG Reserved : 31;
};
ULONG Flags;
} URB_FLAGS;
#define PRINT_FLAGS(value, flag) \
if ((value) & (flag)) { \
dprintf (#flag " "); \
}
extern VOID
DumpDeviceCapabilities(
ULONG64 caps
);
VOID USBD_DumpURB (ULONG64 UrbLoc, URB_FLAGS);
VOID USBD_DeviceDescriptor (PCHAR Comment, ULONG64 Desc);
VOID USBD_InterfaceDescriptor (PCHAR Comment, ULONG64 Desc);
VOID USBD_EndpointDescriptor (PCHAR Comment, ULONG64 Desc);
VOID USBD_PowerDescriptor (PCHAR Comment, ULONG64 Desc);
#define InitTypeReadCheck(Addr, Type) \
if (InitTypeRead(Addr, Type)) { \
dprintf("Cannot read %s at %p\n", Addr); \
return; \
}
//
// USBD function definitions
//
DECLARE_API( urb )
/*++
Routine Description:
Dumps a URB block
Arguments:
args - Address flags
Return Value:
None
--*/
{
ULONG64 memLoc=0;
UCHAR buffer[256];
URB_FLAGS flags;
buffer[0] = '\0';
flags.Flags = 0;
if (!*args)
{
memLoc = EXPRLastDump;
}
else
{
if (GetExpressionEx(args, &memLoc, &args)) {
strcpy(buffer, args);
}
}
if ('\0' != buffer[0])
{
flags.Flags = (ULONG) GetExpression(buffer);
}
dprintf ("Dump URB %p %x \n", memLoc, flags.Flags);
USBD_DumpURB (memLoc, flags);
return S_OK;
}
VOID
USBD_DeviceDescriptor (
PCHAR Comment,
ULONG64 Desc
)
{
InitTypeReadCheck(Desc, usbd!USB_DEVICE_DESCRIPTOR);
dprintf ("%s \n", Comment);
dprintf ("bLength %x \t bDescriptor Type %x \t bcdUSB %x\n"
"bDeviceClass %x \t bDeviceSubClass %x \t bDeviceProtocol %x\n"
"bMaxPacketSize0 %x \t (Vid / Pid / rev) (%x / %x / %x)\n"
"Manu %x Prod %x Serial %x #Configs %x\n",
(ULONG) ReadField(bLength),
(ULONG) ReadField(bDescriptorType),
(ULONG) ReadField(bcdUSB),
(ULONG) ReadField(bDeviceClass),
(ULONG) ReadField(bDeviceSubClass),
(ULONG) ReadField(bDeviceProtocol),
(ULONG) ReadField(bMaxPacketSize0),
(ULONG) ReadField(idVendor),
(ULONG) ReadField(idProduct),
(ULONG) ReadField(bcdDevice),
(ULONG) ReadField(iManufacturer),
(ULONG) ReadField(iProduct),
(ULONG) ReadField(iSerialNumber),
(ULONG) ReadField(bNumConfigurations));
}
VOID
USBD_ConfigurationDescriptor (
PCHAR Comment,
ULONG64 Config
)
{
InitTypeReadCheck(Config, usbd!USB_CONFIGURATION_DESCRIPTOR);
dprintf ("%s \n", Comment);
dprintf ("Length %x \t Desc Type %x \t TotalLength %d \n"
"Num Ints %x \t Config Val %x \t \n"
"Config Desc %x \t Attrib %x \t MaxPower %x\n",
(ULONG) ReadField(bLength),
(ULONG) ReadField(bDescriptorType),
(ULONG) ReadField(wTotalLength),
(ULONG) ReadField(bNumInterfaces),
(ULONG) ReadField(bConfigurationValue),
(ULONG) ReadField(iConfiguration),
(ULONG) ReadField(bmAttributes),
(ULONG) ReadField(MaxPower));
return;
}
VOID
USBD_InterfaceDescriptor (
PCHAR Comment,
ULONG64 Interface
)
{
InitTypeReadCheck(Interface, usbd!USB_INTERFACE_DESCRIPTOR);
dprintf ("%s \n", Comment);
dprintf ("Length %x \t Desc Type %x \t Interface Number %x\n"
"Alt Setting %x \t Num Ends %x \t \n"
"Class %x \t SubClass %x \t Protocol %x \n"
"Interface %x\n",
(ULONG) ReadField(bLength),
(ULONG) ReadField(bDescriptorType),
(ULONG) ReadField(bInterfaceNumber),
(ULONG) ReadField(bAlternateSetting),
(ULONG) ReadField(bNumEndpoints),
(ULONG) ReadField(bInterfaceClass),
(ULONG) ReadField(bInterfaceSubClass),
(ULONG) ReadField(bInterfaceProtocol),
(ULONG) ReadField(iInterface));
}
VOID
USBD_EndpointDescriptor (
PCHAR Comment,
ULONG64 Endpoint
)
{
InitTypeReadCheck(Endpoint, usbd!USB_ENDPOINT_DESCRIPTOR);
dprintf ("%s \n", Comment);
dprintf ("Length %x \t Desc Type %x \t EndAddress %x\n"
"Attribs %x \t MaxPacketSize %x \t Interval %x\n",
(ULONG) ReadField(bLength),
(ULONG) ReadField(bDescriptorType),
(ULONG) ReadField(bEndpointAddress),
(ULONG) ReadField(bmAttributes),
(ULONG) ReadField(wMaxPacketSize),
(ULONG) ReadField(bInterval));
}
VOID
USBD_PowerDescriptor (
PCHAR Comment,
ULONG64 Power
)
{
dprintf ("%s - not implemented\n", Comment);
}
VOID
USBD_Pipe(
PCHAR Comment,
ULONG64 PipeHandle
)
{
ULONG numEndpoints, Sig, Off;
dprintf ("%s \n", Comment);
if (0 == PipeHandle)
{
dprintf("Pipe Handle is NULL\n");
return;
}
InitTypeReadCheck(PipeHandle, usbd!USBD_PIPE);
Sig = (ULONG) ReadField(Sig);
dprintf("Signature: %c%c%c%c\n"
"HcdEndpoint: %08x \t MPS %x \t Sched Offset %x\n",
((PUCHAR) &Sig)[0],
((PUCHAR) &Sig)[1],
((PUCHAR) &Sig)[2],
((PUCHAR) &Sig)[3],
(ULONG) ReadField(HcdEndpoint),
(ULONG) ReadField(MaxTransferSize),
(ULONG) ReadField(ScheduleOffset));
dprintf("\n");
dprintf("Endpoint Descriptor\n"
"-------------------");
GetFieldOffset("usbd!USBD_PIPE", "EndpointDescriptor", &Off);
USBD_EndpointDescriptor("", (PipeHandle + Off));
return;
}
VOID
USBD_Interface(
ULONG64 MemLoc
)
{
ULONG i;
ULONG numEndpoints;
ULONG Off;
ULONG Sig;
ULONG PipeSize;
InitTypeReadCheck(MemLoc, usbd!_USBD_INTERFACE);
numEndpoints = (ULONG) ReadField(InterfaceDescriptor.bNumEndpoints);
Sig = (ULONG) ReadField(Sig);
dprintf("Signature: %c%c%c%c\n",
((PUCHAR) &Sig)[0],
((PUCHAR) &Sig)[1],
((PUCHAR) &Sig)[2],
((PUCHAR) &Sig)[3]);
dprintf("Has Alt Settings: %x\n",
(ULONG) ReadField(HasAlternateSettings));
dprintf("Interface Info: %x\n",
(ULONG) ReadField(InterfaceInformation));
dprintf("\n");
dprintf("Interface Descriptor\n"
"--------------------");
GetFieldOffset("usbd!_USBD_INTERFACE", "InterfaceDescriptor", &Off);
USBD_InterfaceDescriptor("", MemLoc + Off);
GetFieldOffset("usbd!_USBD_INTERFACE", "PipeHandle", &Off);
PipeSize = GetTypeSize("usbd!USBD_PIPE");
for (i = 0; i < numEndpoints; i++)
{
dprintf("\n");
dprintf("Pipe Handle\n"
"-----------");
USBD_Pipe("", MemLoc + i*PipeSize);
}
return;
}
VOID
USBD_ConfigHandle(
ULONG64 MemLoc
)
{
ULONG configDataSize;
ULONG i;
ULONG numInterfaces;
ULONG Sz, Sig;
ULONG64 ConfigurationDescriptor, InterfaceHandle;
if (GetFieldValue(MemLoc, "usbd!_USBD_CONFIG",
"ConfigurationDescriptor", ConfigurationDescriptor))
{
dprintf("Could not read configuration handle\n");
return;
}
InitTypeReadCheck(ConfigurationDescriptor, usbd!USB_CONFIGURATION_DESCRIPTOR);
numInterfaces = (ULONG) ReadField(bNumInterfaces);
InitTypeRead(MemLoc, usbd!_USBD_CONFIG);
Sig = (ULONG) ReadField(Sig);
dprintf("Signature: %c%c%c%c\n",
((PUCHAR) &Sig)[0],
((PUCHAR) &Sig)[1],
((PUCHAR) &Sig)[2],
((PUCHAR) &Sig)[3]);
dprintf("Config Descriptor: %08p\n", ConfigurationDescriptor);
InterfaceHandle = ReadField(InterfaceHandle[0]);
Sz= GetTypeSize("usbd!USBD_INTERFACE");
USBD_ConfigurationDescriptor("", ConfigurationDescriptor);
for (i = 0; 0 != InterfaceHandle && i < numInterfaces; i++)
{
InitTypeReadCheck(InterfaceHandle, usbd!_USBD_INTERFACE);
dprintf("\n");
dprintf("Interface Handle: %08x\n"
"-----------------\n",
InterfaceHandle);
USBD_Interface(InterfaceHandle);
InterfaceHandle += Sz;
}
return;
}
VOID
URB_HCD_AREA(ULONG64 Hcd)
{
InitTypeRead(Hcd, usbd!_URB_HCD_AREA);
dprintf ("HCD_Area: HcdEndpoint %x HcdIrp %x \n"
" HcdList (%x, %x) HcdList2 (%x, %x) \n"
" CurrentIoFlush %x HcdExt %x \n",
(ULONG) ReadField(HcdEndpoint),
(ULONG) ReadField(HcdIrp),
(ULONG) ReadField(HcdListEntry.Flink),
(ULONG) ReadField(HcdListEntry.Blink),
(ULONG) ReadField(HcdListEntry2.Flink),
(ULONG) ReadField(HcdListEntry2.Blink),
(ULONG) ReadField(HcdCurrentIoFlushPointer),
(ULONG) ReadField(HcdExtension));
}
VOID
USBD_DumpURB (
ULONG64 MemLoc,
URB_FLAGS Flags
)
{
ULONG64 urbLoc;
ULONG result;
ULONG i;
// PURB urb;
// PHCD_URB hcd;
// URB urbBuffer;
ULONG64 packetLoc;
// PUSBD_ISO_PACKET_DESCRIPTOR packet;
// USBD_ISO_PACKET_DESCRIPTOR packetBuffer;
BOOLEAN again;
UNREFERENCED_PARAMETER (Flags);
urbLoc = MemLoc;
InitTypeReadCheck(urbLoc, usbd!_URB_HEADER);
#define URB_HEADER() \
dprintf ("URB : Fn %x len %x stat %x DevH %x Flgs %x\n", \
(ULONG) ReadField(UrbHeader.Function), \
(ULONG) ReadField(UrbHeader.Length), \
(ULONG) ReadField(UrbHeader.Status), \
(ULONG) ReadField(UrbHeader.UsbdDeviceHandle), \
(ULONG) ReadField(UrbHeader.UsbdFlags))
again = TRUE;
while (again && urbLoc) {
dprintf (" ---- URB: %x ---- \n", urbLoc);
again = FALSE;
InitTypeReadCheck (urbLoc, usbd!_URB_HEADER);
switch (ReadField(Function)) {
case URB_FUNCTION_SELECT_INTERFACE:
InitTypeReadCheck (urbLoc, usbd!_URB_SELECT_INTERFACE);
dprintf ("Select Interface: ConfigHandle %x Interface %x\n",
(ULONG) ReadField(UrbSelectInterface.ConfigurationHandle),
(ULONG) ReadField(UrbSelectInterface.Interface));
URB_HEADER();
break;
case URB_FUNCTION_SELECT_CONFIGURATION:
InitTypeReadCheck (urbLoc, usbd!_URB_SELECT_CONFIGURATION);
dprintf ("Select Config: Config Desc %x Hand %x Int %x\n",
(ULONG) ReadField(UrbSelectConfiguration.ConfigurationDescriptor),
(ULONG) ReadField(UrbSelectConfiguration.ConfigurationHandle),
(ULONG) ReadField(UrbSelectConfiguration.Interface));
URB_HEADER();
break;
case URB_FUNCTION_ABORT_PIPE:
InitTypeReadCheck (urbLoc, usbd!_URB_PIPE_REQUEST);
dprintf ("Abort Pipe: %x\n", (ULONG) ReadField(UrbPipeRequest.PipeHandle));
URB_HEADER();
break;
case URB_FUNCTION_RESET_PIPE:
InitTypeReadCheck (urbLoc, usbd!_URB_PIPE_REQUEST);
dprintf ("Reset Pipe: %x\n", (ULONG) ReadField(UrbPipeRequest.PipeHandle));
URB_HEADER();
break;
case URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL:
InitTypeReadCheck (urbLoc, usbd!_URB_FRAME_LENGTH_CONTROL);
dprintf ("Get Frame Length Control \n");
URB_HEADER();
break;
case URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL:
InitTypeReadCheck (urbLoc, usbd!_URB_FRAME_LENGTH_CONTROL);
dprintf ("Release Frame Length Control \n");
URB_HEADER();
break;
case URB_FUNCTION_GET_FRAME_LENGTH:
InitTypeReadCheck (urbLoc, usbd!_URB_GET_FRAME_LENGTH);
dprintf ("Get Frame Length %x Num %x \n",
(ULONG) ReadField(UrbGetFrameLength.FrameLength),
(ULONG) ReadField(UrbGetFrameLength.FrameNumber));
URB_HEADER();
break;
case URB_FUNCTION_SET_FRAME_LENGTH:
InitTypeReadCheck (urbLoc, usbd!_URB_SET_FRAME_LENGTH);
dprintf ("Set Frame Length Delta %x \n",
(ULONG) ReadField(UrbSetFrameLength.FrameLengthDelta));
URB_HEADER();
break;
case URB_FUNCTION_GET_CURRENT_FRAME_NUMBER:
InitTypeReadCheck (urbLoc, usbd!_URB_GET_CURRENT_FRAME_NUMBER);
dprintf ("Current Frame Number %x \n",
(ULONG) ReadField(UrbGetCurrentFrameNumber.FrameNumber));
URB_HEADER();
break;
case URB_FUNCTION_CONTROL_TRANSFER:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_TRANSFER);
dprintf ("Control Xfer: Pipe %x Flags %x "
"Len %x Buffer %x MDL %x HCA %x "
"SetupPacket: %02.02x %02.02x %02.02x %02.02x "
"%02.02x %02.02x %02.02x %02.02x\n",
(ULONG) ReadField(UrbControlTransfer.PipeHandle),
(ULONG) ReadField(UrbControlTransfer.TransferFlags),
(ULONG) ReadField(UrbControlTransfer.TransferBufferLength),
(ULONG) ReadField(UrbControlTransfer.TransferBuffer),
(ULONG) ReadField(UrbControlTransfer.TransferBufferMDL),
(ULONG) ReadField(UrbControlTransfer.hca),
(ULONG) ReadField(UrbControlTransfer.SetupPacket[0]),
(ULONG) ReadField(UrbControlTransfer.SetupPacket[1]),
(ULONG) ReadField(UrbControlTransfer.SetupPacket[2]),
(ULONG) ReadField(UrbControlTransfer.SetupPacket[3]),
(ULONG) ReadField(UrbControlTransfer.SetupPacket[4]),
(ULONG) ReadField(UrbControlTransfer.SetupPacket[5]),
(ULONG) ReadField(UrbControlTransfer.SetupPacket[6]),
(ULONG) ReadField(UrbControlTransfer.SetupPacket[7]));
URB_HCD_AREA ( ReadField(UrbControlTransfer.hca));
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_TRANSFER);
URB_HEADER();
urbLoc = ReadField(UrbControlTransfer.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
InitTypeReadCheck (urbLoc, usbd!_URB_BULK_OR_INTERRUPT_TRANSFER);
dprintf ("Bulk | Interrupt Xfer: Pipe %x Flags %x "
"Len %x Buffer %x MDL %x HCA %x\n",
(ULONG) ReadField(UrbBulkOrInterruptTransfer.PipeHandle),
(ULONG) ReadField(UrbBulkOrInterruptTransfer.TransferFlags),
(ULONG) ReadField(UrbBulkOrInterruptTransfer.TransferBufferLength),
(ULONG) ReadField(UrbBulkOrInterruptTransfer.TransferBuffer),
(ULONG) ReadField(UrbBulkOrInterruptTransfer.TransferBufferMDL),
(ULONG) ReadField(UrbControlTransfer.hca));
URB_HCD_AREA (ReadField(UrbBulkOrInterruptTransfer.hca));
InitTypeReadCheck (urbLoc, usbd!_URB_BULK_OR_INTERRUPT_TRANSFER);
URB_HEADER();
urbLoc = ReadField(UrbBulkOrInterruptTransfer.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_ISOCH_TRANSFER: {
ULONG Off, Sz, NumberOfPackets;
InitTypeReadCheck (urbLoc, usbd!_URB_ISOCH_TRANSFER);
dprintf ("Isoch Xfer: Pipe %x Flags %x "
"Len %x Buffer %x MDL %x HCA %p "
"StartFrame %x NumPkts %x ErrorCount %x\n",
(ULONG) ReadField(UrbIsochronousTransfer.PipeHandle),
(ULONG) ReadField(UrbIsochronousTransfer.TransferFlags),
(ULONG) ReadField(UrbIsochronousTransfer.TransferBufferLength),
(ULONG) ReadField(UrbIsochronousTransfer.TransferBuffer),
(ULONG) ReadField(UrbIsochronousTransfer.TransferBufferMDL),
ReadField(UrbIsochronousTransfer.hca),
(ULONG) ReadField(UrbIsochronousTransfer.StartFrame),
(ULONG) ReadField(UrbIsochronousTransfer.NumberOfPackets),
(ULONG) ReadField(UrbIsochronousTransfer.ErrorCount));
URB_HCD_AREA (ReadField(UrbIsochronousTransfer.hca));
InitTypeReadCheck (urbLoc, usbd!_URB_ISOCH_TRANSFER);
URB_HEADER();
NumberOfPackets = (ULONG) ReadField(UrbIsochronousTransfer.NumberOfPackets);
GetFieldOffset("usbd!_URB_ISOCH_TRANSFER", "IsoPacket", &Off);
Sz = GetTypeSize("usbd!USBD_ISO_PACKET_DESCRIPTOR");
packetLoc = urbLoc + Off;
for (i = 0; i < NumberOfPackets; i++) {
InitTypeReadCheck (packetLoc, usbd!USBD_ISO_PACKET_DESCRIPTOR);
dprintf ("[%2x]: Offset %6x, Length %4x, Status %8x\n",
i,
(ULONG) ReadField(Offset),
(ULONG) ReadField(Length),
(ULONG) ReadField(Status));
packetLoc += Sz;
}
break;
}
case URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_DESCRIPTOR_REQUEST);
dprintf ("Device Desc: Length %x Buffer %x MDL %x "
"Index %x Type %x Lang %x HCA %x\n",
(ULONG) ReadField(UrbControlDescriptorRequest.TransferBufferLength),
(ULONG) ReadField(UrbControlDescriptorRequest.TransferBuffer),
(ULONG) ReadField(UrbControlDescriptorRequest.TransferBufferMDL),
(ULONG) ReadField(UrbControlDescriptorRequest.Index),
(ULONG) ReadField(UrbControlDescriptorRequest.DescriptorType),
(ULONG) ReadField(UrbControlDescriptorRequest.LanguageId),
(ULONG) ReadField(UrbControlDescriptorRequest.hca));
URB_HEADER();
urbLoc = ReadField(UrbControlDescriptorRequest.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_DESCRIPTOR_REQUEST);
dprintf ("Endpoint Desc: Length %x Buffer %x MDL %x "
"Index %x Type %x Lang %x HCA %p\n",
(ULONG) ReadField(UrbControlDescriptorRequest.TransferBufferLength),
(ULONG) ReadField(UrbControlDescriptorRequest.TransferBuffer),
(ULONG) ReadField(UrbControlDescriptorRequest.TransferBufferMDL),
(ULONG) ReadField(UrbControlDescriptorRequest.Index),
(ULONG) ReadField(UrbControlDescriptorRequest.DescriptorType),
(ULONG) ReadField(UrbControlDescriptorRequest.LanguageId),
(ULONG) ReadField(UrbControlDescriptorRequest.hca));
URB_HEADER();
urbLoc = ReadField(UrbControlDescriptorRequest.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_DESCRIPTOR_REQUEST);
dprintf ("Interface Desc: Length %x Buffer %x MDL %x "
"Index %x Type %x Lang %x HCA %p\n",
(ULONG) ReadField(UrbControlDescriptorRequest.TransferBufferLength),
(ULONG) ReadField(UrbControlDescriptorRequest.TransferBuffer),
(ULONG) ReadField(UrbControlDescriptorRequest.TransferBufferMDL),
(ULONG) ReadField(UrbControlDescriptorRequest.Index),
(ULONG) ReadField(UrbControlDescriptorRequest.DescriptorType),
(ULONG) ReadField(UrbControlDescriptorRequest.LanguageId),
(ULONG) ReadField(UrbControlDescriptorRequest.hca));
URB_HEADER();
urbLoc = ReadField(UrbBulkOrInterruptTransfer.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_DESCRIPTOR_REQUEST);
dprintf ("SET Device Desc: Length %x Buffer %x MDL %x "
"Index %x Type %x Lang %x HCA %p\n",
(ULONG) ReadField(UrbControlDescriptorRequest.TransferBufferLength),
(ULONG) ReadField(UrbControlDescriptorRequest.TransferBuffer),
(ULONG) ReadField(UrbControlDescriptorRequest.TransferBufferMDL),
(ULONG) ReadField(UrbControlDescriptorRequest.Index),
(ULONG) ReadField(UrbControlDescriptorRequest.DescriptorType),
(ULONG) ReadField(UrbControlDescriptorRequest.LanguageId),
ReadField(UrbControlDescriptorRequest.hca));
URB_HEADER();
urbLoc = (ULONG) (ULONG) ReadField(UrbControlDescriptorRequest.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_DESCRIPTOR_REQUEST);
dprintf ("SET End Desc: Length %x Buffer %x MDL %x "
"Index %x Type %x Lang %x HCA %p\n",
(ULONG) ReadField(UrbControlDescriptorRequest.TransferBufferLength),
(ULONG) ReadField(UrbControlDescriptorRequest.TransferBuffer),
(ULONG) ReadField(UrbControlDescriptorRequest.TransferBufferMDL),
(ULONG) ReadField(UrbControlDescriptorRequest.Index),
(ULONG) ReadField(UrbControlDescriptorRequest.DescriptorType),
(ULONG) ReadField(UrbControlDescriptorRequest.LanguageId),
ReadField(UrbControlDescriptorRequest.hca));
URB_HEADER();
urbLoc = ReadField(UrbControlDescriptorRequest.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_DESCRIPTOR_REQUEST);
dprintf ("SET Intrfc Desc: Len %x Buffer %x MDL %x "
"Index %x Type %x Lang %x HCA %p\n",
(ULONG) ReadField(UrbControlDescriptorRequest.TransferBufferLength),
(ULONG) ReadField(UrbControlDescriptorRequest.TransferBuffer),
(ULONG) ReadField(UrbControlDescriptorRequest.TransferBufferMDL),
(ULONG) ReadField(UrbControlDescriptorRequest.Index),
(ULONG) ReadField(UrbControlDescriptorRequest.DescriptorType),
(ULONG) ReadField(UrbControlDescriptorRequest.LanguageId),
ReadField(UrbControlDescriptorRequest.hca));
URB_HEADER();
urbLoc = ReadField(UrbControlDescriptorRequest.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_SET_FEATURE_TO_DEVICE:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_FEATURE_REQUEST);
dprintf ("Set Dev Feature: Selector %x Index %x\n",
(ULONG) ReadField(UrbControlFeatureRequest.FeatureSelector),
(ULONG) ReadField(UrbControlFeatureRequest.Index));
URB_HEADER();
urbLoc = ReadField(UrbControlFeatureRequest.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_SET_FEATURE_TO_INTERFACE:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_FEATURE_REQUEST);
dprintf ("Set Interface Feature: Selector %x Index %x\n",
(ULONG) ReadField(UrbControlFeatureRequest.FeatureSelector),
(ULONG) ReadField(UrbControlFeatureRequest.Index));
URB_HEADER();
urbLoc = ReadField(UrbControlFeatureRequest.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_SET_FEATURE_TO_ENDPOINT:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_FEATURE_REQUEST);
dprintf ("Set Endpoint Feature: Selector %x Index %x\n",
(ULONG) ReadField(UrbControlFeatureRequest.FeatureSelector),
(ULONG) ReadField(UrbControlFeatureRequest.Index));
URB_HEADER();
urbLoc = ReadField(UrbControlFeatureRequest.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_SET_FEATURE_TO_OTHER:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_FEATURE_REQUEST);
dprintf ("Set Other Feature: Selector %x Index %x\n",
(ULONG) ReadField(UrbControlFeatureRequest.FeatureSelector),
(ULONG) ReadField(UrbControlFeatureRequest.Index));
URB_HEADER();
urbLoc = ReadField(UrbControlFeatureRequest.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_FEATURE_REQUEST);
dprintf ("Clear Device Feature: Selector %x Index %x\n",
(ULONG) ReadField(UrbControlFeatureRequest.FeatureSelector),
(ULONG) ReadField(UrbControlFeatureRequest.Index));
URB_HEADER();
urbLoc = ReadField(UrbControlFeatureRequest.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_FEATURE_REQUEST);
dprintf ("Clear Interface Feature: Selector %x Index %x\n",
(ULONG) ReadField(UrbControlFeatureRequest.FeatureSelector),
(ULONG) ReadField(UrbControlFeatureRequest.Index));
URB_HEADER();
urbLoc = ReadField(UrbControlFeatureRequest.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_FEATURE_REQUEST);
dprintf ("Clear Endpoint Feature: Selector %x Index %x\n",
(ULONG) ReadField(UrbControlFeatureRequest.FeatureSelector),
(ULONG) ReadField(UrbControlFeatureRequest.Index));
URB_HEADER();
urbLoc = ReadField(UrbControlFeatureRequest.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_CLEAR_FEATURE_TO_OTHER:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_FEATURE_REQUEST);
dprintf ("Clear Other Feature: Selector %x Index %x\n",
(ULONG) ReadField(UrbControlFeatureRequest.FeatureSelector),
(ULONG) ReadField(UrbControlFeatureRequest.Index));
URB_HEADER();
urbLoc = ReadField(UrbControlFeatureRequest.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_GET_STATUS_FROM_DEVICE:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_GET_STATUS_REQUEST);
dprintf ("Get Device Status: len %x Buffer %x MDL %x "
"Index %x\n",
(ULONG) ReadField(UrbControlGetStatusRequest.TransferBufferLength),
(ULONG) ReadField(UrbControlGetStatusRequest.TransferBuffer),
(ULONG) ReadField(UrbControlGetStatusRequest.TransferBufferMDL),
(ULONG) ReadField(UrbControlGetStatusRequest.Index));
URB_HEADER();
urbLoc = ReadField(UrbControlGetStatusRequest.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_GET_STATUS_FROM_INTERFACE:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_GET_STATUS_REQUEST);
dprintf ("Get Interface Status: len %x Buffer %x MDL %x "
"Index %x\n",
(ULONG) ReadField(UrbControlGetStatusRequest.TransferBufferLength),
(ULONG) ReadField(UrbControlGetStatusRequest.TransferBuffer),
(ULONG) ReadField(UrbControlGetStatusRequest.TransferBufferMDL),
(ULONG) ReadField(UrbControlGetStatusRequest.Index));
URB_HEADER();
urbLoc = ReadField(UrbControlGetStatusRequest.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_GET_STATUS_FROM_ENDPOINT:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_GET_STATUS_REQUEST);
dprintf ("Get Endpoint Status: len %x Buffer %x MDL %x "
"Index %x\n",
(ULONG) ReadField(UrbControlGetStatusRequest.TransferBufferLength),
(ULONG) ReadField(UrbControlGetStatusRequest.TransferBuffer),
(ULONG) ReadField(UrbControlGetStatusRequest.TransferBufferMDL),
(ULONG) ReadField(UrbControlGetStatusRequest.Index));
URB_HEADER();
urbLoc = ReadField(UrbControlGetStatusRequest.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_GET_STATUS_FROM_OTHER:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_GET_STATUS_REQUEST);
dprintf ("Get Other Status: len %x Buffer %x MDL %x "
"Index %x\n",
(ULONG) ReadField(UrbControlGetStatusRequest.TransferBufferLength),
(ULONG) ReadField(UrbControlGetStatusRequest.TransferBuffer),
(ULONG) ReadField(UrbControlGetStatusRequest.TransferBufferMDL),
(ULONG) ReadField(UrbControlGetStatusRequest.Index));
URB_HEADER();
urbLoc = ReadField(UrbControlGetStatusRequest.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_VENDOR_DEVICE:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_VENDOR_OR_CLASS_REQUEST);
dprintf ("Vendor Device Req: len %x Buffer %x MDL %x "
"Flags %x RequestTypeBits %x "
"Request %x Value %x Index %x\n",
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBufferLength),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBuffer),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBufferMDL),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferFlags),
(ULONG) ReadField(UrbControlVendorClassRequest.RequestTypeReservedBits),
(ULONG) ReadField(UrbControlVendorClassRequest.Request),
(ULONG) ReadField(UrbControlVendorClassRequest.Value),
(ULONG) ReadField(UrbControlVendorClassRequest.Index));
URB_HEADER();
urbLoc = ReadField(UrbBulkOrInterruptTransfer.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_VENDOR_INTERFACE:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_VENDOR_OR_CLASS_REQUEST);
dprintf ("Vendor Intfc Req: len %x Buffer %x MDL %x "
"Flags %x RequestTypeBits %x "
"Request %x Value %x Index %x\n",
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBufferLength),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBuffer),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBufferMDL),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferFlags),
(ULONG) ReadField(UrbControlVendorClassRequest.RequestTypeReservedBits),
(ULONG) ReadField(UrbControlVendorClassRequest.Request),
(ULONG) ReadField(UrbControlVendorClassRequest.Value),
(ULONG) ReadField(UrbControlVendorClassRequest.Index));
URB_HEADER();
urbLoc = ReadField(UrbBulkOrInterruptTransfer.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_VENDOR_ENDPOINT:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_VENDOR_OR_CLASS_REQUEST);
dprintf ("Vendor Endpt Req: len %x Buffer %x MDL %x "
"Flags %x RequestTypeBits %x "
"Request %x Value %x Index %x\n",
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBufferLength),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBuffer),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBufferMDL),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferFlags),
(ULONG) ReadField(UrbControlVendorClassRequest.RequestTypeReservedBits),
(ULONG) ReadField(UrbControlVendorClassRequest.Request),
(ULONG) ReadField(UrbControlVendorClassRequest.Value),
(ULONG) ReadField(UrbControlVendorClassRequest.Index));
URB_HEADER();
urbLoc = ReadField(UrbBulkOrInterruptTransfer.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_VENDOR_OTHER:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_VENDOR_OR_CLASS_REQUEST);
dprintf ("Vendor Other Req: len %x Buffer %x MDL %x "
"Flags %x RequestTypeBits %x "
"Request %x Value %x Index %x\n",
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBufferLength),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBuffer),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBufferMDL),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferFlags),
(ULONG) ReadField(UrbControlVendorClassRequest.RequestTypeReservedBits),
(ULONG) ReadField(UrbControlVendorClassRequest.Request),
(ULONG) ReadField(UrbControlVendorClassRequest.Value),
(ULONG) ReadField(UrbControlVendorClassRequest.Index));
URB_HEADER();
urbLoc = ReadField(UrbBulkOrInterruptTransfer.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_CLASS_DEVICE:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_VENDOR_OR_CLASS_REQUEST);
dprintf ("Class Device Req: len %x Buffer %x MDL %x "
"Flags %x RequestTypeBits %x "
"Request %x Value %x Index %x\n",
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBufferLength),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBuffer),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBufferMDL),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferFlags),
(ULONG) ReadField(UrbControlVendorClassRequest.RequestTypeReservedBits),
(ULONG) ReadField(UrbControlVendorClassRequest.Request),
(ULONG) ReadField(UrbControlVendorClassRequest.Value),
(ULONG) ReadField(UrbControlVendorClassRequest.Index));
URB_HEADER();
urbLoc = ReadField(UrbBulkOrInterruptTransfer.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_CLASS_INTERFACE:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_VENDOR_OR_CLASS_REQUEST);
dprintf ("Class Intface Req: len %x Buffer %x MDL %x "
"Flags %x RequestTypeBits %x "
"Request %x Value %x Index %x\n",
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBufferLength),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBuffer),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBufferMDL),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferFlags),
(ULONG) ReadField(UrbControlVendorClassRequest.RequestTypeReservedBits),
(ULONG) ReadField(UrbControlVendorClassRequest.Request),
(ULONG) ReadField(UrbControlVendorClassRequest.Value),
(ULONG) ReadField(UrbControlVendorClassRequest.Index));
URB_HEADER();
urbLoc = ReadField(UrbBulkOrInterruptTransfer.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_CLASS_ENDPOINT:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_VENDOR_OR_CLASS_REQUEST);
dprintf ("Class Endpnt Req: len %x Buffer %x MDL %x "
"Flags %x RequestTypeBits %x "
"Request %x Value %x Index %x\n",
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBufferLength),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBuffer),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBufferMDL),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferFlags),
(ULONG) ReadField(UrbControlVendorClassRequest.RequestTypeReservedBits),
(ULONG) ReadField(UrbControlVendorClassRequest.Request),
(ULONG) ReadField(UrbControlVendorClassRequest.Value),
(ULONG) ReadField(UrbControlVendorClassRequest.Index));
URB_HEADER();
urbLoc = ReadField(UrbBulkOrInterruptTransfer.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_CLASS_OTHER:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_VENDOR_OR_CLASS_REQUEST);
dprintf ("Class Other Req: len %x Buffer %x MDL %x "
"Flags %x RequestTypeBits %x "
"Request %x Value %x Index %x\n",
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBufferLength),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBuffer),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferBufferMDL),
(ULONG) ReadField(UrbControlVendorClassRequest.TransferFlags),
(ULONG) ReadField(UrbControlVendorClassRequest.RequestTypeReservedBits),
(ULONG) ReadField(UrbControlVendorClassRequest.Request),
(ULONG) ReadField(UrbControlVendorClassRequest.Value),
(ULONG) ReadField(UrbControlVendorClassRequest.Index));
URB_HEADER();
urbLoc = ReadField(UrbBulkOrInterruptTransfer.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_GET_CONFIGURATION:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_GET_CONFIGURATION_REQUEST);
dprintf ("Get Configuration: len %x Buffer %x MDL %x "
"\n",
(ULONG) ReadField(UrbControlGetConfigurationRequest.TransferBufferLength),
(ULONG) ReadField(UrbControlGetConfigurationRequest.TransferBuffer),
(ULONG) ReadField(UrbControlGetConfigurationRequest.TransferBufferMDL));
URB_HEADER();
urbLoc = ReadField(UrbControlGetConfigurationRequest.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_GET_INTERFACE:
InitTypeReadCheck (urbLoc, usbd!_URB_CONTROL_GET_INTERFACE_REQUEST);
dprintf ("Get Interface: len %x Buffer %x MDL %x "
"\n",
(ULONG) ReadField(UrbControlGetInterfaceRequest.TransferBufferLength),
(ULONG) ReadField(UrbControlGetInterfaceRequest.TransferBuffer),
(ULONG) ReadField(UrbControlGetInterfaceRequest.TransferBufferMDL));
URB_HEADER();
urbLoc = ReadField(UrbControlGetConfigurationRequest.UrbLink);
again = TRUE;
break;
case URB_FUNCTION_HCD_OPEN_ENDPOINT:
InitTypeReadCheck (urbLoc, usbd!_HCD_URB);
dprintf ("HCD: Open: DevAddr %x EndDesc %x "
"Xfer %x HcdEndpoint %x ",
(ULONG) ReadField(HcdUrbOpenEndpoint.DeviceAddress),
(ULONG) ReadField(HcdUrbOpenEndpoint.EndpointDescriptor),
(ULONG) ReadField(HcdUrbOpenEndpoint.MaxTransferSize),
(ULONG) ReadField(HcdUrbOpenEndpoint.HcdEndpoint));
//
// JD is currently in the process of changing this interface...It has
// already been changed for Win98 OSR but changes to hcdi.h have not
// yet been checked in for Win2k. But we'll anticipate those changes and
// make a conditional define here.
//
// #ifdef USBD_EP_FLAG_LOWSPEED
// if ((ULONG) ReadField(HcdUrbOpenEndpoint.HcdEndpointFlags) & USBD_EP_FLAG_LOWSPEED) {
// #else
if (ReadField(HcdUrbOpenEndpoint.LowSpeed)) {
// #endif
dprintf ("LowSpeed ");
}
// #ifdef USBD_EP_FLAG_NEVERHALT
// if ((ULONG) ReadField(HcdUrbOpenEndpoint.HcdEndpointFlags) & USBD_EP_FLAG_NEVERHALT) {
// #else
if (ReadField(HcdUrbOpenEndpoint.NeverHalt)) {
// #endif
dprintf ("NeverHalt");
}
dprintf ("\n");
InitTypeReadCheck (urbLoc, uabd!_URB_HCD_OPEN_ENDPOINT);
URB_HEADER();
break;
case URB_FUNCTION_HCD_CLOSE_ENDPOINT:
InitTypeReadCheck (urbLoc, usbd!_HCD_URB);
dprintf ("HCD: Close Endpoint: HcdEndpoint %x \n",
(ULONG) ReadField(HcdUrbCloseEndpoint.HcdEndpoint));
InitTypeReadCheck (urbLoc, _URB_HCD_CLOSE_ENDPOINT);
URB_HEADER();
break;
case URB_FUNCTION_HCD_GET_ENDPOINT_STATE:
InitTypeReadCheck (urbLoc, usbd!_HCD_URB);
dprintf ("HCD: Get Endpoint State: HcdEndpoint %x state %x \n",
(ULONG) ReadField(HcdUrbEndpointState.HcdEndpoint),
(ULONG) ReadField(HcdUrbEndpointState.HcdEndpointState));
InitTypeReadCheck (urbLoc, usbd!_URB_HCD_ENDPOINT_STATE);
URB_HEADER();
break;
case URB_FUNCTION_HCD_SET_ENDPOINT_STATE:
InitTypeReadCheck (urbLoc, usbd!_HCD_URB);
dprintf ("HCD: Set Endpoint State: HcdEndpoint %x state %x \n",
(ULONG) ReadField(HcdUrbEndpointState.HcdEndpoint),
(ULONG) ReadField(HcdUrbEndpointState.HcdEndpointState));
URB_HEADER();
break;
case URB_FUNCTION_HCD_ABORT_ENDPOINT:
InitTypeReadCheck (urbLoc, usbd!_HCD_URB);
dprintf ("HCD: Abort Endpoint: HcdEndpoint %x \n",
(ULONG) ReadField(HcdUrbAbortEndpoint.HcdEndpoint));
InitTypeReadCheck (urbLoc, usbd!_URB_HCD_ABORT_ENDPOINT);
URB_HEADER();
break;
default:
dprintf ("WARNING Unkown urb type %x\n", (ULONG) ReadField(Function));
}
}
}
VOID
DevExtUsbd(
ULONG64 MemLocPtr
)
/*++
Routine Description:
Dump a USBD Device extension.
Arguments:
Extension Address of the extension to be dumped.
Return Value:
None.
--*/
{
ULONG result, Flags, HcWakeFlags, DeviceHackFlags;
ULONG64 MemLoc = MemLocPtr, TrueDeviceExtension;
// USBD_EXTENSION usbd;
dprintf ("Dump USBD Extension: %p\n", MemLoc);
if (!ReadPointer(MemLoc, &TrueDeviceExtension)) {
dprintf ("Could not read Usbd Extension\n");
return;
}
if (TrueDeviceExtension) {
MemLoc = TrueDeviceExtension;
}
InitTypeReadCheck(MemLoc, usbd!_USBD_EXTENSION);
dprintf ("True DevExt: %p, Flags %x ",
ReadField(TrueDeviceExtension),
(Flags = (ULONG) ReadField(Flags)));
PRINT_FLAGS (Flags, USBDFLAG_PDO_REMOVED);
PRINT_FLAGS (Flags, USBDFLAG_HCD_SHUTDOWN);
dprintf ("\n");
dprintf ("Hcd Calls: RhPo %x DefStart %x SetPo %x GetFrame %x\n",
(ULONG) ReadField(RootHubPower),
(ULONG) ReadField(HcdDeferredStartDevice),
(ULONG) ReadField(HcdSetDevicePowerState),
(ULONG) ReadField(HcdGetCurrentFrame));
dprintf ("\n");
dprintf ("HcCurrentPowerState %x, PendingWake %x, HcWake %x\n",
(ULONG) ReadField(HcCurrentDevicePowerState),
(ULONG) ReadField(PendingWakeIrp),
(ULONG) ReadField(HcWakeIrp));
DumpDeviceCapabilities ( ReadField(HcDeviceCapabilities));
DumpDeviceCapabilities ( ReadField(RootHubDeviceCapabilities));
dprintf ("Power Irp %p", ReadField(PowerIrp));
dprintf ("Address List: %x %x %x %x\n",
(ULONG) ReadField(AddressList[0]),
(ULONG) ReadField(AddressList[1]),
(ULONG) ReadField(AddressList[2]),
(ULONG) ReadField(AddressList[3]));
dprintf ("DeviceLinkUnicode String (%x %x) %p\n",
(ULONG) ReadField(DeviceLinkUnicodeString.Length),
(ULONG) ReadField(DeviceLinkUnicodeString.MaximumLength),
ReadField(DeviceLinkUnicodeString.Buffer));
// dprintf ("Diag Mode (& %x == %x) Flags (& %x == %x)\n",
dprintf ("Diag Mode (%x) Flags (%x)\n",
// MemLoc + FIELD_OFFSET (USBD_EXTENSION, DiagnosticMode),
(ULONG) ReadField(DiagnosticMode),
// MemLoc + FIELD_OFFSET (USBD_EXTENSION, DiagIgnoreHubs),
(ULONG) ReadField(DiagIgnoreHubs));
dprintf ("\n");
dprintf ("HcWakeFlags %x ", HcWakeFlags = (ULONG) ReadField(HcWakeFlags));
PRINT_FLAGS (HcWakeFlags, HC_ENABLED_FOR_WAKEUP);
PRINT_FLAGS (HcWakeFlags, HC_WAKE_PENDING);
dprintf ("\n");
dprintf ("DeviceHackFlags %x ", DeviceHackFlags = (ULONG) ReadField(DeviceHackFlags));
PRINT_FLAGS (DeviceHackFlags, USBD_DEVHACK_SLOW_ENUMERATION);
PRINT_FLAGS (DeviceHackFlags, USBD_DEVHACK_DISABLE_SN);
dprintf ("\n");
dprintf ("RootHubDeviceData %x\n", (ULONG) ReadField(RootHubDeviceData));
dprintf ("RootHubPowerState %x SuspendPowerState %x \n",
(ULONG) ReadField(RootHubDeviceState),
(ULONG) ReadField(SuspendPowerState));
dprintf ("RootHubSymLink (%x %x) %p\n",
(ULONG) ReadField(RootHubSymbolicLinkName.Length),
(ULONG) ReadField(RootHubSymbolicLinkName.MaximumLength),
ReadField(RootHubSymbolicLinkName.Buffer));
}
VOID
USBD_DeviceHandle(
ULONG64 MemLoc
)
{
ULONG Sig;
InitTypeReadCheck(MemLoc, usbd!_USBD_DEVICE_DATA);
Sig = (ULONG) ReadField(Sig);
dprintf("Signature: %c%c%c%c\n"
"DeviceAddress: %d\n"
"Config Handle: %08x\n"
"LowSpeed: %d\n"
"AcceptingRequests: %d\n",
((PUCHAR) &Sig)[0],
((PUCHAR) &Sig)[1],
((PUCHAR) &Sig)[2],
((PUCHAR) &Sig)[3],
(ULONG) ReadField(DeviceAddress),
(ULONG) ReadField(ConfigurationHandle),
(ULONG) ReadField(LowSpeed),
(ULONG) ReadField(AcceptingRequests));
dprintf("\n");
dprintf("Default Pipe\n"
"------------");
USBD_Pipe("", ReadField(DefaultPipe));
dprintf("\n");
dprintf("Device Descriptor\n"
"-----------------");
USBD_DeviceDescriptor("", ReadField(DeviceDescriptor));
dprintf("\n");
dprintf("Configuration Handle\n"
"--------------------\n");
USBD_ConfigHandle( ReadField(ConfigurationHandle));
return;
}