必威体育Betway必威体育官网
当前位置:首页 > IT技术

用DeviceIoControl获取系统磁盘信息

时间:2019-10-18 22:46:48来源:IT技术作者:seo实验室小编阅读:81次「手机版」
 

deviceiocontrol

原文地址:http://www.cppblog.com/dingding/archive/2008/09/23/62570.html

代码

#include <iOStream>

#include <windows.h>

using namespace std;

int main()

{

SECURITY_ATTRIBUTES secStru;

secStru.bInherithandle=0;

secStru.lpSecurityDescriptor=0;

secStru.nLength=0; 

HANDLE hDevice=CreateFile("\\\\.\\PhysicalDrive0",GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);

if(hDevice==INvalid_HANDLE_VALUE)

{

 return -1;

}

//Dword outBuff[1000];

GET_LENGTH_INFORMATION infostruct;

memset(&infoStruct,0,sizeof(infoStruct));

dword bytesReturned;

if(deviceiocontrol(hDevice,IOCTL_DISK_GET_LENGTH_INFO,NULL,0,&infoStruct,sizeof(infoStruct),&bytesReturned,NULL)==0)

{

 cout<<"failed to get disk information."<<endl;

 DWORD ERROR;

 error=GetLastError();

 HRESULT hRe=HRESULT_FROM_WIN32(error);

 char errorData[10];

 sprintf(errorData,"%x",hRe);

 cout<<"Error code:"<</*hRe*/errorData<<endl;

 CloseHandle(hDevice);

 return -1;

}

DISK_GEOMETRY_EX geoStruct;

memset(&geoStruct,0,sizeof(geoStruct));

if(DeviceIoControl(hDevice,IOCTL_DISK_GET_DRIVE_GEOMETRY_EX ,NULL,0,&geoStruct,sizeof(geoStruct),&bytesReturned,NULL)==0)

{

 cout<<"Failed to get disk information."<<endl;

 DWORD error;

 error=GetLastError();

 HRESULT hRe=HRESULT_FROM_WIN32(error);

 char errorData[10];

 sprintf(errorData,"%x",hRe);

 cout<<"Error code:"<</*hRe*/errorData<<endl;

 CloseHandle(hDevice);

 return -1;

}

cout<<"The disk's size is:"<<infoStruct.Length.QuadPart/1024/1024/1024<<" G Bytes."<<endl;

cout<<"The disk's cylinder number:"<<geoStruct.Geometry.Cylinders.QuadPart<<endl;

cout<<"The disk's media type:"<<geoStruct.Geometry.MediaType<<endl;

cout<<"Number of tracks per cylinder:"<<geoStruct.Geometry.TracksPerCylinder<<endl;

cout<<"Number of sectors per track:"<<geoStruct.Geometry.SectorsPerTrack<<endl;

cout<<"Number of bytes per sector:"<<geoStruct.Geometry.BytesPerSector<<endl;

PDISK_PARTITION_INFO  partitionInfo=DiskGeometryGetPartition(&geoStruct);

DRIVE_layout_INFORMATION_EX layOutInfo[20];

memset(&layOutInfo,0,sizeof(DRIVE_LAYOUT_INFORMATION_EX)*20);

//layOutInfo.PartitionEntry=*(new PARTITION_INFORMATION_EX[10]);

if(DeviceIoControl(hDevice,IOCTL_DISK_GET_DRIVE_LAYOUT_EX,NULL,0,&layOutInfo,sizeof(DRIVE_LAYOUT_INFORMATION_EX)*20,&bytesReturned,NULL)==0)

{

 cout<<"Failed to get disk information."<<endl;

 DWORD error;

 error=GetLastError();

 HRESULT hRe=HRESULT_FROM_WIN32(error);

 char errorData[10];

 sprintf(errorData,"%x",hRe);

 cout<<"Error code:"<</*hRe*/errorData<<endl;

 CloseHandle(hDevice);

 return -1;

}

int partitionCount=layOutInfo[0].PartitionCount;

cout<<"Number of partitions:"<<layOutInfo[0].PartitionCount<<endl;

cout<<"Partitions' information:"<<endl;

for(int i=0;i<partitionCount;i++)

{

 //PDISK_PARTITION_INFO pParInfo=partitionInfo+i*sizeof(DISK_PARTITION_INFO);

 if(layOutInfo[i].PartitionEntry[0].PartitionNumber!=0)

 {

  cout<<"Partition "<<layOutInfo[i].PartitionEntry[0].PartitionNumber<<",  partition size is "<<layOutInfo[i].PartitionEntry[0].PartitionLength.QuadPart/1024/1024/1024<<" G Bytes, partition style is "<<layOutInfo[i].PartitionEntry[0].PartitionStyle<<endl;

 }

}

//cout<<"The type of partition:"<<((partitionInfo.PartitionStyle==PARTITION_STYLE_MBR) ?"MBR":((partitionInfo.PartitionStyle==PARTITION_STYLE_GPT )?"GPT":((partitionInfo.PartitionStyle==PARTITION_STYLE_RAW)?"RAW":"")))<<endl;

CloseHandle(hDevice);

 return 0;

}

相关阅读

JAVA获取随机数

JAVA获取随机数 java中一般是通过Random类来获取随机数,构造函数一般有两种形式 - Random(long seed); - Random(); 第一种是

SPSS(十一)SPSS信息浓缩技术--主成分分析、因子分析(图文

SPSS(十一)信息浓缩技术--主成分分析、因子分析(图文+数据集) 当我们的自变量存在多重共线性,表现为进行回归时候方程系数估计不正常

HTML怎样获取显示器屏幕尺寸

<html><script>function a(){document.write("屏幕分辨率为:"+screen.width+"*"+screen.height //最好是window.screen+"<br />"+

Java获取今天是几号

System.out.println(Calendar.getInstance().get(Calendar.DAY_OF_MONTH));

获取素材列表返回40004 invalid media type !(大坑)解决

问题一: 刚开始根据他需要的参数 调用https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=ACCESS_TOKEN

分享到:

栏目导航

推荐阅读

热门阅读