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

2023-11-27

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

enum DriveEncryptionStatus{
    Unprotected,
    Protected,
    Unknown
};

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

我能够找到Win32_EncryptableVolume不幸的是,这个类有这个警告:

要使用 Win32_EncryptableVolume 方法,需要满足以下条件 必须满足:您必须具有管理员权限。

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


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

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

您可以使用 Win32 API 来检查此 shell 属性。出于礼貌,我已将我的托管实现从我对类似问题的另一个回答。

#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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在没有管理员权限的情况下判断驱动器是否经过 BitLocker 加密? 的相关文章

随机推荐