Как перевести SDDL в двоичный дескриптор безопасности

Некторые ключи реестра хранят дескрипторы безопасности (security descriptor) в двоичной форме (REG_BINARY). Пример - значение AccessPermission, которое устанавливает дескриптор безопасности COM сервера. Редактировать такой дескриптор - одно удовольствие. :-)

Тем не менее, отыскался способ как сделать это без помощи сторонних инструментов (или компилятора) - с помощью PowerShell и WMI класса Win32_SecurityDescriptorHelper. Вот так можно прочитать дескриптор из реестра и преобразовать его в SDDL:

$key = "hklm:\SOFTWARE\Classes\AppID\{4ff35d5e-d226-4550-9248-03e7779e67de}"
$sd = (gp -Path $key).AccessPermission
$sddl = ([wmiclass]"Win32_SecurityDescriptorHelper").BinarySDToSDDL($sd).SDDL
PS C:\Users\alexeypa> $sddl
O:BAG:BAD:(A;;CCDC;;;IU)(A;;CCDC;;;SY)(A;;CCDC;;;BA)

И в обратную сторону:

$binary_sd = ([wmiclass]"Win32_SecurityDescriptorHelper").SDDLToBinarySD($sddl).BinarySD
-join ($binary_sd | foreach {$_.ToString("X2")})

И, наконец, если SDDL вам кажется китайской грамотой - поможет sddlgen.exe из Windows SDK:

comments powered by Disqus