ASPI hold住USB,造成無法正常移除USB |
尚未結案
|
palw
初階會員 發表:45 回覆:89 積分:26 註冊:2003-02-24 發送簡訊給我 |
|
palw
初階會員 發表:45 回覆:89 積分:26 註冊:2003-02-24 發送簡訊給我 |
附上原始碼,請各位幫幫忙.感激不盡
< class="code">
//------------宣告 Start ------------------------
HINSTANCE WnASPI32DllHandle ;
HINSTANCE hAspi32 ;
DWORD (*pfnGetASPI32SupportInfo)( void ) ;
DWORD (*pfnSendASPI32Command)( LPSRB ) ;
HANDLE hEventSRB;
//------------宣告 END --------------------------
bool TForm1::ASPIStart( void )
{
// load WNASPI32.DLL
WnASPI32DllHandle = LoadLibrary ( "WNASPI32.DLL" );
if ( WnASPI32DllHandle == 0 ){
MessageBox ( NULL, "LoadLibrary:\nWNASPI32.DLL not found.",
"Error FS 002", MB_ICONSTOP );
return false;
}
// load the address of SendASPI32Command
pfnSendASPI32Command = (DWORD (*)( LPSRB ))GetProcAddress ( WnASPI32DllHandle, "SendASPI32Command" );
if ( pfnSendASPI32Command == NULL )
{
MessageBox ( NULL, "GetProcAddress:\npfnSendASPI32Command not found.",
"Error FS 004", MB_ICONSTOP );
return false;
}
// load the address of GetASPI32SupportInfo
pfnGetASPI32SupportInfo = (DWORD (*)( void )) GetProcAddress ( WnASPI32DllHandle, "GetASPI32SupportInfo" );
if ( pfnGetASPI32SupportInfo == NULL ){
MessageBox ( NULL, "GetProcAddress:\nGetASPI32SupportInfo not fount.",
"Error FS 003", MB_ICONSTOP );
return false;
} // call GetASPI32SupportInfo
DWORD dwSupportInfo = pfnGetASPI32SupportInfo();
BYTE byHaCount;
BYTE byASPIStatus;
byHaCount = LOBYTE ( LOWORD ( dwSupportInfo ) );
byASPIStatus = HIBYTE ( LOWORD ( dwSupportInfo ) );
switch ( byASPIStatus )
{
case SS_COMP: // ASPI support OK, now create the event object
hEventSRB = CreateEvent ( NULL, true, false, NULL );
if ( !hEventSRB ){
MessageBox ( NULL, "Could not create the event object.",
"Error FS 005", MB_ICONEXCLAMATION );
return false;
}
// MessageBox ( NULL, "Congratulation ","GetASPISupportInfo:", MB_ICONSTOP );
return true; // true = everything OK !!!
case SS_NO_ASPI:
MessageBox ( NULL, "Could not find the ASPI manager.",
"GetASPISupportInfo:", MB_ICONSTOP );
return false;
case SS_ILLEGAL_MODE:
MessageBox ( NULL, "ASPI for Windows does not support real mode.",
"GetASPISupportInfo:", MB_ICONSTOP );
return false;
case SS_OLD_MANAGER:
MessageBox ( NULL, "Old ASPI manager.",
"GetASPISupportInfo:", MB_ICONSTOP );
return false;
case SS_NO_ADAPTERS:
MessageBox ( NULL, "No Adapter",
"GetASPISupportInfo:", MB_ICONSTOP );
return false; default:
MessageBox ( NULL, "Error initializing ASPI.",
"GetASPISupportInfo:", MB_ICONSTOP );
return false;
}
} void TForm1::ASPIStop( void )
{
CloseHandle ( hEventSRB );
FreeLibrary ( WnASPI32DllHandle );
} void __fastcall TForm1::Button1Click(TObject *Sender)
{
if( ASPIStart() == false )
{
ShowMessage("ASPIStart Fail");
return;
}
ASPIStop();
}
當我按下Button1時就執行ASPIStart和ASPIStop的動作,但是當程式未關閉之前,按右下角的正常退卡,卻無法退卡.未按下Button1時可正常退卡.
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |