|
|
/*++
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; }
|