Я не могу найти какую-либо документацию для констант или перечисление для ключа политики продукта
В приведенной ниже статье приведена обратная инженерия двоичного значения, содержащегося в ключе HKLM\System\CurrentControlSet\ProductOptions
.
Он также включает в себя программу (с исходным кодом) для декодирования ключа.
Получайте удовольствие от лицензирования Windows
Если вы загляните в реестр в ключе HKLM\System\CurrentControlSet\ProductOptions, вы найдете несколько значений, связанных с лицензированием.
Ключи ProductType и ProductSuite содержат OS Suite и Edition, но ключ ProductPolicy гораздо интереснее. Итак, давайте ближе посмотрим на это
...
Как вы можете видеть, имена лицензий представлены в виде строки в Юникоде, и позже я покажу вам, как мы можем читать значения. Но так как я не хотел извлекать все имена вручную, я решил посмотреть, смогу ли я перевернуть использованную структуру, потому что она не выглядела очень сложной
...
Начинается с заголовка:
TProductPolicyHeader = packed record
cbSize: DWORD;
cbDataSize: DWORD;
cbEndMarker: DWORD;
Unknown1: DWORD;
Unknown2: DWORD;
end;
затем следует массив значений:
TProductPolicyValue = packed record
cbSize: Word;
cbName: Word;
SlDatatype: Word;
cbData: Word;
Unknown1: DWORD;
Unknown2: DWORD;
end;
SlDataType - это значение слова, соответствующее значениям перечисления 0SLDATATYPE:
_tagSLDATATYPE =
(
SL_DATA_NONE = REG_NONE,
SL_DATA_SZ = REG_SZ,
SL_DATA_DWORD = REG_DWORD,
SL_DATA_BINARY = REG_BINARY,
SL_DATA_MULTI_SZ = REG_MULTI_SZ,
SL_DATA_SUM = 100
);
SLDATATYPE = _tagSLDATATYPE;
TSlDataType = SLDATATYPE;
PSlDataType = ^SLDATATYPE;
И мы заканчиваем маркером конца (размером cbEndMarker).
Источник Весело с Windows Licensing