使用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下读写绝对扇区的方法的更多相关文章
- 用Windows API函数(CreateFile/ReadFile/WriteFile/CloseHandle)完成文件拷贝程序(初级版)
文件拷贝程序 程序类型:Console 参数:源文件名 目的文件名 要求:1.只能使用Windows API函数(CreateFile/ReadFile/WriteFile/CloseHandle ...
- UWP 使用Windows.Web.Http命名空间下的HttpClient使用post方法,上传图片服务器
1.从相册里面选取图片 /// <summary> /// 1.1 从相册里面选取图片 /// </summary> /// <param name="send ...
- 使用API进行文件读写——CreateFile,ReadFile,WriteFile等
看了这个帖子: http://www.vbgood.com/thread-99249-1-1.html 就写了一个使用API读写文件的简单类,苦力活. 演示代码在附件里. '********* ...
- CreateFile,ReadFile等API详解(或者说MSDN的翻译)
一.*****CreateFile***** 这个函数可以创建或打开一个对象的句柄,凭借此句柄就可以控制这些对象:控制台对象.通信资源对象.目录对象(只能打开).磁盘设备对象.文件对象.邮槽对象.管道 ...
- 不同WINDOWS平台下磁盘逻辑扇区的直接读写
不同WINDOWS平台下磁盘逻辑扇区的直接读写 关键字:VWIN32.中断.DeviceIoControl 一.概述 在DOS操作系统下,通过BIOS的INT13.DOS的INT25(绝对读).INT ...
- 有关WINDOWS XP登录密码的几种方法
网上关于破解WINDOWS XP登录密码的几种方法很多,但许多根本不行.我现在总结自己试过几种,这几种方法其实均比较菜的,但可行的.WINDOWS XP登录是由SAM 文件管理的,总体来说“山姆大叔” ...
- Linux和windows 查看程序、进程的依赖库的方法
Linux: 1. 利用ldd查看可执行程序的依赖库 [root@~]# ldd /usr/local/php/bin/php linux-vdso.so.1 => (0x00007ff ...
- [原创]使用GCC创建 Windows NT 下的内核DLL
原文链接:使用GCC创建 Windows NT 下的内核DLL 在温习<<Windows 2000 Driving>>分层驱动程序一章的时候,看到了关于紧耦合驱动连接方式,这种 ...
- Windows NT 之父 - David Cutler
David Cutler,大卫·卡特勒,一位传奇程序员,1988年去微软前号称硅谷最牛的内核开发人员,是VMS和Windows NT的首席设计师,被人们成为“操作系统天神”.他曾供职于杜邦.DEC等公 ...
随机推荐
- HDU [P1150] Machine Schedule
二分图匹配求最小点覆盖 把两个机器作为两个集合,把每个任务当做边建图.那么所求的就是二分图的最小点覆盖. 但是最开始WA了,原因在于,题目要求的是变换的次数,也就是与0连的边需要删去. #includ ...
- 洛谷 [p1196] 银河英雄传说
所谓带权并查集 本题所求的不止是两个编号之间是否有关系,还要求两个编号之间有什么关系,这就要求我们维护多个数组,fa[]数组维护两个编号之间的连通性,dis[]维护编号为i的战舰到fa[i]之间的距离 ...
- java windows自动化-mail自动发邮件
本文旨在让测试人员了解如何发邮件 发邮件的话,最简单的事是直接手动发邮件,但是在自动化测试中,应做到让机器或者代码来自动发送邮件,笔者大概了解以下几种方法,总有一款口味适合你:1java代码来做下面即 ...
- 搭建SS服务器
体验: http://ss.ishadowx.com/ centos7 安装shadowsocks客户端 http://blog.csdn.net/guyan0319/article/details/ ...
- CentOS下安装XAMPP详细教程(转)
[原文]http://blog.csdn.net/hel12he/article/details/49781813 现在PHP的集成运行环境越来越多,个人比较喜欢XAMPP,更新速度快,好用,安装便捷 ...
- 归并排序Merge Sort
//C语言实现 void mergeSort(int array[],int first, int last) { if (first < last)//拆分数列中元素只剩下两个的时候,不再拆分 ...
- [记]WIndow/Linux 获取本机(全部)IPv4、IPv6、MAC地址方法 (C/C++)
Linux 获取本机IP.MAC地址用法大全 //#include <sys/types.h> #include <ifaddrs.h> #include <sys/io ...
- 微信小程序Md5加密(utf-8汉字无影响)
微信小程序不让使用第三方jqMD5 只好改原生js咯 废话不多说直接贴代码 其实就是将原生function调用改为 module.exports = md5; 文中 红色标注 使用方法 将md5.js ...
- hplus--H+ V2.3 (中文版)
一个高大上的后台模板 演示地址 http://www.zi-han.net/theme/hplus/?v=4.1 下载地址 http://download.csdn.net/detail/u01197 ...
- Mysql--Database Exception (#42) 数据库错误
mysql是phpstudy中的mysql,出现这个错误八成是php.ini中没有设置mysql.sock 使用探针或者phpinfo查看php.ini的位置. sudo find / -name m ...