我是靠谱客的博主 眼睛大大地,最近开发中收集的这篇文章主要介绍使用CreateFile, ReadFile, WriteFile在Windows NT/2000/XP下读写绝对扇区的方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

最后

以上就是眼睛大大地为你收集整理的使用CreateFile, ReadFile, WriteFile在Windows NT/2000/XP下读写绝对扇区的方法的全部内容,希望文章能够帮你解决使用CreateFile, ReadFile, WriteFile在Windows NT/2000/XP下读写绝对扇区的方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部