全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:6734
推到 Plurk!
推到 Facebook!

很難的問題: 請問如何用程式安全移除USB的Device??

尚未結案
poyulin
一般會員


發表:10
回覆:24
積分:6
註冊:2002-11-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-11-25 10:19:41 IP:61.218.xxx.xxx 未訂閱
各位高手請幫幫忙: 一般我們如果要安全移除USB的Device, 可能是透過滑鼠點選右下角的TrayIcon來手動安全移除該裝置, 能用Win32 API等方法來做安全移除的動作嗎? 小弟是在Windows2000下執行... Thanks...
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-11-25 11:30:16 IP:211.23.xxx.xxx 未訂閱
的的確確是個滿難的問題, 單指AP的領域    以我目前所知的淺見!    右下角那個移除的動作, 只有兩種東東作得到: 1. BIOS 寫好ASL code, 發出0x80 來notify OS----status change 2. 用driver來 notify OS    
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-11-26 12:04:43 IP:203.73.xxx.xxx 未訂閱
引言: 一般我們如果要安全移除USB的Device, 可能是透過滑鼠點選右下角的TrayIcon來手動安全移除該裝置, 能用Win32 API等方法來做安全移除的動作嗎? 小弟是在Windows2000下執行...
poyulin你好: 請查詢 M$DN or Platform SDK 關鍵字「
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
IBMUSER
一般會員


發表:0
回覆:7
積分:11
註冊:2002-12-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-12-02 17:38:57 IP:203.73.xxx.xxx 未訂閱
如果須要使用API安全移除USB Device,先決條件必須要知道這USB裝置的 DeviceID,再讀取所有裝置的DeviceID,當找到符合你要移除的DeviceID, 使用Windows API function "SetupDiCallClassInstaller",就可安全移除
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-12-03 09:33:58 IP:211.23.xxx.xxx 未訂閱
引言: 如果須要使用API安全移除USB Device,先決條件必須要知道這USB裝置的 DeviceID,再讀取所有裝置的DeviceID,當找到符合你要移除的DeviceID, 使用Windows API function "SetupDiCallClassInstaller",就可安全移除
想請教一下! 1. 您這裡說的DeviceID是, Device ID 在PCI Configuration Space裡的那一個嗎? 2. MSDN 和SDK都找不到你說的"SetupDiCallClassInstaller"這個API. 不知是 不是記錯了還是有另一個呢?
IBMUSER
一般會員


發表:0
回覆:7
積分:11
註冊:2002-12-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-12-03 12:34:09 IP:203.73.xxx.xxx 未訂閱
1. 是,觀念是一樣的,每一個Device必須有一個ID,如USB Device的ID像 USB\VID_FFFF&PID_0001,PCI是PCI\..., VENDOR ID簡稱VID,當你Plug-In你的Device時 Windows會依照VID去Enum Root Registry key尋找是否有Compatible ID, 如果有Windows將自動載入Driver,否則Windows將通知user載入Driver, VID是廠商唯一的ID,PID則是Product ID. 關於本題主旨,有些裝置如Storage Class Driver(行動碟,PCMCIA),在 Driver上的設計就是要讓user知道你已經UnPlug,USB Printer就沒這必要. 2. SetupDiCallClassInstaller的function於WindowsDDK中說明,(W2KDDK or XP DDK)
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-12-03 15:34:16 IP:211.23.xxx.xxx 未訂閱
引言: 1. 是,觀念是一樣的,每一個Device必須有一個ID,如USB Device的ID像 USB\VID_FFFF&PID_0001,PCI是PCI\..., VENDOR ID簡稱VID,當你Plug-In你的Device時 Windows會依照VID去Enum Root Registry key尋找是否有Compatible ID, 如果有Windows將自動載入Driver,否則Windows將通知user載入Driver, VID是廠商唯一的ID,PID則是Product ID. 關於本題主旨,有些裝置如Storage Class Driver(行動碟,PCMCIA),在 Driver上的設計就是要讓user知道你已經UnPlug,USB Printer就沒這必要. 2. SetupDiCallClassInstaller的function於WindowsDDK中說明,(W2KDDK or XP DDK)
如果我沒有弄錯你的意思的話, 你說的是不是要用寫個driver才能用這個方式 移除呢? 這樣的話, 就和我原先的想法一樣, device的事只能由driver來call driver的funtion通知OS.
IBMUSER
一般會員


發表:0
回覆:7
積分:11
註冊:2002-12-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-12-03 16:59:44 IP:203.73.xxx.xxx 未訂閱
不,你不必寫Device Driver,SetupDiCallClassInstaller是user mode的function,Compiler時須link Setupapi.lib,通常存放在..\CBuilder6\lib\psdk 路徑下,關於這sample code可以參考Windows2000/xp ddk
GaryCheng
一般會員


發表:1
回覆:2
積分:0
註冊:2003-12-24

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-02-09 11:25:34 IP:61.220.xxx.xxx 未訂閱
小弟目前我也有遇到這樣的一個問題, 那要如何用程式取得我這一項設備的VID&PID呢?? bool SetupDiCallClassInstaller{ IN DI_FUNCTION InstallFunction IN HDEVINFO DeviceInfoSet IN DSP_DEVINFO_DATA DeviceInfoData } 請問一下該如何使用此一Function~~~ 試了好多次都寫不出來 頭好痛 感謝大家
poyulin
一般會員


發表:10
回覆:24
積分:6
註冊:2002-11-25

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-02-09 12:31:13 IP:61.218.xxx.xxx 未訂閱
這個問題我很早就解決了,但因為我現在工作很忙,無法告訴你details,但可以給你一個hint, 使用Request_Device_Eject(..)就對了....
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-02-09 12:40:20 IP:61.218.xxx.xxx 未訂閱
請參考這個範例:    http://popup5.tok2.com/home/tikomosoft/src_usb/sample5.html
/*生活是一種藝術,用心生活才能享受生活*/
發表人 - axsoft 於 2004/02/09 12:44:32
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-02-09 12:57:48 IP:61.218.xxx.xxx 未訂閱
重複了...Sorry 發表人 - axsoft 於 2004/02/09 13:04:06
GaryCheng
一般會員


發表:1
回覆:2
積分:0
註冊:2003-12-24

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-02-09 17:07:32 IP:61.230.xxx.xxx 未訂閱
各位大哥好~~~ 以下是我的GUID宣告, GUID GUID_DEVCLASS_NET = {0x4d36e999L, 0xe325, 0x11ce, {0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18}}; 可否用SetupDiCallClassInstaller來作USB Device Enable和Disable呢?? 我是用 SetupDiCallClassInstaller{ DIF_PROPERTYCHANGE,???,??? } 裡面的其他參數就不知道要如何去取得了~~~ 至於前面那 Request_Device_Eject(..) 由於小弟功力尚淺 所以不是粉清楚要去哪裡呼叫Enable以及Disable 感謝大家的熱烈回應 謝謝幫助
zcecil
初階會員


發表:0
回覆:28
積分:45
註冊:2003-06-27

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-04-15 14:27:24 IP:220.130.xxx.xxx 未訂閱
DDK裡有一隻叫 enable 的 sample 看一下它的 source 吧
okeyla
一般會員


發表:51
回覆:20
積分:19
註冊:2003-06-12

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-08-02 10:40:40 IP:220.130.xxx.xxx 未訂閱
引言: 請參考這個範例: 發表人 - axsoft 於 2004/02/09 12:44:32
會出現以下的errorㄟ?!?!?! 該怎麼解決呢??? c:\ntddk\inc\cfgmgr32.h(122) : error C2146: syntax error : missing ';' before identifier 'LOG_CONF' c:\ntddk\inc\cfgmgr32.h(122) : fatal error C1004: unexpected end of file found
8866
中階會員


發表:27
回覆:147
積分:69
註冊:2002-10-14

發送簡訊給我
#16 引用回覆 回覆 發表時間:2004-08-05 17:24:53 IP:61.222.xxx.xxx 未訂閱
可能是你的路徑有問題 !!! 如不嫌棄我寄一個 DLL 給你用一用 ! (VC 的 DLL) 請來信告知 !
系統時間:2024-03-28 22:27:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!