やっぱ三洋電機のドライブだな

このエントリーをはてなブックマークに追加
369首海女
>>367
>sptdwb.sptd.CdbLength = cdbLength;
ココはCDBが10bytesなら10、12bytesなら12。

>sptdwb.sptd.DataIn = UCHAR(direction);
directionの中身が判らないのだけれど、ココにあてるのは
・SCSI_IOCTL_DATA_OUT = 0 (DataBufferを送信)
・SCSI_IOCTL_DATA_IN = 1 (DataBufferに受信)
・SCSI_IOCTL_DATA_UNSPECIFIED = 2 (DataBuffer = NULL)
のいずれか。
例えば[WRITE]は0、[MODE SENSE]は1、[START STOP UNIT]は2。
NTDDKがインスコされているならntddscsi.hでdefineされてるわ。

>sptdwb.sptd.DataTransferLength = transferLength;
これはDataBufferにあてたポインタのバッファサイズ。上記ならpBufferのサイズね。

>sptdwb.sptd.TimeOutValue = timeoutTime/1000;
これはASPIと違って_secじゃ無いのよ、まんま秒なの。
タイムアウトするとASPIと違ってバスリセット起こすわよ。

>sptdwb.sptd.SenseInfoOffset = offsetof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER, ucSenseBuf);
ucSenseBufはグローバルなのかしら?
だとしたらこの関数の前で
pBuffer = ucSenseBuf;
にして、関数内では
sptdwb.sptd.SenseInfoOffset = offsetof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER, pBuffer);

さてココまではイイとして、問題はそのベンダコマンドがデータInなのかデータOutなのかデータ無しなのか、ね。
もし良ければCDBと、データ送信であれば送信バッファの中身も教えてちょーだい。
370252:02/10/17 22:54 ID:JsMVlntt
魔法の呪文が飛び交っています(w

かんがれー

>366
漏れんトコでは40125Sが正常っぽく動いています。つーか、Adaptecの4.71だと
なぜかNorthBridge上のドライブを何一つ認識してくれないので、こいつを使わざるを
得ないのでつ(泣
371名無しさん◎書き込み中:02/10/17 23:12 ID:TPchFLya
>>365
漏れも読んだが、アレじゃ、ただの危ないソフトだな。
372 ◆0uxK91AxII :02/10/17 23:42 ID:n07bugAr
>>369
ご丁寧な解説、ありがとうございます。

>タイムアウトするとASPIと違ってバスリセット起こすわよ。
バスリセットについてはよく分からないのですが、注意しておきます。

>ucSenseBufはグローバルなのかしら?
SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER のメンバ変数です。

>もし良ければCDBと、データ送信であれば送信バッファの中身も教えてちょーだい。
//ドライブ側のメモリの一部を読む。byte2 (現在、0x05のところ) でページ(?)を指定
//ページ は 5 或いは 9 を指定する。128byte読み込む。
0xdf, 0x82, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

//UM Doctor* の試用回数をクリアする。コマンドのみで、データを伴わない。
//最後の 0xff が書き込む値、0x70は番地だと思いますが、よくわかりません。
0xdf, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff

あまり関係ないですが、バッファはVirtualAllocで確保しています。
手軽に境界合わせができるので。
373首海女:02/10/18 09:36 ID:7unZRHp4
取りあえず前の訂正。
下のは無視していいわ、眠くてカンティガイしてたみたい。
> pBuffer = ucSenseBuf;
> にして、関数内では
> sptdwb.sptd.SenseInfoOffset = offsetof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER, pBuffer);

バスリセットは同一ホストアダプタに付けているデバイスが全てハードウェアリセットされるわ。
例えばあるデバイスによってバスリセットが引き起こされた時、同じSCSIカートに付けた別の並列作業していた
CD-Rドライブとかは、その作業を中断されちゃうの。
もしATAPIなら、同じバスのHDDは一時的に切断された状態になっちゃうし、更に試したことは無いけど、
system起動させているHDDだったらWindows落ちちゃうかも。

> //ページ は 5 或いは 9 を指定する。128byte読み込む。
128bytesも読み込むの?
DataTransferLengthに2→4→8→16…と探り入れた方がいいんじゃないカシラ?

手元にCDR-BP2IOがあるんだけど、一年ぶりに電源入れてみたら動かないわ。
試してみようとしたんだけどコレじゃダメね。
と言う訳でガンガってねェ〜。