获取磁盘逻辑分区 相关信息 1
来源:互联网 发布:网络上的v是什么意思 编辑:程序博客网 时间:2024/06/04 18:50
class CLogicalDriver{public: CLogicalDriver(); void mfGetLogicalCapacity(char mcLogicalName); void mfGetLogicalPhysicalAndOffset(char mcStrName); void mfGetLogicalNumber(); void mfGetValidLogical();public: ULARGE_INTEGER mdTotalCapacity; ULARGE_INTEGER mdFreeCapacity;ULARGE_INTEGER mdTotalFreeCapacity; char mcLogicalNumer[3]; int miParentPhysicalNumber; int miTypeFlag; char macValidLogicalArry[26]; int miValidLogicalCount;__int64 miPhysicalBaseOffset;};
#include "Disk.h"CLogicalDriver::CLogicalDriver(){ memset(mcLogicalNumer,0,sizeof(mcLogicalNumer)); miParentPhysicalNumber =-1;miPhysicalBaseOffset =0; miTypeFlag =0;}void CLogicalDriver::mfGetLogicalCapacity(char mcStrName){char mcLogicalName[4]={0};sprintf(mcLogicalName,"%c:",mcStrName);if( GetDiskFreeSpaceEx(mcLogicalName,&mdFreeCapacity,&mdTotalCapacity,&mdTotalFreeCapacity)) {printf("%s total:%I64u free:%I64u user:%I64u",mcLogicalName,mdTotalCapacity.QuadPart,mdTotalFreeCapacity.QuadPart,mdFreeCapacity.QuadPart); } if(GetDriveType(mcLogicalName)==DRIVE_REMOVABLE) { miTypeFlag=2; //useful code } else { miTypeFlag=1; } printf(" type%d \n",miTypeFlag);}void CLogicalDriver::mfGetLogicalPhysicalAndOffset(char mcStrName){char mcLogicalTemp[20]={0};sprintf(mcLogicalTemp,"\\\\.\\%c:",mcStrName); HANDLE m_hDriver = CreateFileA(mcLogicalTemp, GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM, NULL); if (m_hDriver == INVALID_HANDLE_VALUE) { cout<<"open error"<<endl; } //位于物理磁盘的偏移地址 DWORD dwOutByte; PARTITION_INFORMATION partInfo; BOOL bDeviceRet = DeviceIoControl(m_hDriver, IOCTL_DISK_GET_PARTITION_INFO, NULL, 0, &partInfo, sizeof(PARTITION_INFORMATION), &dwOutByte, NULL); miPhysicalBaseOffset = partInfo.StartingOffset.QuadPart;//位于物理磁盘的偏移地址 if(!bDeviceRet) printf("funciton error DiskInfo.cpp line 78"); //位于哪一块物理磁盘 STORAGE_DEVICE_NUMBER msNumber; DWORD mdReaded; bDeviceRet =DeviceIoControl(m_hDriver,IOCTL_STORAGE_GET_DEVICE_NUMBER,NULL,0,&msNumber,sizeof(msNumber),&mdReaded,NULL); if(!bDeviceRet) { printf("funciton error DiskInfo.cpp line 89"); return;}miParentPhysicalNumber=msNumber.DeviceNumber;printf(" %I64u --- parent %d \n",this->miPhysicalBaseOffset,this->miParentPhysicalNumber);}void CLogicalDriver::mfGetValidLogical (){ static TCHAR *pszWordTable = TEXT("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); DWORD dwDisk; //DWORD DWORD dwBase = 0x01; DWORD dwCount = 0;//记录磁盘数量 DWORD dwScanCount = 0;//要扫描的有效磁盘数量,用于返回 DWORD dwStyle; TCHAR szDiskPath[4] = {0};//缓存一个磁盘根目录名 TCHAR szDiskArray[26] = {0};//记录要扫描的磁盘名 dwDisk = GetLogicalDrives(); while(dwDisk && (dwCount <= ::lstrlen(pszWordTable)) ) { memset(szDiskPath, 0, sizeof(szDiskPath)); if(dwDisk & dwBase) { ::lstrcpyn(szDiskPath, pszWordTable + dwCount, 2); ::lstrcat(szDiskPath, TEXT(":\\")); dwStyle = GetDriveType(szDiskPath); //是否可扫描 if( DRIVE_RAMDISK == dwStyle || DRIVE_FIXED == dwStyle || DRIVE_REMOVABLE==dwStyle ) { szDiskArray[dwScanCount] = pszWordTable[dwCount]; dwScanCount++; } } //dwDisk = dwDisk & ~dwBase; dwBase = dwBase << 1; dwCount++; } memcpy(macValidLogicalArry, szDiskArray,sizeof(szDiskArray)); miValidLogicalCount =dwScanCount;}
#include "Disk.h"#include <stdio.h>int main(){CLogicalDriver* mLogical =new CLogicalDriver;mLogical->mfGetValidLogical();printf("%s -%d ",mLogical->macValidLogicalArry,mLogical->miValidLogicalCount);char mArray[6]="cdegj";for(int i=0;i<5;i++){mLogical->mfGetLogicalCapacity(mArray[i]);}mLogical->mfGetLogicalPhysicalAndOffset(mArray[4]);getchar(); return 0;}
接下来 继续完善 最终效果
可以 通过一个物理磁盘 列出其下面的所有逻辑分区 等相关信息
- 获取磁盘逻辑分区 相关信息 1
- c# 获取逻辑磁盘信息
- VC++获取磁盘相关信息
- VB 获取所有逻辑磁盘信息 代码
- 获取CPU,内存使用率,磁盘相关信息
- asp.net获取磁盘相关信息
- 获取磁盘相关信息以及网卡相关信息
- 电脑磁盘逻辑分区不见了
- 磁盘主分区转换为逻辑分区
- 获取逻辑磁盘符
- C++/QT 获取系统CPU、内存、磁盘、进程相关信息
- 系统相关功能开发(一)-获取磁盘信息
- 主(磁盘)分区、扩展(磁盘)分区、逻辑(磁盘)分区的概念
- 获取分区和磁盘大小
- MFC--获取磁盘信息
- WMI获取磁盘信息
- 获取磁盘信息
- 获取磁盘信息
- 最大公约数与最小公倍数
- jQuery参考实例 2.1 仅选择子级元素
- 用eclipse将Java工程打包成jar包
- linux网络协议栈分析笔记8-arp邻居子系统1
- 谈谈对摩尔定理的理解及其当前是否继续有效
- 获取磁盘逻辑分区 相关信息 1
- 如何在Linux下卸载VMware Workstation
- hdu 4472 dp
- 初探AC6641
- LightOJ 1278 一个固定数可以换为几个连续数之和 求这样的连续数有多少对
- 兄弟郊游问题
- js写前进后退按钮
- SpringMVC_使用
- js隔段时间执行函数