文档章节

Windows NT以上系统异步读写硬盘的方法

rise-worlds
 rise-worlds
发布于 2016/06/20 13:38
字数 425
阅读 19
收藏 0

今日整理硬盘无意发现刚学windows编程时写的一段代码,用于在windows下异步读写硬盘用的.
可能网上已经有类似的代码了,小弟在发一次,希望别有人用这做坏事.
打开硬盘有两个东西要知道,第一打开的文件名:\\\\.\\PHYSICALDRIVE0, 0代表第一块硬盘,依次1代表第二块硬盘...第二打开硬盘使用的参数OPEN_EXISTING是不可少的,至于为什么查MSDN.
先把代码发上来大家看看,读写速度还可以几秒就1G了,有空改成完成端口不知道会不会快点.
(注意以下代码不要用\\\\.\\PHYSICALDRIVE0试验,会把硬盘时的第一个G内容写成0,后果可想而知)

 1  #include  < Windows.h >
 2 
 3  VOID CALLBACK MyIOCompletion(DWORD dwErrorCode,
 4                               DWORD dwNumberOfBytesTransfered,
 5                               LPOVERLAPPED lpOverlapped
 6                               );
 7 
 8  BOOL ReadHardDisk( char *  disk);
 9 
10  int  __stdcall WinMain(IN HINSTANCE hInstance, IN HINSTANCE hPrevInstance, IN LPSTR lpCmdLine, IN  int  nShowCmd )
11  {
12       // ReadHardDisk("\\\\.\\PHYSICALDRIVE0");
13      ReadHardDisk( " C:\\a.dat " );         //  如果要试试,先建立文件,要不会出错
14 
15      
16 
17       return   0 ;
18  }
19 
20  VOID CALLBACK MyIOCompletion(DWORD dwErrorCode, DWORD dwNumberOfBytesTransfered, LPOVERLAPPED lpOverlapped )
21  {
22       // TRACE("write disk succeed.");
23  }
24 
25  BOOL ReadHardDisk( char *  disk)
26  {
27      HANDLE hHead;
28 
29      hHead  =  CreateFile(disk, GENERIC_WRITE, FILE_SHARE_WRITE, 
30          NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
31       if  (INVALID_HANDLE_VALUE  ==  hHead)
32      {
33           return  FALSE;
34      }
35 
36      BYTE  * pbWrite  =   new  BYTE[ 1024   *   1024 ];     //  1M
37      OVERLAPPED overlap;
38      
39 
40       for  ( int  i  =   0 ; i  <   1024 ; i ++ )             //  1024 也就是 1G
41      {
42          overlap.Offset  =  ( 1024   *   1024 *  i;
43          overlap.OffsetHigh  =   0 ;
44          overlap.hEvent  =  NULL;
45          WriteFileEx(hHead, pbWrite,  1024   *   1024 & overlap, MyIOCompletion);
46           while (WAIT_IO_COMPLETION  !=  SleepEx( 0 , TRUE))             //  在这里可能加点东西做点别的事情
47          {
48              Sleep( 0 );     //  切换下时钟
49          }
50      }
51 
52      CloseHandle(hHead);
53      delete pbWrite;
54      
55       return  TRUE;
56  }
57 

本文转载自:http://www.cnblogs.com/flying_bat/archive/2007/05/23/757467.html

共有 人打赏支持
rise-worlds

rise-worlds

粉丝 2
博文 1755
码字总数 0
作品 0
深圳
程序员
私信 提问
linux下文件系统、iso挂载

分类: Mount命令: 需要注意的: 1、挂载点必须是一个目录。 2、一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。对于其他操作系统建立的文...

浅水ing
2018/06/26
0
0
安装程序无法创建新的系统分区也无法定位现有分区的解决方法

在安装Windows7时,想必有很多人都安碰到这样的情况吧!在安装界面里选择安装时,却出现“安装程序无法创建新的系统分区,也无法定位现有系统分区” 网上提供的另外解决方法大全: 方法一:有...

江苏-柏灵
2016/10/12
64
0
linux mount -t用法

挂接命令(mount)   首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的。   命令格式:   mount [-t vfstype] [-o options] device dir ...

yzbty23
2016/06/28
41
0
如何解决安装了Windows 7之后找不到原有XP的问题

为了考察Windows 7的安全改进,下了版本号7000的Windows 7测试版,不过安装中遇到了一个问题,把解决方法贴出来以供参考。 测试用机原本安装有Windows XP系统(SP3),由于不想破坏原有的分区...

离子翼
2009/01/19
0
0
linux mount命令的用法详细解析

挂接命令(mount) 首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的。 命令格式:mount [-t vfstype] [-o options] device dir 其中: 1.-t v...

xiaoxin
2016/10/18
24
0

没有更多内容

加载失败,请刷新页面

加载更多

jenkins安装

https://my.oschina.net/u/593517/blog/1797968 jenkins 安装 https://my.oschina.net/u/593517/blog/3028175 GIT 安装 https://my.oschina.net/u/593517/blog/3028179 maven 安装 插件安装 ......

Gm_ning
3分钟前
0
0
小言服务端解决方案-监控

框架保证方向,整体包容细节 为保证服务端运行平稳正常,owner应使得系统应保有相应的监控:系统监控,业务监控。而服务运行的平稳高效是否有保障跟监控粒度又成直接的正比关系。本文仅针对开...

重城重楼
15分钟前
0
0
搜索引擎(Elasticsearch搜索详解)

学完本课题,你应达成如下目标: 掌握ES搜索API的规则、用法。 掌握各种查询用法 搜索API 搜索API 端点地址 GET /twitter/_search?q=user:kimchy GET /twitter/tweet,user/_search?q=user:...

这很耳东先生
39分钟前
6
0
浅谈如何减少GC的次数

GC会stop the world。会暂停程序的执行,带来延迟的代价。所以在开发中,我们不希望GC的次数过多。 本文将讨论如何在开发中改善各种细节,从而减少GC的次数。 (1)对象不用时最好显式置为 Nu...

浮躁的码农
40分钟前
1
0
jpa 自定义返回对象

任何ORM框架都少不了开放自定义sql的问题。jpa自然也不例外,很多场景需要写复杂sql的。 首先定义一个方法签名,然后打上@Query注解。像下面这样,需要注意nativeQuery,这个表示query中的字...

朝如青丝暮成雪
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部