Analyzing I/O activity on an x64 system is largely the same as on a 32-bit system. The only difference is that you are now dealing with 64-bit data structures instead of 32-bit data structures. Below, you will find some details on how we handle this within busTRACE.
busTRACE insulates you from these differences and captures all 32-bit and 64-bit data structures transparently. When you are analyzing I/O activity, the I/O activity will look similar regardless of which platform you are running. The key difference you will see is in busTRACE's ability to show you the I/O data structures going down and back up the I/O stack.
As we mentioned above, a SCSI_REQUEST_BLOCK structure is the same under a 32-bit or 64-bit platform. That's true at least from the source code perspective. However, when you compile the structure, the actual raw data is different between the two platforms. This is due to 32-bit pointers taking up 4 bytes of memory while 64-bit pointers take up 8 bytes. In order to help you determine which structure was captured (either a 32-bit or 64-bit version of the structure), busTRACE appends a '64' tag to the end of the structure name when it decodes a captured 64-bit I/O request. Below, we have compiled a partial list of 32-bit and 64-bit data structures that busTRACE will capture and decode for you.
There are many other structures that busTRACE decodes that do not differ between win32 and win64. Those structures are not listed below.
32-Bit Structures |
64-Bit Structures |
SCSI_REQUEST_BLOCK |
SCSI_REQUEST_BLOCK64 |
_SCSI_REQUEST_BLOCK |
_SCSI_REQUEST_BLOCK64 |
SCSI_PASS_THROUGH |
SCSI_PASS_THROUGH64 |
SCSI_PASS_THROUGH_DIRECT |
SCSI_PASS_THROUGH_DIRECT64 |
_SCSI_PASS_THROUGH |
_SCSI_PASS_THROUGH64 |
_SCSI_PASS_THROUGH_DIRECT |
_SCSI_PASS_THROUGH_DIRECT64 |
ATA_PASS_THROUGH_EX |
ATA_PASS_THROUGH_EX64 |
ATA_PASS_THROUGH_DIRECT |
ATA_PASS_THROUGH_DIRECT64 |
_ATA_PASS_THROUGH_EX |
_ATA_PASS_THROUGH_EX64 |
_ATA_PASS_THROUGH_DIRECT |
_ATA_PASS_THROUGH_DIRECT64 |
URB |
URB64 |
_URB |
_URB64 |
USB_DEFAULT_PIPE_SETUP_PACKET |
USB_DEFAULT_PIPE_SETUP_PACKET64 |
_USB_DEFAULT_PIPE_SETUP_PACKET |
_USB_DEFAULT_PIPE_SETUP_PACKET64 |
USBD_PIPE_INFORMATION |
USBD_PIPE_INFORMATION64 |
_USBD_PIPE_INFORMATION |
_USBD_PIPE_INFORMATION64 |
USBD_INTERFACE_INFORMATION |
USBD_INTERFACE_INFORMATION64 |
_USBD_INTERFACE_INFORMATION |
_USBD_INTERFACE_INFORMATION64 |
_URB_HCD_AREA |
_URB_HCD_AREA64 |
_URB_HEADER |
_URB_HEADER64 |
_URB_SELECT_INTERFACE |
_URB_SELECT_INTERFACE64 |
_URB_SELECT_CONFIGURATION |
_URB_SELECT_CONFIGURATION64 |
_URB_PIPE_REQUEST |
_URB_PIPE_REQUEST64 |
_URB_FRAME_LENGTH_CONTROL |
_URB_FRAME_LENGTH_CONTROL64 |
_URB_GET_FRAME_LENGTH |
_URB_GET_FRAME_LENGTH64 |
_URB_SET_FRAME_LENGTH |
_URB_SET_FRAME_LENGTH64 |
_URB_GET_CURRENT_FRAME_NUMBER |
_URB_GET_CURRENT_FRAME_NUMBER64 |
_URB_CONTROL_DESCRIPTOR_REQUEST |
_URB_CONTROL_DESCRIPTOR_REQUEST64 |
_URB_CONTROL_GET_STATUS_REQUEST |
_URB_CONTROL_GET_STATUS_REQUEST64 |
_URB_CONTROL_FEATURE_REQUEST |
_URB_CONTROL_FEATURE_REQUEST64 |
_URB_CONTROL_VENDOR_OR_CLASS_REQUEST |
_URB_CONTROL_VENDOR_OR_CLASS_REQUEST64 |
_URB_CONTROL_GET_INTERFACE_REQUEST |
_URB_CONTROL_GET_INTERFACE_REQUEST64 |
_URB_CONTROL_GET_CONFIGURATION_REQUEST |
_URB_CONTROL_GET_CONFIGURATION_REQUEST64 |
_URB_OS_FEATURE_DESCRIPTOR_REQUEST |
_URB_OS_FEATURE_DESCRIPTOR_REQUEST64 |
_URB_CONTROL_TRANSFER |
_URB_CONTROL_TRANSFER64 |
_URB_CONTROL_TRANSFER_EX |
_URB_CONTROL_TRANSFER_EX64 |
_URB_BULK_OR_INTERRUPT_TRANSFER |
_URB_BULK_OR_INTERRUPT_TRANSFER64 |
_USBD_ISO_PACKET_DESCRIPTOR |
_USBD_ISO_PACKET_DESCRIPTOR64 |
_URB_ISOCH_TRANSFER |
_URB_ISOCH_TRANSFER64 |
_URB_TIMEOUT |
_URB_TIMEOUT64 |
_URB_RAW_CONTROL_TRANSFER |
_URB_RAW_CONTROL_TRANSFER64 |
_URB_SET_PIPE_PARAMETERS |
_URB_SET_PIPE_PARAMETERS64 |
_URB_GET_PIPE_PARAMETERS |
_URB_GET_PIPE_PARAMETERS64 |
DEVICE_RELATIONS |
DEVICE_RELATIONS64 |
PDEVICE_RELATIONS |
PDEVICE_RELATIONS64 |