如何通过其上的路径判断Windows分区是否处于活动状态
How to tell if Windows partition is active by a path on it?
我的目标是知道Windows是否安装在活动磁盘分区上。我可以获取Windows的路径:
C:WINDOWS
然后是分区:
DeviceHarddisk4Partition4
但问题是怎么知道这个分区是否处于活动状态?
检查此链接 (http://msdn.microsoft.com/en-us/library/windows/desktop/aa365451(v=vs.85).aspx)
PARTITION_INFORMATION有引导指示器。 但不能保证正在运行的窗口是由该分区启动的。
编辑 这是一个在 Windows7 上测试的示例函数。我认为"激活"分区不是您的目标。"激活"具有可启动USB设备等含义。我不喜欢 WMI,但它可以帮助您实现目标(http://msdn.microsoft.com/en-us/library/windows/desktop/bb986746(v=vs.85).aspx)
BOOL
__stdcall
TP_IsPartitionActivated(
__in LPCWSTR pPartition,
__out PBOOL pbIsActivated
)
{
HANDLE hDevice = INVALID_HANDLE_VALUE;
PARTITION_INFORMATION_EX szPartitionInformation;
DWORD cbReturned = 0x00;
if (pPartition == NULL || pbIsActivated == NULL) { return FALSE; }
__try
{
hDevice = CreateFileW(pPartition, 0x00, 0x00, NULL, OPEN_EXISTING, 0x00, NULL);
if (hDevice == INVALID_HANDLE_VALUE) { return FALSE; }
RtlZeroMemory(&szPartitionInformation, sizeof(szPartitionInformation));
if (FALSE != DeviceIoControl(hDevice, IOCTL_DISK_GET_PARTITION_INFO_EX, NULL, 0x00, (LPVOID)&szPartitionInformation, sizeof(PARTITION_INFORMATION_EX), &cbReturned, NULL))
{
if (PARTITION_STYLE_MBR == szPartitionInformation.PartitionStyle)
{
*pbIsActivated = szPartitionInformation.Mbr.BootIndicator;
}
else
{
}
return TRUE;
}
else
{
cbReturned = GetLastError();
wprintf(L"%08X(%d)n", cbReturned, cbReturned);
}
}
__finally
{
if (hDevice != INVALID_HANDLE_VALUE) { CloseHandle(hDevice); }
}
return FALSE;
}
呼叫喜欢
WCHAR szPartition[] = L"\\.\C:";
BOOL bIsActivated = FALSE;
if (FALSE != TP_IsPartitionActivated(szPartition, &bIsActivated))
{
wprintf(L"%s n", bIsActivated == FALSE ? L"not activated" : L"activated");
}
else
{
wprintf(L"function failn");
}
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 检查输入是否不是整数或数字
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 此代码是否违反一个定义规则
- 是否需要删除包含对象的"pair"?
- 是否可以从int转换为enum类类型
- 无论条件是否为true,if总是在c++中执行
- 如何找到大小'x'数组是否完全填充,在C++?
- 检查值是否在集合p1和p2中,但不在p3中
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 如何确定2个URI(路径)是否属于同一分区或卷
- 是否存在用于按以下方式对两个范围进行排序和分区的标准算法?
- 枚举所有分区并测试它们是否为 NTFS
- 检查磁盘是否插入到保留的分区中
- 如何通过其上的路径判断Windows分区是否处于活动状态
- 是否空指针分配分区有一个错误
- 是否可以只在安装了FUSE的分区上处理remove命令