在Win2K/WinXP/Win.Net讀出硬碟序號 |
|
lcsboy
版主 發表:87 回覆:622 積分:394 註冊:2002-06-18 發送簡訊給我 |
此程式需要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 發送簡訊給我 |
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 發送簡訊給我 |
|
jasonking
一般會員 發表:0 回覆:3 積分:0 註冊:2002-04-15 發送簡訊給我 |
你好:
很不好意思請教一個問題, 利用了上附的範例, 將之移植到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 發送簡訊給我 |
引言: 你好: 很不好意思請教一個問題, 利用了上附的範例, 將之移植到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 發送簡訊給我 |
引言: 基本上! 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 發送簡訊給我 |
|
dotdot
版主 發表:29 回覆:142 積分:64 註冊:2002-08-09 發送簡訊給我 |
|
dotdot
版主 發表:29 回覆:142 積分:64 註冊:2002-08-09 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |