gpt4 book ai didi

c++ - 如何判断驱动器是否在没有管理员权限的情况下被 BitLocker 加密?

转载 作者:可可西里 更新时间:2023-11-01 09:28:59 32 4
gpt4 key购买 nike

出于我的目的,我只需要知道驱动器的 DOS 路径的 BitLocker 加密状态。像这样:

enum DriveEncryptionStatus{
Unprotected,
Protected,
Unknown
};

DriveEncryptionStatus = GetDriveBitlockerEncryptionStatus(L"C:\\");

我找到了 Win32_EncryptableVolume不幸的是带有此警告的类:

To use the Win32_EncryptableVolume methods, the following conditions must be met: You must have administrator privileges.

知道如何在不以管理员身份运行的情况下执行此操作吗?

最佳答案

BitLocker 状态可供 shell 中的任何普通用户使用。 Windows 使用 Windows Property System 获取状态在 Win32 API 中检查未记录的 shell 属性 System.Volume.BitLockerProtection。您的程序还可以在不提升的情况下检查此属性。

如果此属性的值为 1、3 或 5,则表示在驱动器上启用了 BitLocker。任何其他值都被视为关闭。

您可以使用 Win32 API 检查此 shell 属性。出于礼貌,我已经从 my other answer to a similar question. 移植了我的托管实现。

#include <shlobj.h>
#pragma comment(lib, "shell32.lib")
#pragma comment(lib, "propsys.lib")

DriveEncryptionStatus getDriveEncryptionStatus(LPCWSTR parsingName)
{
IShellItem2 *drive = NULL;
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
hr = SHCreateItemFromParsingName(parsingName, NULL, IID_PPV_ARGS(&drive));
if (SUCCEEDED(hr)) {
PROPERTYKEY pKey;
hr = PSGetPropertyKeyFromName(L"System.Volume.BitLockerProtection", &pKey);
if (SUCCEEDED(hr)) {
PROPVARIANT prop;
PropVariantInit(&prop);
hr = drive->GetProperty(pKey, &prop);
if (SUCCEEDED(hr)) {
int status = prop.intVal;

drive->Release();

if (status == 1 || status == 3 || status == 5)
return DriveEncryptionStatus::Protected;
else
return DriveEncryptionStatus::Unprotected;
}
}
}

if (drive)
drive->Release();

return DriveEncryptionStatus::Unknown;
}

int main()
{
DriveEncryptionStatus status = getDriveEncryptionStatus(L"C:");
return 0;
}

关于c++ - 如何判断驱动器是否在没有管理员权限的情况下被 BitLocker 加密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23841973/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com