转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
用VB对磁盘的物理扇区数据读/写操作         ★★★★

用VB对磁盘的物理扇区数据读/写操作

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1543 更新时间:2009/4/23 15:43:29

Option Explicit

''''/////////////////////////////////////////
''''// 对磁盘的物理扇区数据读/写操作
''''// last update: 2004-8-7
''''// Kwanhong Young
''''/////////////////////////////////////////


''''//file system
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Long) As Long ''''//declare has changed
Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Long) As Long ''''//declare has changed
Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long

Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000

Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const OPEN_EXISTING = 3

Private Const INVALID_HANDLE_VALUE = -1

''''//file seek
Private Const FILE_BEGIN = 0
Private Const FILE_CURRENT = 1
Private Const FILE_END = 2

Private Const ERROR_SUCCESS = 0&

''''//device io control
Private Declare Function DeviceIoControl Lib "kernel32" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, ByVal lpOverlapped As Long) As Long

Private Const IOCTL_DISK_GET_DRIVE_GEOMETRY As Long = &H70000   ''''458752
Private Const IOCTL_STORAGE_GET_MEDIA_TYPES_EX  As Long = &H2D0C04
Private Const IOCTL_DISK_FORMAT_TRACKS As Long = &H7C018
Private Const FSCTL_LOCK_VOLUME As Long = &H90018
Private Const FSCTL_UNLOCK_VOLUME As Long = &H9001C
Private Const FSCTL_DISMOUNT_VOLUME As Long = &H90020
Private Const FSCTL_GET_VOLUME_BITMAP = &H9006F

''''//type
Private Type LARGE_INTEGER
    lowpart As Long
    highpart As Long
End Type

Private Enum MEDIA_TYPE
    Unknown
    F5_1Pt2_512
    F3_1Pt44_512
    F3_2Pt88_512
    F3_20Pt8_512
    F3_720_512
    F5_360_512
    F5_320_512
    F5_320_1024
    F5_180_512
    F5_160_512
    RemovableMedia
    FixedMedia
End Enum

Private Type DISK_GEOMETRY
    Cylinders           As LARGE_INTEGER
    MediaType           As MEDIA_TYPE
    TracksPerCylinder   As Long
    SectorsPerTrack     As Long
    BytesPerSector      As Long
End Type

''''//private vars
Private hDisk           As Long             ''''disk handle
Private lpGeometry      As DISK_GEOMETRY    ''''disk info
Private lBufferSize     As Long             ''''the buffer size of read/write

Public Function OpenDisk(ByVal FileName As String) As Boolean
''''// 打开磁盘
    hDisk = CreateFile(FileName, _
                        GENERIC_READ Or GENERIC_WRITE, _
                        FILE_SHARE_READ Or FILE_SHARE_WRITE, _
                        ByVal 0&, _
                        OPEN_EXISTING, _
                        0, _
                        0)
    OpenDisk = Not (hDisk = INVALID_HANDLE_VALUE)
End Function

Public Function CloseDisk() As Boolean
''''//关闭磁盘
    CloseDisk = CloseHandle(hDisk)
End Function

Public Function GetDiskGeometry() As Boolean
''''//获取磁盘参数
    Dim dwOutBytes      As Long
    Dim bResult         As Boolean
   
    bResult = DeviceIoControl(hDisk, _
                                IOCTL_DISK_GET_DRIVE_GEOMETRY, _
                                ByVal 0&, 0, _
                                lpGeometry, Len(lpGeometry), _
                                dwOutBytes, _
                                ByVal 0&)
   
    If bResult Then lBufferSize = lpGeometry.BytesPerSector * lpGeometry.SectorsPerTrack
    GetDiskGeometry = bResult
End Function

Public Sub GetDiskInfo(MediaType As Long, _
                        Cylinders As Long, _
                        TracksPerCylinder As Long, _
                        SectorsPerTrack As Long, _
                        BytesPerSector As Long)
''''//返回磁盘的参数
    MediaType = lpGeometry.MediaType
    Cylinders = lpGeometry.Cylinders.lowpart
    TracksPerCylinder = lpGeometry.TracksPerCylinder
    SectorsPerTrack = lpGeometry.SectorsPerTrack
    BytesPerSector = lpGeometry.BytesPerSector

End Sub

Public Property Get BufferSize() As Long
''''//返回每次读/写的缓冲大小
    BufferSize = lBufferSize
End Property


Public Function LockVolume() As Boolean
''''// 将卷锁定
    Dim dwOutBytes  As Long
    Dim bResult     As Boolean
   
    bResult = DeviceIoControl(hDisk, _
                                FSCTL_LOCK_VOLUME, _
                                ByVal 0&, 0, _
                                ByVal 0&, 0, _
                                dwOutBytes, _
                                ByVal 0&)
    LockVolume = bResult
End Function


Public Function UnlockVolume() As Boolean
''''// 将卷解锁
    Dim dwOutBytes As Long
    Dim bResult As Boolean
   
    bResult = DeviceIoControl(hDisk, _
                                FSCTL_UNLOCK_VOLUME, _
             

[1] [2]  下一页


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台