2016-04-19 9 views
0

私たちはWindows 10でNVMEデバイスを管理するアプリケーションを開発しています。私たちは独自のドライバを使ってドライブと話すことはしません。したがって、ほとんどのコマンドを送信するには、 Windowsの10SCSIからNVMEへの翻訳

からSecurity ReceiveSecurity Sendのようなコマンドでは、我々は、SCSIコマンドがホストから送信され、SCSIカーネルスタックによってNVMEコマンドに変換され、その後に送られる​​翻訳、彼らのサポートを使用していますドライブ。

我々はコマンドがドライブに達しているが、翻訳がSecurity Receiveコマンドの場合、ドライブに正しい名前空間識別子を送信することができないため、SCSIはAccess denied, Invalid LU Identifierとしてセンスデータにエラーを返して見ることができます。

SCSI-NVME変換では、CDBに名前空間識別子フィールドを設定できません。ホスト側から送信するSCSIコマンドにこの名前空間識別子を設定する他の方法はありますか?または、これはドライブに間違ったデータを送信するというドライバのエラーですか?

Microsoftの他のAPI(Storage Query Propertyなど)は、この名前空間IDを単独で設定しているため、ユーザー側から設定する必要はありません。

似たような環境で働いている人があれば、私たちを助けることができます。とても役に立ちます。

+0

もう一度言い換えると、SCSI-NVME変換アプローチを使用してNVMEドライブにコマンドを送信するたびに、名前空間識別子がSCSIコマンドによってどのように設定されるかを知りたいと思います。私が使用しているSCSI-NVME変換仕様は、NameSpace IdentifierがCDBでどのように設定されているかについては言及していません。ネームスペース識別子は、NVMEコマンド構造の重要なフィールドです。 – Ravi

+0

書式と言い回しが改善されました。 – CodeMouse92

+0

次回は気をつけます。 – Ravi

答えて

0

これは面白い質問ですが、Windows 10のドライバがどのように内部で動作するのかは完全にはわかりませんが、この変換がどのように機能するかについては、NSIDを明示的に指定する必要はありません。ユーザー空間。

私が作業したすべてのWindows NVMeドライバでは、コントローラはアダプタハンドルによって公開され、ネームスペースは物理ドライブハンドルによって公開されます。 SCSIコマンドは物理ドライブハンドルに送られ、ネイティブNVMeコマンドはアダプタに送られます。 SCSIコマンドを物理ドライブハンドルに送信する場合、意図した名前空間は暗黙のうちにそれぞれのハンドルが名前空間に直接接続されているため、変換中にドライバとして設定する必要があります。これは、OFA(OpenFabrics Alliance)ドライバーとすべての派生商品でどのように動作するかです。

SCSIコマンドを物理ドライブに送信していて、ネームスペースが入力されていない場合、ドライバのバグのように聞こえます。アダプタにSCSIコマンドを送信する場合(OS /ドライバによって拒否されない場合)、希望の名前空間IDに対応する物理ドライブにSCSIコマンドを送信してみてください。

0

私はscsiコマンドを送信するために、物理ドライブのハンドルに送信する必要があります。Windows 10では、アダプタ用のコマンドも送信していますが、 元の質問に戻って、これは名前空間管理に関連するファームウェアのバグでした。Windowsドライバはたくさんの読み込みをしています。特定のコマンドが送信されるたびに、NVMEドライブからのものが表示され、特定のコマンドが送信されるたびにそのソースから読み込みます.Namespaceに厳密に関連付けられた物理ドライブハンドルの仮定は、Windows 10ドライバのこの動作のため正しいです。ファームウェアのバグ、何がドライブに到達したか、名前空間0、これはinv alid namespaceIdであり、したがって拒否されました。 固定ファームウェアでは、この問題はなくなり、コマンドは正しく応答していました!

乾杯!

関連する問題