开源ext2read代码走读之-在windows下怎样推断有几个硬盘设备?
int get_ndisks()
{
HANDLE hDevice; // handle to the drive to be examined
int ndisks = 0;
char path[20] = {"\\\\.\\PhysicalDrive0"};
do {
//TRACE("NDISKS %s", path);
hDevice = CreateFileA(path, // drive to open
GENERIC_READ, //access mode
FILE_SHARE_READ, // share mode
NULL, // default security attributes
OPEN_EXISTING, // disposition
0, // file attributes
NULL); // don't copy any file's attributes
if(hDevice != INVALID_HANDLE_VALUE)
CloseHandle(hDevice);
ndisks++;
path[17] = (char)('0' + ndisks);
}while(hDevice != INVALID_HANDLE_VALUE);
return ndisks - 1;
}
当中,path为第一个硬盘的设备名。ndisks的值则表示当前存在几个硬盘。
do{}while();中的CreateFileA进行设备的打开。若返回值不为INVALID_HANDLE_VALUE则表示打开成功。那么则使ndisks+1,而path[17]则是硬盘设备的序号中的第18个字符的值,在“\\\\.\\PhysicalDrive0”中相应的字符为0,由于“\\\\.\\PhysicalDrive0”通过转义后的实际字串为:“\\.\PhysicalDrive0”。第一个硬盘的序号为0,第二个为1,依次累加之。
CreateFile这个函数能够创建或打开一个对象的句柄,凭借此句柄就能够控制这些对象:
控制台对象、通信资源对象、文件夹对象(仅仅能打开)、磁盘设备对象、文件对象、邮槽对象、管道对象。
有关CreateFile Function的更详细的说明可进行MS的MSDN进行查询。
中文介绍REC:
http://www.cnblogs.com/transcom/articles/1384946.html
开源ext2read代码走读之-在windows下怎样推断有几个硬盘设备?的更多相关文章
- windows下挂载linux的nfs网络硬盘
挂载命令,速度快 mount \\10.8.200.167\goworkspace z: -o nolock,rsize=1024,wsize=1024,timeo=15 安装步骤 yum insta ...
- Windows下免费、开源邮件服务器hMailServer
Windows下免费.开源邮件服务器hMailServer 一.Windows下搭建免费.开源的邮件服务器hMailServer 二.邮件服务器hMailServer管理工具hMailServer A ...
- windows下的go语言的环境搭建和初探
闲话不说,直入主题. 1.准备工具 a.windows下的Go语言开发安装包 官方下载地址:https://code.google.com/p/go/downloads/list b.Go语言中文官网 ...
- windows下NGINX和PHP配合(FASTCGI)
昨天测试了TOMCAT,今天考查了NGINX. 按网上说的作,比较简单. http://www.cnblogs.com/huayangmeng/archive/2011/06/15/2081337.h ...
- windows下C语言调用系统文件选择对话框
代码片段,在windows下用C语言调用文件选择对话框,以备忘 #define DEFAULT_DIR "" char extraction_path[MAX_PATH] = DE ...
- windows下编译java源文件的编码错误
import java.util.Arrays;public class ArrayAsAReference{ public static void main(String[] args) { int ...
- Apache Thrift 在Windows下的安装与开发
Windows下安装Thrift框架的教程很多.本文的不同之处在于,不借助Cygwin或者MinGW,只用VS2010,和Thrift官网下载的源文件,安装Thrift并使用. 先从官网 下载这两个文 ...
- 【Linux】windows下编写的脚本文件,放到Linux中无法识别格式
注意:我启动的时候遇到脚本错误 » sh startup.sh -m standalone tanghuang@bogon : command not found : command not foun ...
- Git(分布式版本控制系统)在Windows下的使用-将代码托管到开源中国(oschina)
一.Git是什么? Git --- The stupid content tracker, 傻瓜内容跟踪器.Git是目前世界上最先进的分布式版本控制系统. 二.SVN与Git的最主要的区别? ...
随机推荐
- Redis(一)、Redis五种数据结构
Redis五种数据结构如下: 对redis来说,所有的key(键)都是字符串. 1.String 字符串类型 是redis中最基本的数据类型,一个key对应一个value. String类型是二进制安 ...
- tp框架---表单验证
自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证.分为静态验证和动态验证. 关于基础知识,请查看手册“自动验证”一章. 一.静态验证 ( ...
- C - Game With Sticks
Problem description After winning gold and silver in IOI 2014, Akshat and Malvika want to have some ...
- Codeforces Round #454
Masha and Bears Tic-Tac-Toe Shockers Seating of Students Party Power Tower Reverses
- HTTP获取信息的四种方式
HTTP 从网络获取信息的四种方式 GET GET指代你在浏览器中输入网址,浏览网站时做的事.例如,我们使用 http://www.baidu.com 的时候,可以将GET想象成他说:"hi ...
- Walking on the path of Redis --- Data structure
废话开篇 相比于其他内存数据库,Redis最大的特点就是拥有丰富的数据结构, 经常被称为Date Structure Server.Redis支持的数据结构包含strings, hashes, lis ...
- 【转载】Java实现word转pdf
最近遇到一个项目需要把word转成pdf,GOOGLE了一下网上的方案有很多,比如虚拟打印.给word装扩展插件等,这些方案都依赖于ms word程序,在java代码中也得使用诸如jacob或jcom ...
- 【技术累积】【点】【java】【8】maven常用命令(持续更新)
建立 mvn archetype:generate -DgroupId=com.andy.test -DartifactId=test-project -Dversion=0.0.1-SNAPSHOT ...
- 【从零开始】【Java】【0】装软件些
闲聊 其实最先写的是1,所以拐回头写的只能是0了. 因为要在不同的电脑上搞这个东西,必然涉及到装机,当然只是装我们用的这些,且是最基础的部分了. 大晚上的睡不着觉,起来,大概1个小时全部搞定,随便记下 ...
- ZBrush中的PolyPainting如何理解?
什么是PolyPainting? PolyPainting在ZBrush ®中是一种创建纹理的方法,该方法通过对每个多边形顶点应用单一RGB值来着色模型.此方法无需使用UV坐标.通过直接对顶点应用颜色 ...