读书人

XP 下怎样通过盘符得到物理分区名称?

发布时间: 2012-01-14 20:02:35 作者: rapoo

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以上系统。

读书人网 >VC/MFC

热点推荐