線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1232
推到 Plurk!
推到 Facebook!

ASPI hold住USB,造成無法正常移除USB

尚未結案
palw
初階會員


發表:45
回覆:89
積分:26
註冊:2003-02-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-08 11:15:07 IP:211.78.xxx.xxx 未訂閱
您好,目前程式上發現一個問題,當我LoadLibrary做ASPIStart之後,即使我下FreeLibrary的指令,只要是程式開著,我去點選正常移除裝置都不能移除.除非關閉程式才可以,請問這有法可解嗎?
palw
初階會員


發表:45
回覆:89
積分:26
註冊:2003-02-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-14 17:08:48 IP:211.78.xxx.xxx 未訂閱
附上原始碼,請各位幫幫忙.感激不盡 < 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時可正常退卡.
系統時間:2024-05-02 4:11:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!