Applications which use IOCTL_SCSI_GET_CAPABILITIES and/or IOCTL_SCSI_PASS_THROUGH_DIRECT are dependent on the caller honoring both the MaximumTransferLength value and the MaximumPhysicalPages value returned by IOCTL_SCSI_GET_CAPABILITIES.
WinPE has legacy drivers integrated, which may cause the system to use system DMA instead of scatter-gather DMA. This can cause the MaximumPhysicalPages value in WinPE to differ from the value in a full install of Windows. For example, in WinPE, the MaximumPhysicalPages may be limited to 16 4k pages (64k). If the application code does not ensure that MaximumTransferLength value and the MaximumPhysicalPages values are honored, the application code may run successfully on the full operating system, but will encounter STATUS_INVALID_PARAMETER when run in a WinPE environment.
It is also advisable to use page-aligned buffers to make full use of the available MaximumPhysicalPages. Non-page-aligned buffers generally result in the use of an extra page.
WinPE has legacy drivers integrated, which may cause the system to use system DMA instead of scatter-gather DMA. This can cause the MaximumPhysicalPages value in WinPE to differ from the value in a full install of Windows. For example, in WinPE, the MaximumPhysicalPages may be limited to 16 4k pages (64k). If the application code does not ensure that MaximumTransferLength value and the MaximumPhysicalPages values are honored, the application code may run successfully on the full operating system, but will encounter STATUS_INVALID_PARAMETER when run in a WinPE environment.
It is also advisable to use page-aligned buffers to make full use of the available MaximumPhysicalPages. Non-page-aligned buffers generally result in the use of an extra page.