hi,<br>
<br>
folgende code zeilen:<br>
<br>
<pre>
int __declspec(dllexport) __stdcall CDDAGetData( BYTE** p_ppbyData, DWORD p_dwAdress, WORD p_wLength, BYTE p_byHostAdapter, BYTE p_bySCSI ) {
SRB_ExecSCSICmd l_srbExecIO;
DWORD ret;
memset( &l_srbExecIO, 0, sizeof( l_srbExecIO ) );
l_srbExecIO.SRB_Cmd = SC_EXEC_SCSI_CMD;
l_srbExecIO.SRB_HaId = p_byHostAdapter;
l_srbExecIO.SRB_Flags = SRB_DIR_IN | SRB_EVENT_NOTIFY;
l_srbExecIO.SRB_Target = p_bySCSI;
l_srbExecIO.SRB_SenseLen = 14;
l_srbExecIO.SRB_BufLen = p_wLength;
l_srbExecIO.SRB_BufPointer = (*p_ppbyData);
l_srbExecIO.SRB_CDBLen = 0xA;
l_srbExecIO.CDBByte[0] = 0x28; // Lese von Gerät
l_srbExecIO.CDBByte[2] = HIBYTE( HIWORD( p_dwAdress ) );
l_srbExecIO.CDBByte[3] = LOBYTE( HIWORD( p_dwAdress ) );
l_srbExecIO.CDBByte[4] = HIBYTE( LOWORD( p_dwAdress ) );
l_srbExecIO.CDBByte[5] = LOBYTE( LOWORD( p_dwAdress ) );
l_srbExecIO.CDBByte[7] = HIBYTE( p_wLength );
l_srbExecIO.CDBByte[8] = LOBYTE( p_wLength );
l_srbExecIO.SRB_PostProc = g_hEventSRB;
ResetEvent( g_hEventSRB );
ret = sendASPI32Command( (LPSRB)&l_srbExecIO );
if( ret != SS_PENDING ) {
return ASPI32ERR_COMMAND;
}
WaitForSingleObject( g_hEventSRB, 10000 );
if( l_srbExecIO.SRB_Status != SS_COMP ) {
printf( "Error reading!\n" );
printf( "CmdStatus = %d\n", l_srbExecIO.SRB_Status );
printf( "HaStat = %d\n", l_srbExecIO.SRB_HaStat );
printf( "TargetStat = %d\n", l_srbExecIO.SRB_TargStat );
printf( "Sense Key = %d\n", l_srbExecIO.SenseArea[2] );
printf( "Sense Code = %d\n", l_srbExecIO.SenseArea[12] );
return ASPI32ERR_COMMAND;
}
return ASPI32ERR_OK;
}
DWORD l_nTStart = 17632;
WORD l_nTLength = 16668;
BYTE* Data = new BYTE[l_nTLength - 1];
if( CDDAGetData( &Data, l_nTStart, l_nTLength - 1, 0, 1 ) != ASPI32ERR_OK ) {
printf( "Couldn't read data\n" );
}
else {
for( WORD i = 0; i < l_nLength; i++ ) {
printf( "%d", Data[i] );
}
}
delete[] Data;
</pre>
<br>
folgende zusätzliche angaben:<br>
<br>
SenseKey = 5<br>
SenseCode = 100<br>
TargetStat = 2<br>
CmdStatus = 4<br>
<br>
<pre>
(Sense Key Code)
|--------+--------------------------------------------------------------------|
| 5h | ILLEGAL REQUEST. Indicates that there was an illegal parameter in|
| | the command descriptor block or in the additional parameters |
| | supplied as data for some commands (FORMAT UNIT, SEARCH DATA, |
| | etc.). If the target detects an invalid parameter in the command |
| | descriptor block, then it shall terminate the command without |
| | altering the medium. If the target detects an invalid parameter |
| | in the additional parameters supplied as data, then the target may|
| | have already altered the medium. This sense key may also indicate|
| | that an invalid IDENTIFY message was received (6.6.7). |
|--------+--------------------------------------------------------------------|
(Sense Code Code)
| 64 00 R ILLEGAL MODE FOR THIS TRACK |
</pre>
<br>
mein problem:<br>
ich kann mit der fehlernummer nix anfangen.<br>
ich hab versucht mittels aspi von eine audio-cd daten zu lesen...<br>
<br>
kann mir da bitte einer helfen?<br>
<br>
cya<br>
Christoph<br>
<br>
folgende code zeilen:<br>
<br>
<pre>
int __declspec(dllexport) __stdcall CDDAGetData( BYTE** p_ppbyData, DWORD p_dwAdress, WORD p_wLength, BYTE p_byHostAdapter, BYTE p_bySCSI ) {
SRB_ExecSCSICmd l_srbExecIO;
DWORD ret;
memset( &l_srbExecIO, 0, sizeof( l_srbExecIO ) );
l_srbExecIO.SRB_Cmd = SC_EXEC_SCSI_CMD;
l_srbExecIO.SRB_HaId = p_byHostAdapter;
l_srbExecIO.SRB_Flags = SRB_DIR_IN | SRB_EVENT_NOTIFY;
l_srbExecIO.SRB_Target = p_bySCSI;
l_srbExecIO.SRB_SenseLen = 14;
l_srbExecIO.SRB_BufLen = p_wLength;
l_srbExecIO.SRB_BufPointer = (*p_ppbyData);
l_srbExecIO.SRB_CDBLen = 0xA;
l_srbExecIO.CDBByte[0] = 0x28; // Lese von Gerät
l_srbExecIO.CDBByte[2] = HIBYTE( HIWORD( p_dwAdress ) );
l_srbExecIO.CDBByte[3] = LOBYTE( HIWORD( p_dwAdress ) );
l_srbExecIO.CDBByte[4] = HIBYTE( LOWORD( p_dwAdress ) );
l_srbExecIO.CDBByte[5] = LOBYTE( LOWORD( p_dwAdress ) );
l_srbExecIO.CDBByte[7] = HIBYTE( p_wLength );
l_srbExecIO.CDBByte[8] = LOBYTE( p_wLength );
l_srbExecIO.SRB_PostProc = g_hEventSRB;
ResetEvent( g_hEventSRB );
ret = sendASPI32Command( (LPSRB)&l_srbExecIO );
if( ret != SS_PENDING ) {
return ASPI32ERR_COMMAND;
}
WaitForSingleObject( g_hEventSRB, 10000 );
if( l_srbExecIO.SRB_Status != SS_COMP ) {
printf( "Error reading!\n" );
printf( "CmdStatus = %d\n", l_srbExecIO.SRB_Status );
printf( "HaStat = %d\n", l_srbExecIO.SRB_HaStat );
printf( "TargetStat = %d\n", l_srbExecIO.SRB_TargStat );
printf( "Sense Key = %d\n", l_srbExecIO.SenseArea[2] );
printf( "Sense Code = %d\n", l_srbExecIO.SenseArea[12] );
return ASPI32ERR_COMMAND;
}
return ASPI32ERR_OK;
}
DWORD l_nTStart = 17632;
WORD l_nTLength = 16668;
BYTE* Data = new BYTE[l_nTLength - 1];
if( CDDAGetData( &Data, l_nTStart, l_nTLength - 1, 0, 1 ) != ASPI32ERR_OK ) {
printf( "Couldn't read data\n" );
}
else {
for( WORD i = 0; i < l_nLength; i++ ) {
printf( "%d", Data[i] );
}
}
delete[] Data;
</pre>
<br>
folgende zusätzliche angaben:<br>
<br>
SenseKey = 5<br>
SenseCode = 100<br>
TargetStat = 2<br>
CmdStatus = 4<br>
<br>
<pre>
(Sense Key Code)
|--------+--------------------------------------------------------------------|
| 5h | ILLEGAL REQUEST. Indicates that there was an illegal parameter in|
| | the command descriptor block or in the additional parameters |
| | supplied as data for some commands (FORMAT UNIT, SEARCH DATA, |
| | etc.). If the target detects an invalid parameter in the command |
| | descriptor block, then it shall terminate the command without |
| | altering the medium. If the target detects an invalid parameter |
| | in the additional parameters supplied as data, then the target may|
| | have already altered the medium. This sense key may also indicate|
| | that an invalid IDENTIFY message was received (6.6.7). |
|--------+--------------------------------------------------------------------|
(Sense Code Code)
| 64 00 R ILLEGAL MODE FOR THIS TRACK |
</pre>
<br>
mein problem:<br>
ich kann mit der fehlernummer nix anfangen.<br>
ich hab versucht mittels aspi von eine audio-cd daten zu lesen...<br>
<br>
kann mir da bitte einer helfen?<br>
<br>
cya<br>
Christoph<br>