На каком уровне влияют ограничения драйвера, такие как MaximumTransferLength
и AlignmentMask
(например, которые можно получить с помощью DeviceIoControl (Handle, IOCTL_STORAGE_QUERY_PROPERTY, .. ) ;
?
Я знаю, что когда я отправляю команды SCSI (используя DeviceIoControl(Handle, IOCTL_SCSI_PASS_THROUGH, ..) ;
, это кажется важным, поэтому я придерживаюсь MaximumTransferLength
и AlignmentMask
, чтобы убедиться, что все работает гладко.
Но когда я использую ReadFile(Handle, ..) ;
, например, я обнаруживаю, что могу передать 256 КБ (например) за одно чтение (например) с USB-накопителя, для которого драйвер говорит, что MaximumTransferLength
равно 64 КБ.
Можно ли предположить, что ReadFile(Handle, ..) ;
находится на уровне, когда функция Windows внутренне придерживается ограничений драйвера и помещает данные в буфер в соответствии с запросом? Так что в основном ReadFile(Handle, ..) ;
невосприимчив к упомянутым ограничениям драйвера?
Или хотя бы для ограничения MaximumTransferLength
?
PS. Handle
извлекается либо для PhysicalDrive
, либо для буквы диска.
Или на поведение ReadFile()
также влияет тип Handle
? Например, устройство против файла в файловой системе? Не то чтобы я сам видел разницу (сейчас тестирую с использованием Windows 10).