使用DeviceIoControl和USB設備傳送數據失敗 |
尚未結案
|
c.f
一般會員 發表:3 回覆:0 積分:0 註冊:2003-09-12 發送簡訊給我 |
我剛接手公司的一個產品測試程序進行改進,請看以下代碼,此代碼是用於和MP3 U盤发送命令的其中一個函數,在WIN2000 C BUILDER60下的項目,此段代碼在別人機器上編譯和運行都正常,在我的機器上編譯通過,但運行時此函數返回FALSH,返回的錯誤信息是(簡體WIN2000 "表明兩個修訂級別是不相容的" 繁體WIN2000 "將這兩個修正階層標為不相容"),在別人機器編譯後的執行文件為833K,我的機器的為824K,在我機器上安裝了NTDDK(但不知是否安裝正確,我只是按安裝程序正常流程安裝,沒做其他設置).我己弄了一周,找不出原因,請較各位高手. 函數代碼
BOOL __fastcall TForm1::physics_format(HANDLE hDevice)
{
char buf[1000]; //printf(" ***** WRITE DATA BUFFER operation *****\n");
SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER sptdwb;
ZeroMemory(&sptdwb, sizeof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER)); PUCHAR dataBuffer = &buf[0]; //NULL;
IO_SCSI_CAPABILITIES capabilities;
sptdwb.sptd.Length = sizeof(SCSI_PASS_THROUGH_DIRECT);
sptdwb.sptd.PathId = 0;
sptdwb.sptd.TargetId = 1;
sptdwb.sptd.Lun = 0;
sptdwb.sptd.CdbLength = CDB10GENERIC_LENGTH;
sptdwb.sptd.SenseInfoLength = 24;
sptdwb.sptd.DataIn = SCSI_IOCTL_DATA_OUT;
sptdwb.sptd.DataTransferLength = 0;
sptdwb.sptd.TimeOutValue = 60;
sptdwb.sptd.DataBuffer = dataBuffer;
sptdwb.sptd.SenseInfoOffset =
offsetof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER,ucSenseBuf); sptdwb.sptd.Cdb[0] = 0x81;
sptdwb.sptd.Cdb[1] = 0; // Data mode
sptdwb.sptd.Cdb[2] = 0x55; //prodect
sptdwb.sptd.Cdb[3] = 0xaa;
sptdwb.sptd.Cdb[4] = 0x66;
sptdwb.sptd.Cdb[5] = 0x99;
sptdwb.sptd.Cdb[6] = 0; // Parameter List length
sptdwb.sptd.Cdb[7] = 0; // Parameter List length
sptdwb.sptd.Cdb[8] = 1; ULONG length = sizeof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER);
ULONG returned;
BOOL status = DeviceIoControl(hDevice,
IOCTL_SCSI_PASS_THROUGH_DIRECT,
&sptdwb,
length,
&sptdwb,
length,
&returned,
FALSE); if (!status)
{
ShowMessage(SysErrorMessage(GetLastError()));
// char ErrorText[400];
// ProcessErrorMessage(ErrorText);
}
return status;
}
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |