バッファー データを SCSI デバイスに書き込もうとしていますが、deviceIoControl 呼び出しを実行すると、Windows エラー コード 183 が表示されます。エラー コードは、ファイルが既に終了していることを示していますが、IOCTL 呼び出しに関するエラーを理解できません。
以下に示すように、適切なデバイス ハンドルを取得できたので、CreateFile 関数が渡されました。
int devHandle = DeviceIoControlHelper.CreateFile( deviceName, DeviceIoControlHelper.GENERIC_READ | DeviceIoControlHelper.GENERIC_WRITE, DeviceIoControlHelper.FILE_SHARE_READ | DeviceIoControlHelper.FILE_SHARE_WRITE, IntPtr.Zero, DeviceIoControlHelper.OPEN_EXISTING, 0, IntPtr.Zero);
ただし、バッファを書き込もうとすると、エラーが発生します:
dwReturned = 0;
int b = DeviceIoControlHelper.DeviceIoControl(
devHandle,
DeviceIoControlHelper.IOCTL_SCSI_PASS_THROUGH,
inpBuffer,
(uint)Marshal.SizeOf(info),
inpBuffer, //out pDriveLayout,
(uint)Marshal.SizeOf(info), //(uint)Marshal.SizeOf(typeof(DRIVE_LAYOUT_INFORMATION_EX)),
out dwReturned,
IntPtr.Zero);
Log.Write(Log.TraceLevel_5,"ExecuteDeviceIoControl return pass_through scsistatus = " + info.spt.ScsiStatus);
if (b == 0)
{
int win_err = this.GetWindowsErrorCode();
Log.Write(Log.TraceLevel_5, "ExecuteDeviceIoControl failed, error = " + win_err);
LogMyTrace.Write(LogMyTrace.TraceLevel_5, "ExecuteDeviceIoControl failed, error = " + win_err);
this.CloseOpenHandle(devHandle);
Marshal.FreeHGlobal(inpBuffer);
throw new Exception("DeviceIoControl failed " + deviceName +
" is '" + deviceName + "'. Windows Err is " + win_err);
}
The error code is 183.
このエラーが発生した理由と解決策を入力してください。
Windows 2008 R2 (x64) を使用しており、これが iSCSI パスです。