Member 9269298 Ответов: 1

Как отправить SCSIOP_WRITE, как журнал bushound


Всем привет
Я использую Bushound для записи поведения SCSIP_WRITE из приложения. Бортовой журнал показывает что-то вроде этого.
9 CMD 2a 00 00 00 00 00 00 00 80 00 WRITE 3317238.1.0
9 CMD 2a 00 00 00 00 80 00 00 80 00 WRITE 3317239.1.0
9 CMD 2a 00 00 00 01 00 00 00 80 00 WRITE 3317240.1.0
9 CMD 2a 00 00 00 01 80 00 00 80 00 WRITE 3317241.1.0
9 OUT 03 00 00 00 03 00 00 00 04 00 00 00 03 00 00 00 05 00 00 00 03 00 00 00 06 00 00 00 03 00 00 00 ................................ 3317238.2.0
07 00 00 00 03 00 00 00 08 00 00 00 03 00 00 00 09 00 00 00 03 00 00 00 0a 00 00 00 03 00 00 00 ................................ 3317238.2.32
0b 00 00 00 03 00 00 00 0c 00 00 00 03 00 00 00 0d 00 00 00 03 00 00 00 0e 00 00 00 03 00 00 00 ................................ 3317238.2.64
0f 00 00 00 03 00 00 00 10 00 00 00 03 00 00 00 11 00 00 00 03 00 00 00 12 00 00 00 03 00 00 00 ................................ 3317238.2.96

SCSIOP_WRITE, который я знаю, - это команда SCSIOP_WRITE, за которой будут следовать ее собственные данные. Но журнал, 4 SCSIOP_WRITE(0x2a) подряд, не показывает мне ничего похожего на обычный SCSIOP_WRITE. Кто-нибудь знает, как отправить SCSIOP_WRITE, как это делает журнал? Большое спасибо за вашу помощь!

Что я уже пробовал:

Я пытаюсь реализовать IOCTL_SCSI_PASS_THROUGH_DIRECT_EX, и GetLastError возвращает 0x32(ERROR_NOT_SUPPORTED). STORAGE_ADAPTER_DESCRIPTOR.SrbType-это действительно 0x00. SrbType должен быть 0x01 для поддержки IOCTL_SCSI_PASS_THROUGH_DIRECT_EX.

1 Ответов

Рейтинг:
0

Rick York

Взгляните на этот пост : SCSI считывает (10) и записывает (10) С помощью универсального интерфейса SCSI - переполнение стека[^]

Там же есть ссылки на другие примеры кода, которые могут быть полезны.


Member 9269298

Спасибо Вам за ответ! Но пример кода в ссылке 404 не найден. Я могу сделать запись(10) и чтение(10) для проверки данных. Он имеет ограничение MaximumTransferLength каждого STORAGE_ADAPTER_DESCRIPTOR. TRANSFER_LENGTH записи(10) не может превышать MaximumTransferLength. Но приложение каким-то образом может объединить 4 WRITE(10) в 1 команду multi-write на запоминающее устройство(например, SDcard). Интересно, как я могу передать "больше, чем MaximumTransferLength data" на запоминающее устройство с помощью команды SCSI.