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

在Win2K/WinXP/Win.Net讀出硬碟序號

 
lcsboy
版主


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-22 05:14:20 IP:210.85.xxx.xxx 未訂閱
此程式需要WDM Driver-WinIO, 請參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=21427 原來我把Win9x的程式段也寫好了, 但是在WinME下實作, 居然出槌...又是OS的問題, 但是Win9x的那一段code在DOS下是沒問題的. 於是目前暫時點掉 如果有那位大大找出原因, 麻煩告訴我 (當然, 應該可以在WinME下使用WDM) 【概要】 對ATA下0xEC Command, 由HDD傳回的256個Words(512 Bytes), 依據Spec, 取得HDD Serail Number位於10~19 Word的位址, 將內容用字串方式秀出來 【PS】 對於ATA的Spec, 如果有需要的人, 可以自行mail跟我要.
附加檔案:21428_hddsn.zip
Albertz
初階會員


發表:2
回覆:57
積分:31
註冊:2002-09-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-23 15:31:11 IP:61.219.xxx.xxx 未訂閱
lcsboy 兄, 有一些小小的意見提供你參考一下. Windows 9x 把 磁碟視為一個架構在 IOS 下的一個 block device. 可是在 sample code 裡, 卻看到直接從 disk controller 直接下 atapi command 而忽略掉 IOS 的做法; IDE HDD 本身並無法做 H/W 的 multi-tasking (老實說, 99% 的 H/W 都不支援 multi-tasking),在大量資料讀寫時, 直接嘗試寫入 atapi command可能會導致磁碟存取錯誤. 建議如需讀 出硬碟序號, 利用 smart api 可能會是一個比較好的做法.
lcsboy
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-09-23 15:51:03 IP:210.63.xxx.xxx 未訂閱
很不錯的建議..... 只不過這個sample code只是讓user知道WinIO 怎麼program 所以寫了一段Win9x的code來給user對照使用. 至於OS的問題, 就由user自行處理. 現在知道為什麼win98要用vxd了 ><" 學藝不精..... WinME還是可以用WDM的.
jasonking
一般會員


發表:0
回覆:3
積分:0
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-12-12 17:28:29 IP:61.218.xxx.xxx 未訂閱
你好:   很不好意思請教一個問題, 利用了上附的範例, 將之移植到vc++ 6.0 後 發現了一些問題, 想請教解決   1.                  DriverHandle=CreateFile(                 "\\\\.\\" DRIVER, GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); 紅色部分會出現問題 2. 直接指定檔案位置後, 可正常編譯, 但一值停在這個迴圈 BYTE YWipInitial::WaitIDE_NT() { r.type=IOACCESS_READ_BYTE; r.m_dx=0x1F7; do{ WinIO(); }while(r.m_al>=0x80); return r.m_al; } 小弟我才疏學淺,可否告知是何問題 感謝
lcsboy
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-12-13 00:14:45 IP:210.58.xxx.xxx 未訂閱
引言: 你好: 很不好意思請教一個問題, 利用了上附的範例, 將之移植到vc 6.0 後 發現了一些問題, 想請教解決 1. DriverHandle=CreateFile( "\\\\.\\" DRIVER, GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); 紅色部分會出現問題 2. 直接指定檔案位置後, 可正常編譯, 但一值停在這個迴圈 BYTE YWipInitial::WaitIDE_NT() { r.type=IOACCESS_READ_BYTE; r.m_dx=0x1F7; do{ WinIO(); }while(r.m_al>=0x80); return r.m_al; } 小弟我才疏學淺,可否告知是何問題 感謝
基本上! WinIO就是用VC 以DDK complier出來的Driver! 本來就是for VC 用的, 所以不應該會有問題才對, 可能要由你自己處理! 比較要注意的是! 請把WinIO.sys這個WDM最好是和你的code放在同一個目錄, 不管complie 或是 使用上, 都是比較user friendly的作法! 至於你說為什麼會Hang up在讀port 0x1F7? 是問題沒錯! 但是不知道你是否 在WinME下run呢? 還是在那一個OS? 0x1F7是IDE的Status Port! 如果你在其他AP也在讀寫HDD時, 去讀他, 是會回 應busy沒錯! 這個部份可能你要先看一下spec, 再去找一下root cause!
jasonking
一般會員


發表:0
回覆:3
積分:0
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-12-13 09:04:13 IP:61.218.xxx.xxx 未訂閱
引言: 基本上! WinIO就是用VC 以DDK complier出來的Driver! 本來就是for VC 用的, 所以不應該會有問題才對, 可能要由你自己處理! 比較要注意的是! 請把WinIO.sys這個WDM最好是和你的code放在同一個目錄, 不管complie 或是 使用上, 都是比較user friendly的作法! 至於你說為什麼會Hang up在讀port 0x1F7? 是問題沒錯! 但是不知道你是否 在WinME下run呢? 還是在那一個OS? 0x1F7是IDE的Status Port! 如果你在其他AP也在讀寫HDD時, 去讀他, 是會回 應busy沒錯! 這個部份可能你要先看一下spec, 再去找一下root cause!
感謝您的回答 請容許我再說的詳細一點 1. 我所使用的 OS 是 Windows 2000 with SP3 update 2. 範例中的demo程式我可以正常執行 請指教如何得知hdd狀態是否因為哪個ap而產生busy 狀態 另請告知該到何處找尋相關 Spec 參考資料呢? 謝謝
lcsboy
版主


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-12-13 11:18:37 IP:210.58.xxx.xxx 未訂閱
引言: 感謝您的回答 請容許我再說的詳細一點 1. 我所使用的 OS 是 Windows 2000 with SP3 update 2. 範例中的demo程式我可以正常執行 請指教如何得知hdd狀態是否因為哪個ap而產生busy 狀態 另請告知該到何處找尋相關 Spec 參考資料呢? 謝謝
你可以用簡訊給我你的e-mail, 我可以給你ATAPI device的Spec
dotdot
版主


發表:29
回覆:142
積分:64
註冊:2002-08-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-04 17:17:13 IP:211.22.xxx.xxx 未訂閱
不好意思請教一下~~ 我有下載回應文章內容 lcsboy大大的 WinIO的driver想做點實驗 下載此BCB的demo應用程式 可是我無法正常執行我的環境也是WIN2000 SP3並且也將執行檔跟winio.sys放在同一目錄下 執行程式後他會顯示 一個對話框 說 "Set Device Fail!" 請大大指點迷津
dotdot
版主


發表:29
回覆:142
積分:64
註冊:2002-08-09

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-03-04 18:24:12 IP:211.22.xxx.xxx 未訂閱
喔~ 對不起 小弟疏忽 我把HD設為Marster就可以run了~~
系統時間:2024-05-16 7:00:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!