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

關於Device IOControl 的問題

尚未結案
ahkuan
一般會員


發表:2
回覆:7
積分:6
註冊:2007-05-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-07-06 11:49:57 IP:219.142.xxx.xxx 訂閱
各位大大
請問一下,我現在遇到需要抓到 U 盤的磁碟機代號,我想請問一下,用DeviceIOControl 。
如何可以抓到相對應的磁碟機代號。
謝謝各位。
harrypp
中階會員


發表:7
回覆:124
積分:61
註冊:2006-08-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-07-12 13:33:57 IP:210.202.xxx.xxx 訂閱
請查 CreateFile("\\\\\\A:",.............)
編輯記錄
harrypp 重新編輯於 2007-07-12 15:17:58, 註解 無‧
ahkuan
一般會員


發表:2
回覆:7
積分:6
註冊:2007-05-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-07-12 19:38:42 IP:220.132.xxx.xxx 訂閱
那我要怎麼比對說 某個 USB 裝置 就是對應該磁碟機代號呢
harrypp
中階會員


發表:7
回覆:124
積分:61
註冊:2006-08-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-07-13 10:36:10 IP:210.68.xxx.xxx 訂閱
很簡單就'A'~'Z'掃一次不就好了,
每次下Inquiry比對回傳的資訊。
ahkuan
一般會員


發表:2
回覆:7
積分:6
註冊:2007-05-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-07-13 10:49:38 IP:60.250.xxx.xxx 訂閱

===================引 用 harrypp 文 章===================
很簡單就'A'~'Z'掃一次不就好了,
每次下Inquiry比對回傳的資訊。

可以請你說詳細怎麼操作嗎
我現在可以改寫 UsbVew 的code,可以得到 裝置的 DevicePath ,我要怎麼用來比對
CreateFile ,使用 inquiry 去查詢到可以比對的資料?
inquiry 要怎麼使用呢,是否可以請你寫過簡單的小例子給我參考,謝謝你。
ahkuan
一般會員


發表:2
回覆:7
積分:6
註冊:2007-05-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-07-13 14:00:52 IP:60.250.xxx.xxx 訂閱

===================引 用 harrypp 文 章===================
很簡單就'A'~'Z'掃一次不就好了,
每次下Inquiry比對回傳的資訊。

<textarea class="cpp" rows="10" cols="60" name="code"> BOOL GetDisksProperty(HANDLE hDevice, PSTORAGE_DEVICE_DESCRIPTOR pDevDesc) { STORAGE_PROPERTY_QUERY Query; DWORD dwOutBytes; BOOL bResult; memset(&Query, 0, sizeof(Query)); Query.PropertyId = StorageDeviceProperty; Query.QueryType = PropertyStandardQuery; bResult = ::DeviceIoControl(hDevice, IOCTL_STORAGE_QUERY_PROPERTY , &Query, sizeof(STORAGE_PROPERTY_QUERY) , pDevDesc, pDevDesc->Size, &dwOutBytes , (LPOVERLAPPED)NULL); return bResult; } </textarea> 為什麼我這樣寫會一直回我 FALSE 呢,是不是我還要初始什麼設定呢
harrypp
中階會員


發表:7
回覆:124
積分:61
註冊:2006-08-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-07-13 15:02:31 IP:210.68.xxx.xxx 訂閱
我是對USB Device直接下SCSI Command。
你可以參考這篇看看 IOCTL_SCSI_PASS_THROUGH
方法大概如下


<textarea name="code" class="cpp" rows="10" cols="60"> Device = CreateFile( '....磁碟機....', GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); bResult = DeviceIoControl(Device , IOCTL_SCSI_PASS_THROUGH, .................) </textarea>
編輯記錄
harrypp 重新編輯於 2007-07-13 15:04:08, 註解 無‧
ahkuan
一般會員


發表:2
回覆:7
積分:6
註冊:2007-05-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-07-13 15:19:14 IP:60.250.xxx.xxx 訂閱

===================引 用 harrypp 文 章===================
我是對USB Device直接下SCSI Command。
你可以參考這篇看看 IOCTL_SCSI_PASS_THROUGH
方法大概如下


<textarea class="cpp" rows="10" cols="60" name="code"> Device = CreateFile( '....磁碟機....', GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); bResult = DeviceIoControl(Device , IOCTL_SCSI_PASS_THROUGH, .................) </textarea><br />
我後來發現 只要把 Compiler 的 Treat enum types as ints 給打勾就行了。就可以正常的取得 一些訊息。那現在我要用那一個 IOCTL_ 才可以取得判斷的依據呢
系統時間:2024-04-25 8:04:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!