文档章节

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

rise-worlds
 rise-worlds
发布于 2016/06/20 13:38
字数 425
阅读 0
收藏 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

上一篇: D3D中的光照(4)
下一篇: 精妙SQL
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

没有更多内容

加载失败,请刷新页面

加载更多

浅谈 Spark 的多语言支持

作者:郑锴,花名铁杰,阿里巴巴高级技术专家,Apache Hadoop PMC,Apache Kerby 创立者。深耕分布式系统开发和开源大数据多年,先后专注在安全,存储和计算领域。之前在 Intel,目前转战阿里...

阿里云云栖社区
30分钟前
2
0
Linux运维常见的硬件及系统问题

一、服务器常见故障和现象 1、有关服务器无法启动的主要原因 : ①市电或电源线故障(断电或接触不良) ②电源或电源模组故障 ③内存故障(一般伴有报警声) ④CPU故障(一般也会有报警声) ⑤主板故...

寰宇01
38分钟前
0
0
Confluence 6 针对 'unmigrated-wiki-markup' 宏重新尝试合并

在签名的章节中,我们主要是针对没有完全合并完成余下的为合并内容的异常处理。最常见的情况是内容以及被合并了,但是页面使用 wiki 标记的内容没有被合并,通常这些 wiki 标记的内容使用了 ...

honeymoose
48分钟前
2
0
ubuntu 18.04桌面版启动错误: Unable to mount root fs on unknown-block(0,0)

问题出现过程 *** 我的环境: visualbox 虚拟机 Ubuntu 18.04 桌面版 IP:192.168.1.186 (最初从 192.168.1.185 克隆过来的) 20190423 晚上准备安装一个 UNlet standalone 和 一个 Eclips...

wwzzhh166
49分钟前
1
0
fescar select for update 读隔离级别实现

/* * Copyright 1999-2018 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in complian......

xiaomin0322
52分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部