


下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、483磁盤(pán)I/O API函數(shù)應(yīng)用一實(shí)習(xí)要求本實(shí)習(xí)著重于了解磁盤(pán)的物理組織,以及如何通過(guò)用戶態(tài)的程序直接調(diào)用磁盤(pán)I/O API 函數(shù)(DeviceloControl )根據(jù)輸入的驅(qū)動(dòng)器號(hào)讀取驅(qū)動(dòng)器中磁盤(pán)的基本信 息,在Windows2000環(huán)境進(jìn)行實(shí)習(xí)。二相矢的API介紹1 獲取磁盤(pán)的基本信息的磁盤(pán)I/O API函數(shù)DeviceloControl格式如下:BOOL DeviceloControl( HANDLE hDevice,DWORD dwioControlCode,LPVOID IpInBuffer,DWORD nlnBufferSize,LPVOID IpOutBuffer,DWORD
2、nOutBufferSize,LPDWORD IpBytesReturned,LPOVERLAPPED IpOverlapped ); hDevice :所要進(jìn)行操作的設(shè)備的句 柄,它通過(guò)調(diào)用CreateFile函數(shù)來(lái)獲得。 dwioControlCode :指定操作的控制代碼。這個(gè)值用來(lái) 辨別將要執(zhí)行的指定的操作,以及對(duì)哪一種設(shè)備進(jìn)行操作。對(duì)磁盤(pán)應(yīng)設(shè)置為IOCTL_DISK_GET_DRIVE_GEOMETRYJpInBufer :操作所要的輸入數(shù)據(jù)緩沖區(qū)指針,NULL表示不需要輸入數(shù)據(jù)。 nInBufferSize :指定IpInBuffer所指向的緩沖區(qū)的大小(以字節(jié)為單位)。.IpOu
3、tBuffer :接收操作輸岀的數(shù)據(jù)緩沖區(qū)指針,NULL表示操作沒(méi)有產(chǎn)生輸出數(shù)據(jù)。輸出數(shù)據(jù)的緩沖區(qū)要足夠大,對(duì)磁盤(pán)它采用固定的數(shù)據(jù)結(jié)構(gòu)DISK.GEOMETRY格式如下:struct DISK_GEOMETRY unsigned bytesPerSector ; unsigned sectorsPerTrack ;unsigned heads ;unsigned cylinders; nOutBufferSize :指定IpOutBuffer所指向的緩沖區(qū)的大小(以字節(jié)為單位)。 IpBytesReturned : 指向一個(gè)變量,它接收IpOutBuffer所指的緩沖區(qū)儲(chǔ)存的數(shù)據(jù)個(gè)數(shù)。.IpO
4、verlapped :指向一個(gè) OVERLAPPE 纟吉構(gòu)。返回值:如果函數(shù)調(diào)用成功,返回值是一個(gè)非0值。如果函數(shù)調(diào)用失敗GetLastError函數(shù)來(lái)獲得 相尖的錯(cuò)誤信息。2.建立文件或打開(kāi)一個(gè)已存在文件API函數(shù)CreateFile該函數(shù)用來(lái)創(chuàng)建或打開(kāi)下列對(duì)象(文件、管 道、目錄、由M牛插口、控制臺(tái)、通信資源、磁盤(pán)設(shè)備等)并返回一個(gè)用于讀取該對(duì)象的句柄。HANDLE CreateFile ( LPCTSTR IpFilename , DWORD dwDesiredAccess,DWORD dwShareMode, LPSECURITY_ATTRIBUTES IpSecurityAttrib
5、utes, DWORD dwCreationDisposition , DWORD dwFlagsAndAttributes,HANDLE hTemplateFile );JpFileName :指向一個(gè)以NULL結(jié)束的字符串的指針,該字符串用于創(chuàng)建或打開(kāi)對(duì)象、指定對(duì)象 名。dwDesiredAccess :指定對(duì)對(duì)象的訪問(wèn)類型,一個(gè)應(yīng)用程序可以得到讀、寫(xiě)、讀寫(xiě)或設(shè)備查詢?cè)L問(wèn) 等類型,此參數(shù)可以為下列值的任意一個(gè)組合值:0:指定對(duì)象的查詢?cè)L問(wèn)權(quán)限,一個(gè)應(yīng)用程序可以不通過(guò)訪問(wèn)設(shè)備來(lái)查詢?cè)O(shè)備屬性。 GENERIC_READ指定對(duì)象的讀訪問(wèn),可以讀文件的數(shù)據(jù)且可移動(dòng)文件中的指針。 GENERIC_W
6、RITE指定對(duì)象的寫(xiě)訪問(wèn),可以寫(xiě)文件的數(shù)據(jù)且可以移動(dòng)文件指針,寫(xiě)訪問(wèn) GENERIC_WRIT 要與 GENERIC_REA 聯(lián)合使用。.dwShoreMode:設(shè)成 NULL 即可。.IpSecurityAttributes :設(shè)成 NULL 即可。-dwCreationDisposition:指定對(duì)存在的文件采取哪種措施,且當(dāng)文件不存在時(shí)采用哪種措施,此函數(shù)必須是下列值中的一個(gè):,CREAT_NEW創(chuàng)建一個(gè)新文件,如果文件存在,則函數(shù)調(diào)用失敗。,CREAT_ALWAYS創(chuàng)建一個(gè)新文件,如果文件存在,函數(shù)重寫(xiě)文件且清空現(xiàn)有屬性。OPEN_EXISTIN : G打開(kāi)文件,如果文件不存在,則函數(shù)
7、調(diào)用失敗。,OPEN_ALWAYS如果文件存在,則打開(kāi)文件。如果文件不存在,則創(chuàng)建一個(gè)新文件。,TRUNCATE_EXISTING 丁開(kāi)文件,一旦文件打開(kāi),就被刪截掉,從而使文件的大小為0字節(jié),調(diào)用函數(shù)必須用GENERIC_WRIT訪問(wèn)來(lái)打開(kāi)文件,如果文件不存在,則函數(shù)調(diào)用失敗。dwFlagsAndAttributes :指定文件屬性和標(biāo)志,該參數(shù)可取很多種組合,以下示三種:.FILE_FLAG_OVERLAPPED旨導(dǎo)系統(tǒng)對(duì)對(duì)象進(jìn)行初始化,以便操作有足夠的時(shí)間來(lái)處理返 回ERROR_IO_PENDINGi完成操作時(shí),指定事件被設(shè)置為發(fā)信號(hào)狀態(tài)。.FILE_FLAG_NO_BUFFERING引
8、導(dǎo)系統(tǒng)打開(kāi)沒(méi)有瞬間緩沖或緩存的文件,當(dāng)與 FILE_FLAG_OVERLAPPE結(jié)合時(shí),標(biāo)志給出最大的按時(shí)間順序的操作,因?yàn)镮/O不依靠?jī)?nèi)存管理器的時(shí)間順序的操作,但是,因?yàn)閿?shù)據(jù)沒(méi)有在緩存中,一些I/O操作將長(zhǎng)一些。.FILE_FLAG_SEQUENTIASCAN表明文件從開(kāi)頭到結(jié)尾按順序被訪問(wèn)。使用它,系統(tǒng)可優(yōu)化 文件緩存。訪問(wèn)方式讀大文件的應(yīng)用程序,指定此標(biāo)志可以增加它的性能。.hTemplateFile :設(shè)成 NULL 即可。返回值:如果函數(shù)調(diào)用成功,返回值為指向指定文件的打開(kāi)句柄;如果函數(shù)調(diào)用失敗,返回值為 INVALID_HANDLE_VALUE三參考源代碼:SoftDisklo-
9、1.cpp#inelude vwindows.h>#include <iostream.h>#include <winioctl.h>#inelude <string.h>struct Disk /尖于Disk結(jié)構(gòu)的定義 HANDLE handle;DISK_GEOMETRY diskjnfo;;Disk disk;HANDLE Floppy;static _int64 sector;bool flag;Disk physicDisk(char driverLetter);void main(void)char DriverLetter ;選擇要查看的
10、磁盤(pán)cout« H請(qǐng)輸入磁盤(pán)號(hào):a/c" «endl ; cin>>DriverLetter ;/disk = physicDisk(DriverLetter)Disk physicDisk(char driverLetter) /flag = true ;DISK_GEOMETRY* temp = new DISK_GEOMETR ; Ychar device9 = “.c:“ ;device4 = driverLetter ;Floppy = CreateFile( device,/將要打開(kāi)的驅(qū)動(dòng)器名GENERIC_READ,/存取的權(quán)限FILE_
11、SHARE_READ | FILE_SHARE_WRITE, /共享的權(quán)限NULL, /默認(rèn)屬性位OPEN_EXISTING, /創(chuàng)建驅(qū)動(dòng)器的方式0,所創(chuàng)建的驅(qū)動(dòng)器的屬性NULL); 指向模板文件的句柄if ( GetLastError() = ERROR_ALREADY_EXISTS )/如打開(kāi)失敗,返回錯(cuò)誤代碼cout«"不能打開(kāi)磁盤(pán)"«endl : cout«GetLastError()«endl ; flag = false ; return disk ;DWORD bytereturned ;BOOL Result ;dis
12、k.handle = Floppy ;Result = DeviceloControl ( Floppy,IOCTL DISK GET DRIVE GEOMETRY,NULL,0,temp,sizeof(*temp)5& bytereturned,(LPOVERLAPPED)NULL);if(!Result)/如果失敗,返回錯(cuò)誤代碼cout«"打開(kāi)失敗” vvendl ;cout«"錯(cuò)誤代碼為:"«GetLastError()«endl :flag = false ;return disk ;)disk.diskjn
13、fo = *temp ; /輸出整個(gè)物理磁盤(pán)的信息cout«driverLetter«" 盤(pán)有:H«endl ;coutvv” 柱面數(shù)為:"“(unsigned long)disk.disk_info.Cylinders.QuadPart«endl cout« "每柱面的磁道數(shù)為:"vvdisk.disk_info.TracksPerCylindervvendl ;cout« "每磁道的扇區(qū)數(shù)為:”vvdisk.disk_info.SectorsPe訂rackvvendl ;cout&
14、#171; "每扇區(qū)的字節(jié)數(shù)為:”vvdisk.disk_info.BytesPerSectorvvendl;sector = disk.diskjnfo.Cylinders.QuadPart* (disk.diskJnfo.TracksPerCylinder)*(disk.diskjnfo.SectorsPerTrack);double DiskSize =(double)disk.disk_info.Cylinders.QuadPart * /(disk.diskJnfo.TracksPerCylinder) *(disk.diskjnfo.SectorsPerTrack) *(disk.diskjnfo.BytesPerSector) : cout«driverLetter«"盤(pán)所在磁盤(pán)總共有"«(long)sector«"個(gè)扇區(qū)"«endl ; cout«n 磁盤(pán)大為:"«DiskSize/(1024*1024)«"MB "«end
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 娛樂(lè)活動(dòng)策劃執(zhí)行規(guī)范
- 皺紋的形成和護(hù)理
- 腦梗死肢體活動(dòng)障礙的個(gè)案護(hù)理
- DB43-T 2878-2023 捕食性食蚜蠅繁育技術(shù)規(guī)程
- 名片制作流程
- 財(cái)務(wù)科入職培訓(xùn)
- 麻醉進(jìn)修試題及答案
- 幼兒園小班美術(shù)《一串紅》教案
- 生活技能試題及答案
- 福建高考試題及答案
- 星載終端抗輻照設(shè)計(jì)-洞察及研究
- 2025年湖南省中考生物試卷真題(含標(biāo)準(zhǔn)答案)
- 2025年河北省物流產(chǎn)業(yè)集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 2025年衛(wèi)生系統(tǒng)招聘考試(護(hù)理學(xué)專業(yè)知識(shí))新版真題卷(附詳細(xì)解析)
- 吉林省“BEST合作體”2023?2024學(xué)年高一下學(xué)期期末考試 數(shù)學(xué)試題(含解析)
- 2025年煤礦從業(yè)人員安全培訓(xùn)考試題庫(kù)
- 津山鐵路立交橋試轉(zhuǎn)體施工準(zhǔn)備匯報(bào)材料(47頁(yè))
- 美的集團(tuán)公司分權(quán)手冊(cè)
- 建筑行業(yè)安徽某抽水蓄能電站人工砂石加工系統(tǒng)工程施工技術(shù)標(biāo)書(shū)
- 通風(fēng)與空調(diào)工程施工工藝流程圖
- 協(xié)議回款承諾書(shū)
評(píng)論
0/150
提交評(píng)論