首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

XP 下怎样通过盘符得到物理分区名称?该如何解决

2012-01-14 
XP 下怎样通过盘符得到物理分区名称?假设 :当电脑上插入一个U盘,此时的盘符是F,我怎样通过盘符得到U盘的物

XP 下怎样通过盘符得到物理分区名称?
假设 :当电脑上插入一个U盘,此时的盘符是F,我怎样通过盘符得到U盘的物理分区名称?谢谢各位了

[解决办法]
A+返回的数值,比如返回数值为2,则A+2为C
[解决办法]
BOOL GetDiskAndPartitionNumbers (char driveLetter, DWORD *diskNumberPtr, 
DWORD *partitionNumberPtr) 
{
HANDLE fileHandle; 
STORAGE_DEVICE_NUMBER deviceInfo; 
DWORD bytesReturned; 
char rawDiskName[] = "\\\\.\\C:"; 

// Open the raw disk 

rawDiskName[4] = driveLetter; 
fileHandle = CreateFile(rawDiskName, GENERIC_READ, 
FILE_SHARE_READ | FILE_SHARE_WRITE, 
NULL, OPEN_EXISTING, 
FILE_ATTRIBUTE_NORMAL, NULL); 
if (fileHandle == INVALID_HANDLE_VALUE) return FALSE; 

// Get disk and partition number information using a device control 
// request 

if (!DeviceIoControl(fileHandle, IOCTL_STORAGE_GET_DEVICE_NUMBER, NULL, 
0, &deviceInfo, sizeof(deviceInfo), &bytesReturned, 
NULL)) 
return FALSE; 
if (bytesReturned != sizeof(deviceInfo)) 
return FALSE; 

// Put values into the passed pointers 

*diskNumberPtr = deviceInfo.DeviceNumber; 
*partitionNumberPtr = deviceInfo.PartitionNumber; 
// Close the handle to the raw disk and return success 
CloseHandle(fileHandle); 

return TRUE; 
}
第一个参数为盘符,后面两个就物理磁盘号,及当前分区的在物理磁盘上的第几个
 
其实涉及到硬件方面的,一般都用到DeviceIoControl这个API。
适用XP以上系统。

热点排行