Как определить, активен ли раздел Windows по пути к нему?

Моя цель — узнать, установлена ​​ли Windows на активный раздел диска. Я могу получить путь для Windows:

C:\WINDOWS

и тогда это раздел:

\Device\Harddisk4\Partition4

Но вопрос в том, как узнать, активен ли этот раздел?

-2

Решение

Проверьте эту ссылку (http://msdn.microsoft.com/en-us/library/windows/desktop/aa365451(v=vs.85).aspx)

PARTITION_INFORMATION имеет BootIndicator. но это не гарантирует, что запущенные окна были загружены этим разделом.

отредактированный Это пример функции, протестированной на 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 fail\n");
}
1

Другие решения


По вопросам рекламы [email protected]