• 使用CreateFile, ReadFile, WriteFile在Windows NT/2000/XP下读写绝对扇区的方法 分类: 磁盘的扇区读写 2015-04-29 10:50 358人阅读 评论(0) 收藏


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

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    jdbc入门
    mysql 各项操作流程
    python中的细小知识点罗列
    Linux之高级指令
    linux之进阶指令
    Linux之基础指令
    STL之适配器
    STL之谓词
    STL之函数对象
    STL之map容器和multimap容器
  • 原文地址:https://www.cnblogs.com/mao0504/p/4706431.html
Copyright © 2020-2023  润新知