<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 測試測量 > 設計應用 > 通過(guò)LabVIEW獲取硬盤(pán)序列號

通過(guò)LabVIEW獲取硬盤(pán)序列號

作者: 時(shí)間:2017-01-05 來(lái)源:網(wǎng)絡(luò ) 收藏
這類(lèi)的帖子很多,不過(guò)差不多都是通過(guò)調用動(dòng)態(tài)鏈接庫實(shí)現的。準確的說(shuō)實(shí)現獲取硬盤(pán)序列號的工作是由其他語(yǔ)言編寫(xiě)的DLL來(lái)實(shí)現的。今天我的這例子不用調用動(dòng)態(tài)鏈接庫,直接由LabVIEW來(lái)獲取硬盤(pán)的序列號。

這種方式在一個(gè)論壇上看見(jiàn)過(guò),本想參考參考,不過(guò)樓主把VI加密了,索性自己做一個(gè)和大家分享,討論討論。
本程序讀取的是硬盤(pán)的物理序列號,不同于DLL調用的方法,本方法獲取的是硬盤(pán)唯一真正物理ID(是固化在硬盤(pán)BISO里的SN不是分區的SN),不會(huì )出現重復,也不可能被修改(或者說(shuō)難度很大,而且還有危險,網(wǎng)上看到過(guò)說(shuō)一個(gè)叫PC-3000的可以修改,沒(méi)有嘗試過(guò),有哪位膽大拿自己硬盤(pán)試驗一下,把結果共享一下吧)??捎迷谲浖用苤?。
1、原理
大家知道,硬盤(pán)相對于CPU來(lái)說(shuō)屬于外部設備,而CPU訪(fǎng)問(wèn)外部設備其實(shí)就是對外部IO的端口操作,這是硬盤(pán)的底層操作,對硬盤(pán)的任何操作都可以的,這樣只要我們搞清楚如何通過(guò)IO指令對硬盤(pán)操作和硬盤(pán)物理序列號存放的寄存器就可以輕松讀取我們所要的硬盤(pán)物理序列號了。下面是從網(wǎng)絡(luò )上搜集的一些資料。
硬盤(pán)讀寫(xiě)端口的具體含義
對硬盤(pán)進(jìn)行操作的常用端口是1f0h~1f7h號端口,各端口含義如下:
端口號 讀還是寫(xiě) 具體含義
1F0H 讀/寫(xiě) 用來(lái)傳送讀/寫(xiě)的數據(其內容是正在傳輸的一個(gè)字節的數據)
1F1H 讀 用來(lái)讀取錯誤碼
1F2H 讀/寫(xiě) 用來(lái)放入要讀寫(xiě)的扇區數量
1F3H 讀/寫(xiě) 用來(lái)放入要讀寫(xiě)的扇區號碼
1F4H 讀/寫(xiě) 用來(lái)存放讀寫(xiě)柱面的低 8位字節
1F5H 讀/寫(xiě) 用來(lái)存放讀寫(xiě)柱面的高 2位字節(其高 6位恒為 0)
1F6H 讀/寫(xiě) 用來(lái)存放要讀/寫(xiě)的磁盤(pán)號及磁頭號
第 7位 恒為 1
第 6位 恒為 0
第 5位 恒為 1
第 4位 為 0代表第一塊硬盤(pán)、為 1代表第二塊硬盤(pán)
第3~0位 用來(lái)存放要讀/寫(xiě)的磁頭號
1f7H 讀 用來(lái)存放讀操作后的狀態(tài)
第 7位 控制器忙碌
第 6位 磁盤(pán)驅動(dòng)器準備好了
第 5位 寫(xiě)入錯誤
第 4位 搜索完成
第 3位 為 1時(shí)扇區緩沖區沒(méi)有準備好
第 2位 是否正確讀取磁盤(pán)數據
第 1位 磁盤(pán)每轉一周將此位設為1,
第 0位 之前的命令因發(fā)生錯誤而結束
寫(xiě) 該位端口為命令端口,用來(lái)發(fā)出指定命令
為50h 格式化磁道
為20h 嘗試讀取扇區
為21h 無(wú)須驗證扇區是否準備好而直接讀扇區
為22h 嘗試讀取長(cháng)扇區(用于早期的硬盤(pán),每扇可能不是 512字節,而是128字節到1024
之間的值)
為23h 無(wú)須驗證扇區是否準備好而直接讀長(cháng)扇區
為30h 嘗試寫(xiě)扇區
為31h 無(wú)須驗證扇區是否準備好而直接寫(xiě)扇區
為32h 嘗試寫(xiě)長(cháng)扇區
為33h 無(wú)須驗證扇區是否準備好而直接寫(xiě)長(cháng)扇區
上面是磁盤(pán)0的指令,下面是磁盤(pán)1的
171H 1號硬盤(pán)錯誤寄存器
172H 1號硬盤(pán)數據扇區計數
173H 1號硬盤(pán)扇區數
174H 1號硬盤(pán)柱面(低字節)
175H 1號硬盤(pán)柱面(高字節)
176H 1號硬盤(pán)驅動(dòng)器/磁頭寄存器
177H 1號硬盤(pán)狀態(tài)寄存器
2、操作
知道硬盤(pán)的IO操作指令了,下面就是如何在LabVIEW里去實(shí)現這些指令了。這方面LabVIEW提供了現成的操作指令。他們就是讀端口和寫(xiě)端口。

本文引用地址:http://dyxdggzs.com/article/201701/336580.htm

接下來(lái)的工作就很簡(jiǎn)單了。大致流程就是下面這樣了:
2.1等待硬盤(pán)就緒
2.2發(fā)送命令
; 如果向主控制發(fā)送命令,則端口為 1f0h-1f7h
; 如果向副控制發(fā)送命令,則端口為 170h-177h
; 1f6h 如果要檢測的設備為該IDE接口的主(MASTER)設備,
那么發(fā)送 a0,如果為從那么發(fā)送 b0
; 1f7h 如果要檢測的設備為 ATA 設備那么發(fā)送 ec
如果為 ATAPI 設備那么發(fā)送 a1
2.3等待硬盤(pán)就緒
2.4將返回信息讀回
; 注意一定要讀滿(mǎn) 100h 個(gè)字長(cháng)。也就是寄存器中的所有信息
2.5返回的信息中,型號、序列號、版本號為字形式
; 需要整理到字符串的形式
3、代碼及前面板



注意:此程序只在XP下對并口硬盤(pán)做了測試。對串口(SATA)硬盤(pán)的測試失敗。VISTA下由于安全原因可能會(huì )被禁止,請將程序保護的選項去除。這個(gè)沒(méi)有詳細測試,希望安裝了VISTA系統的朋友測試一下,把結果共享出來(lái)。
上面圖即為程序的全部代碼。



關(guān)鍵詞: LabVIEW硬盤(pán)序列

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>