其他语言

本类阅读TOP10

·基于Solaris 开发环境的整体构思
·使用AutoMake轻松生成Makefile
·BCB数据库图像保存技术
·GNU中的Makefile
·射频芯片nRF401天线设计的分析
·iframe 的自适应高度
·BCB之Socket通信
·软件企业如何实施CMM
·入门系列--OpenGL最简单的入门
·WIN95中日志钩子(JournalRecord Hook)的使用

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
使用CreateFile, ReadFile, WriteFile在Windows NT/2000/XP下读写绝对扇区的方法

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

也就是在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);
}




相关文章

相关软件