这里举一个制作软盘镜像.doc

上传人:大米 文档编号:558880698 上传时间:2023-07-26 格式:DOC 页数:5 大小:48.01KB
返回 下载 相关 举报
这里举一个制作软盘镜像.doc_第1页
第1页 / 共5页
这里举一个制作软盘镜像.doc_第2页
第2页 / 共5页
这里举一个制作软盘镜像.doc_第3页
第3页 / 共5页
这里举一个制作软盘镜像.doc_第4页
第4页 / 共5页
这里举一个制作软盘镜像.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《这里举一个制作软盘镜像.doc》由会员分享,可在线阅读,更多相关《这里举一个制作软盘镜像.doc(5页珍藏版)》请在金锄头文库上搜索。

1、这里举一个制作软盘镜像文件,功能类似于“DISKCOPY”的例子。 本例实现其功能的核心代码如下: / 打开磁盘HANDLE OpenDisk(LPCTSTR filename) HANDLE hDisk; / 打开设备 hDisk = :CreateFile(filename, / 文件名 GENERIC_READ | GENERIC_WRITE, / 读写方式 FILE_SHARE_READ | FILE_SHARE_WRITE, / 共享方式 NULL, / 默认的安全描述符 OPEN_EXISTING, / 创建方式 0, / 不需设置文件属性 NULL); / 不需参照模板文件 re

2、turn hDisk; / 获取磁盘参数BOOL GetDiskGeometry(HANDLE hDisk, PDISK_GEOMETRY lpGeometry) DWORD dwOutBytes; BOOL bResult; / 用IOCTL_DISK_GET_DRIVE_GEOMETRY取磁盘参数 bResult = :DeviceIoControl(hDisk, / 设备句柄 IOCTL_DISK_GET_DRIVE_GEOMETRY, / 取磁盘参数 NULL, 0, / 不需要输入数据 lpGeometry, sizeof(DISK_GEOMETRY), / 输出数据缓冲区 &dwO

3、utBytes, / 输出数据长度 (LPOVERLAPPED)NULL); / 用同步I/O return bResult; / 从指定磁道开始读磁盘BOOL ReadTracks(HANDLE hDisk, PDISK_GEOMETRY lpGeometry, LPVOID pBuf, DWORD dwStartCylinder, DWORD dwCylinderNumber) DWORD VirtBufSize; DWORD BytesRead; / 大小 VirtBufSize = lpGeometry-TracksPerCylinder * lpGeometry-SectorsPer

4、Track * lpGeometry-BytesPerSector; / 偏移 :SetFilePointer(hDisk, VirtBufSize*dwStartCylinder, NULL, FILE_BEGIN); return :ReadFile(hDisk, pBuf, VirtBufSize*dwCylinderNumber, &BytesRead, NULL); / 从指定磁道开始写磁盘BOOL WriteTracks(HANDLE hDisk, PDISK_GEOMETRY lpGeometry, LPVOID pBuf, DWORD dwStartCylinder, DWOR

5、D dwCylinderNumber) DWORD VirtBufSize; DWORD BytesWritten; / 大小 VirtBufSize = lpGeometry-TracksPerCylinder * lpGeometry-SectorsPerTrack * lpGeometry-BytesPerSector; / 偏移 :SetFilePointer(hDisk, VirtBufSize*dwStartCylinder, NULL, FILE_BEGIN); return :WriteFile(hDisk, pBuf, VirtBufSize*dwCylinderNumber

6、, &BytesWritten, NULL); / 从指定磁道开始格式化磁盘BOOL LowLevelFormatTracks(HANDLE hDisk, PDISK_GEOMETRY lpGeometry, DWORD dwStartCylinder, DWORD dwCylinderNumber) FORMAT_PARAMETERS FormatParameters; PBAD_TRACK_NUMBER lpBadTrack; DWORD dwOutBytes; DWORD dwBufSize; BOOL bResult; FormatParameters.MediaType = lpGe

7、ometry-MediaType; FormatParameters.StartCylinderNumber = dwStartCylinder; FormatParameters.EndCylinderNumber = dwStartCylinder + dwCylinderNumber - 1; FormatParameters.StartHeadNumber = 0; FormatParameters.EndHeadNumber = lpGeometry-TracksPerCylinder - 1; dwBufSize = lpGeometry-TracksPerCylinder * s

8、izeof(BAD_TRACK_NUMBER); lpBadTrack = (PBAD_TRACK_NUMBER) new BYTEdwBufSize; / 用IOCTL_DISK_FORMAT_TRACKS对连续磁道进行低级格式化 bResult = :DeviceIoControl(hDisk, / 设备句柄 IOCTL_DISK_FORMAT_TRACKS, / 低级格式化 &FormatParameters, sizeof(FormatParameters), / 输入数据缓冲区 lpBadTrack, dwBufSize, / 输出数据缓冲区 &dwOutBytes, / 输出数据长

9、度 (LPOVERLAPPED)NULL); / 用同步I/O delete lpBadTrack; return bResult; / 将卷锁定BOOL LockVolume(HANDLE hDisk) DWORD dwOutBytes; BOOL bResult; / 用FSCTL_LOCK_VOLUME锁卷 bResult = :DeviceIoControl(hDisk, / 设备句柄 FSCTL_LOCK_VOLUME, / 锁卷 NULL, 0, / 不需要输入数据 NULL, 0, / 不需要输出数据 &dwOutBytes, / 输出数据长度 (LPOVERLAPPED)NUL

10、L); / 用同步I/O return bResult; / 将卷解锁BOOL UnlockVolume(HANDLE hDisk) DWORD dwOutBytes; BOOL bResult; / 用FSCTL_UNLOCK_VOLUME开卷锁 bResult = :DeviceIoControl(hDisk, / 设备句柄 FSCTL_UNLOCK_VOLUME, / 开卷锁 NULL, 0, / 不需要输入数据 NULL, 0, / 不需要输出数据 &dwOutBytes, / 输出数据长度 (LPOVERLAPPED)NULL); / 用同步I/O return bResult; /

11、 将卷卸下/ 该操作使系统重新辨识磁盘,等效于重新插盘BOOL DismountVolume(HANDLE hDisk) DWORD dwOutBytes; BOOL bResult; / 用FSCTL_DISMOUNT_VOLUME卸卷 bResult = :DeviceIoControl(hDisk, / 设备句柄 FSCTL_DISMOUNT_VOLUME, / 卸卷 NULL, 0, / 不需要输入数据 NULL, 0, / 不需要输出数据 &dwOutBytes, / 输出数据长度 (LPOVERLAPPED)NULL); / 用同步I/O return bResult;将软盘保存成镜像文件的步骤简单描述为:1、创建空的镜像文件。2、调用OpenDisk打开软盘。成功转3,失败转8。3、调用LockVolume将卷锁定。成功转4,失败转7。4、调用GetDiskGeometry获取参数。成功转5,失败转6。5、将磁盘参数写入镜像文件作为文件头。调用ReadTracks按柱面读出数据,保存在镜像文件中

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号