Подсистема реестра
не интерпретирует (и не проверяет) значение ключа Type
.он просто хранит или загружает как DWORD
данные.В результате мы в принципе можем использовать любое значение для типа с любыми данными.скажем, например, мы можем сделать
HKEY hKey;
if (!RegOpenKeyExW(hRootKey, lpSubKey, 0, KEY_SET_VALUE, &hKey))
{
RegSetValueExW(hKey, 0, 0, 0x87654321, (PBYTE)L"demo", sizeof(L"demo"));
DWORD ticks = GetTickCount();
RegSetValueExW(hKey, L"TickCount", 0, 0x12345678, (PBYTE)&ticks, sizeof(ticks));
RegCloseKey(hKey);
}
другими словами, мы можем использовать типы 0x87654321
и 0x12345678
вместо REG_SZ
и REG_DWORD
, например.любое значение для типа является законным.Type
- только подсказка для фактического типа данных.но мы, например, также можем хранить строку с типом REG_DWORD
или DWORD
с типом REG_SZ
.мы можем сохранить 0 или не завершающую 0 строку
Как извлечь стандартный тип значения реестра из допустимого неизвестного типа значения?
допустимое здесь избыточное слово.в общем случае - никак.если не знаешь что здесь сохранилось и какой в этом смысл.мы говорим, может отображать значение в виде REG_BINARY
- переинтерпретированы байты.
для другого примера, в win10 я просматриваю под
HKEY_LOCAL_MACHINE
SYSTEM
Setup
Upgrade
NetworkDriverBackup
Control
NetworkSetup2
Clients
{54494F4E-5441-4B53-CCB9-061A6EC4BF6E}
Properties
{a111f1f0-5923-47c0-9a68-d0bafb577901}
несколько подразделов со значениями, тип которых 0xFFFF0012
и 0xFFFF0019
несмотря на то, что фактическое значение данных равно REG_SZ
(легко увидеть, что это юникодные строки с нулем в конце), 0xFFFF0012
и 0xFFFF0019
- это дополнительная информация для тех, кто понимает смысл этих ключей.они знают (с жестким кодом), что фактические данные здесь - это широкая символьная строка с 0 терминами.и используйте Type
в качестве дополнительной информации (флаги?).В любом случае - если ключ / значение неизвестно для вас - как вы можете использовать его значения, если вы не понимаете его смысла.даже если знаешь формат.для отображения в пользовательском интерфейсе - только опция необработанного шестнадцатеричного представления