System.Volume.BitLockerProtection Shell Property Returns Empty on Windows 11 IoT Enterprise LTSC (Build 26100)

B D, Anup 40 Reputation points
2026-07-28T07:17:34.13+00:00

Dear Microsoft Support Team,

We are developing a security compliance application on Windows 11 IoT Enterprise LTSC (Build 26100.3194) and have encountered an issue querying BitLocker encryption status without administrative privileges.

Problem:

The shell property System.Volume.BitLockerProtection — which is documented as the standard API for querying BitLocker status from the Windows Shell — returns an empty PROPVARIANT (VT_EMPTY, hr=0x401a0 INPLACE_S_TRUNCATED) when called from a standard user account, even though BitLocker is fully active on the volume as confirmed by Get-BitLockerVolume (run as administrator).

Steps to Reproduce:

IShellItem2* drive = nullptr;

SHCreateItemFromParsingName(L"C:\", NULL, IID_PPV_ARGS(&drive));

PROPERTYKEY pKey;

PSGetPropertyKeyFromName(L"System.Volume.BitLockerProtection", &pKey);

PROPVARIANT prop;

PropVariantInit(&prop);

drive->GetProperty(pKey, &prop);

// prop.vt = 0 (VT_EMPTY) on IoT LTSC

// Same code returns correct value (1) on Windows 11 Pro/Enterprise

Observed Behavior:

Property Value

SHCreateItemFromParsingName hr=0x0

PSGetPropertyKeyFromName hr=0x0

GetProperty hr=0x401a0

prop.vt 0 (VT_EMPTY)

prop.intVal 0

Expected Behavior:

prop.intVal should return 1 (BitLocker ON, Fully Encrypted) matching what Get-BitLockerVolume and manage-bde -status report when run as administrator.

Environment:

OS Windows 11 IoT Enterprise LTSC

Build 26100.3194

Edition IoT Enterprise LTSC

User context Standard user (no admin privileges)

BitLocker state Fully Encrypted, Protection On (confirmed via admin PowerShell)

We are aware that Win32_EncryptableVolume WMI and manage-bde both require elevation

Thank you for your time and assistance.

Windows for business | Windows Client for IT Pros | Devices and deployment | Recovery key
0 comments No comments

1 answer

Sort by: Most helpful
  1. Brian Huynh 3,735 Reputation points Microsoft External Staff Moderator
    2026-07-28T07:36:54.3533333+00:00

    Hello B D, Anup, thank you for posting in the Microsoft Q&A community.

    There are a few technical reasons why this discrepancy is likely occurring on the IoT Enterprise LTSC edition:

    First, Windows 11 IoT Enterprise LTSC is purpose-built for fixed-function devices and optimizes its operating footprint. To reduce attack surfaces and system overhead, many traditional Windows Explorer and Shell extensions—including the property handlers for BitLocker UI components (such as bdeui.dll or fvecpl.dll)—are either stripped down, disabled by default, or have much tighter security boundaries compared to standard Pro and Enterprise editions.

    Secondly, the Windows Shell API property System.Volume.BitLockerProtection relies on underlying BitLocker APIs and WMI providers (Win32_EncryptableVolume). While standard Pro/Enterprise editions might allow a standard user token partial read access to UI-driven encryption status (primarily for File Explorer integration), IoT LTSC enforces strict administrative checks at the API boundary. When queried without elevation, the system denies access to the volume metadata and gracefully fails by returning a truncated or empty result (0x000401A0 / VT_EMPTY).

    To resolve this issue and retrieve the BitLocker status without running your user-facing application as an Administrator, I recommend the following approaches:

    You can delegate WMI read permissions to standard users for the BitLocker namespace, and modify your application to query WMI rather than the Shell API. The Shell API is UI-bound and its implementation can be inconsistent across specialized LTSC SKUs. To do this:

    1. Open wmimgmt.msc as an administrator.
    2. Right-click WMI Control (Local) and select Properties.
    3. Navigate to the Security tab.
    4. Expand Root -> CIMv2 -> Security -> MicrosoftVolumeEncryption.
    5. Click Security, add your standard user account (or the Authenticated Users group), and grant them Enable Account and Remote Enable permissions. Once delegated, your standard user application can execute a WMI query against the Win32_EncryptableVolume class to read the ProtectionStatus or ConversionStatus property natively.

    If WMI queries are restricted in your environment's compliance baseline, an alternative workaround is to implement a two-tier model. Since standard users are restricted from querying critical system security states on locked-down LTSC environments, you can create a lightweight Windows Service running as LocalSystem. This service can query the BitLocker status via manage-bde, WMI, or the FVE API, and securely expose the result to your standard user compliance application via Inter-Process Communication (IPC) such as a Named Pipe or shared memory. This aligns seamlessly with Microsoft's best practices for security auditing applications.

    To help me further isolate if this is purely a missing Shell DLL registration on this specific LTSC build or a strict permission boundary issue, please provide some additional diagnostic data.

    Please run the following PowerShell command to see if the underlying WMI provider is also explicitly blocking access:

    Get-CimInstance -Namespace "Root\CIMv2\Security\MicrosoftVolumeEncryption" -ClassName Win32_EncryptableVolume
    

    Please run this command in Command Prompt to verify if the BitLocker property handler is correctly registered in the LTSC registry:

    reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\PropertySystem\PropertyHandlers" /s | findstr -i "BitLocker"
    

    Lastly, if possible, run Process Monitor (ProcMon) while executing your C++ code. Look for "Access Denied" or "Name Not Found" events targeting bdeui.dll, fveapi.dll, or volume handles, and share the specific paths that are failing.

    Official Microsoft Documentation Reference:

    Was this answer helpful?


Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.