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];
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中一般是通过Random类来获取随机数,构造函数一般有两种形式 - Random(long seed); - Random(); 第一种是
SPSS(十一)SPSS信息浓缩技术--主成分分析、因子分析(图文
SPSS(十一)信息浓缩技术--主成分分析、因子分析(图文+数据集) 当我们的自变量存在多重共线性,表现为进行回归时候方程系数估计不正常
<html><script>function a(){document.write("屏幕分辨率为:"+screen.width+"*"+screen.height //最好是window.screen+"<br />"+
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