能力值:
( LV2,RANK:10 )
|
-
-
2 楼
太难了吧,250查看没有人回答......
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
是否动态磁盘里的卷就当做虚拟磁盘操作
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
我研究发现大部分可能是使用了vds.h这个头文件里的接口,但是它的动态链接库之类的,请教下有人知道吗
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
库尔
你这个说明了它确实用了Vds虚拟磁盘管理中的方法
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
库尔
没有具体方法,我现在做到读取diskpack,但是读出来的包不可用,磁盘无法访问
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
网上搜了一下,没有可以直接判断的API接口,但可以通过IOCTL_DISK_GET_DRIVE_LAYOUT_EX间接获取到。 #include <tchar.h>
#include <windows.h>
#include <winioctl.h>
const GUID PARTITION_LDM_DATA_GUID = { 0xAF9B60A0L, 0x1431, 0x4F62, 0xBC, 0x68, 0x33, 0x11, 0x71, 0x4A, 0x69, 0xAD };
bool IsDynamicPartition(PARTITION_INFORMATION_EX *pPartitionInfo)
{
if (pPartitionInfo->PartitionStyle == PARTITION_STYLE_MBR)
{
return pPartitionInfo->Mbr.PartitionType == PARTITION_LDM;
}
else if (pPartitionInfo->PartitionStyle == PARTITION_STYLE_GPT)
{
return IsEqualGUID(pPartitionInfo->Gpt.PartitionType, PARTITION_LDM_DATA_GUID);
}
return false;
}
bool IsDynamicDisk(int nDiskNo)
{
bool ret = false;
TCHAR szDiskPath[MAX_PATH];
wsprintf(szDiskPath, TEXT("\\\\.\\PhysicalDrive%d"), nDiskNo);
HANDLE hDisk = CreateFile(szDiskPath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr);
if (hDisk != INVALID_HANDLE_VALUE)
{
DRIVE_LAYOUT_INFORMATION_EX *pInfo;
DWORD dwBytesReturn = 0;
int nPartitionCount = 64;
DWORD dwSize = sizeof(DRIVE_LAYOUT_INFORMATION_EX) + nPartitionCount * sizeof(PARTITION_INFORMATION_EX);
pInfo = (DRIVE_LAYOUT_INFORMATION_EX *) new BYTE[dwSize];
if (DeviceIoControl(hDisk, IOCTL_DISK_GET_DRIVE_LAYOUT_EX, nullptr, 0, (LPVOID)pInfo, dwSize, &dwBytesReturn, nullptr))
{
for (DWORD i = 0; i < pInfo->PartitionCount; ++i)
{
if (IsDynamicPartition(pInfo->PartitionEntry + i))
{
ret = true;
break;
}
}
}
delete pInfo;
CloseHandle(hDisk);
}
return ret;
}
int _tmain()
{
_tprintf(_T("PhysicalDrive0 is %s disk.\n"), IsDynamicDisk(0) ? _T("dynamic") : _T("basic"));
return 0;
}
最后于 2019-8-29 08:01
被cvrock编辑
,原因:
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
cvrock
网上搜了一下,没有可以直接判断的API接口,但可以通过IOCTL_DISK_GET_DRIVE_LAYOUT_EX间接获取到。#include <tchar.h& ...
逻辑磁盘管理器(LDM)分区就是判断这是动态磁盘吗
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
wx_幼儿园的王
逻辑磁盘管理器(LDM)分区就是判断这是动态磁盘吗
我理解是的,动态磁盘之所以能动态就是依赖了LDM,基本磁盘如果也依赖了LDM就不“基本”了,所以可以通过它来判断。
|
|
|