使用CreateFile, ReadFile, WriteFile在Windows NT/2000/XP下读写绝对扇区的方法

原创 2004年08月16日 21:27:00

也就是在CreateFile的时候打开文件名指定:  “//./Device”就可以了.

因为代码比较短, 所以我不做注释, 相信大家看代码就能明白意思了.

另外这里读写的都是软盘A盘第0扇区, 如果想读写其他的扇区, 那么可以使用API SetFilePointer.

读扇区的方法(下面的代码演示从A盘的第0扇区读出数据, 写入到文件BOOT.BIN中):

#include <windows.h>
#include <assert.h>
#include <stdio.h>

void main()
{
    HANDLE hFile;
    hFile = CreateFile("////.//A:",
                       GENERIC_READ,
                       FILE_SHARE_READ,
                       NULL,
                       OPEN_EXISTING,
                       0,
                       NULL);
    assert(hFile && "CreateFile failed!");

    PBYTE pBuffer = (PBYTE)malloc(512);
    assert(pBuffer && "Allocate memory failed!");
    DWORD dwLen;
    ReadFile(hFile, pBuffer, 512, &dwLen, NULL);
  
    FILE * fp;
    fp = fopen("boot.bin", "wb");
    assert(fp && "Open file failed!");
    fwrite(pBuffer, 512, 1, fp);
    fclose(fp);

    CloseHandle(hFile);

    free(pBuffer);
}

那么相应的, 写扇区的方法的就是这样的咯(以下代码演示从BOOT.BIN中读出数据写入到A盘第0扇区):

#include <windows.h>
#include <assert.h>
#include <stdio.h>

void main()
{
    HANDLE hFile;
    hFile = CreateFile("////.//A:",
                       GENERIC_WRITE,
                       FILE_SHARE_WRITE,
                       NULL,
                       OPEN_EXISTING,
                       0,
                       NULL);
    assert(hFile && "CreateFile failed!");

    PBYTE pBuffer = (PBYTE)malloc(512);
    assert(pBuffer && "Allocate memory failed!");
       
    FILE * fp;
    fp = fopen("boot.bin", "rb");
    assert(fp && "Open file failed!");
    fread(pBuffer, 512, 1, fp);
    fclose(fp);
   
    DWORD dwLen;
    WriteFile(hFile, pBuffer, 512, &dwLen, NULL);

    CloseHandle(hFile);

    free(pBuffer);
}

[Win32] 直接读写磁盘扇区(磁盘绝对读写)

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处: 正讲着驱动开发呢,这里突然插一篇Win32的博文,其实,还是做引子,上一篇博文“IRP与...
  • zuishikonghuan
  • zuishikonghuan
  • 2016年01月03日 16:31
  • 6437

串口之ReadFile、WriteFile函数详解

BOOL ReadFile(   HANDLE hFile, //文件的句柄   LPVOID lpBuffer, //用于保存读入数据的一个缓冲区   DWORD nNumberOfByte...
  • wangshubo1989
  • wangshubo1989
  • 2015年08月18日 10:17
  • 12967

Windows 异步IO的几种实现方式

Windows上的异步IO有好几种实现方式。 设备内核对象 这是最简单的一种了,直接用设备内核对象的状态。比如文件句柄,线程句柄等等,这些内核对象都是有一个触发状态的,比如当一个线程结束后...
  • zj510
  • zj510
  • 2015年03月26日 18:00
  • 7162

使用API进行文件读写——CreateFile,ReadFile,WriteFile等

原文:simple and easy——API文件读写类http://www.vbgood.com/thread-102870-1-1.html看了这个帖子: http://www.vbgood.c...
  • dahual
  • dahual
  • 2011年04月16日 17:21
  • 4257

VC++信息安全编程(13)Windows2000/xp/vista/7磁盘扇区读写技术

有些时候,我们读取磁盘文件,会被hook.我们读到的可能并非实际的文件。 我们直接读取磁盘扇区获取数据。 实现磁盘数据的读写,不依赖WindowsAPI。   [cpp] view p...
  • thanklife
  • thanklife
  • 2017年10月20日 17:26
  • 175

VC++信息安全编程(13)Windows2000/xp/vista/7磁盘扇区读写技术

有些时候,我们读取磁盘文件,会被hook.我们读到的可能并非实际的文件。我们直接读取磁盘扇区获取数据。实现磁盘数据的读写,不依赖WindowsAPI。 void CSectorEdit2000Dlg:...
  • yincheng01
  • yincheng01
  • 2011年12月15日 08:04
  • 4413

Windows API应用:CreateFile,WriteFile,ReadFile

CreateFile 跟 fopen 不同,打开文件时不区分 文本方式 或 二进制 方式 ReadFile 或 WriteFile 都是对二进制数据进行操作 HANDLE WINAPI Creat...
  • KAlbertLee
  • KAlbertLee
  • 2016年09月19日 17:52
  • 464

不同WINDOWS平台下磁盘逻辑扇区的直接读写

不同WINDOWS平台下磁盘逻辑扇区的直接读写   关键字:VWIN32、中断、DeviceIoControl   一、概述    在DOS操作系统下,通过BIOS的INT13、DOS的INT2...
  • thanklife
  • thanklife
  • 2017年10月20日 17:23
  • 90

[Win32]ReadFile/WriteFile 的文件同步读写

先来看看我很早之前写的两个函数,他们实现了简单的直接读写文件,读文件是把文件一股脑都读进来,写文件是覆盖原来的文件写入 //参数:文件名,输出的字符串指针 //返回值:读取的大小 DWORD MyRe...
  • zuishikonghuan
  • zuishikonghuan
  • 2015年07月17日 14:15
  • 3122

CreateFile,ReadFile,WriteFile,DeviceIoControl,CloseHandle .

一、*****CreateFile*****     这个函数可以创建或打开一个对象的句柄,凭借此句柄就可以控制这些对象: 控制台对象、通信资源对象、目录对象(只能打开)、磁盘设备对象、文件对象、...
  • HIQRF220
  • HIQRF220
  • 2012年10月12日 16:39
  • 565
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用CreateFile, ReadFile, WriteFile在Windows NT/2000/XP下读写绝对扇区的方法
举报原因:
原因补充:

(最多只允许输入30个字)