NAME NOT FOUND отображается в столбце результатов Process Monitor, поэтому я собирался создать значение самостоятельно. Но я не знаю, пытались ли получить доступ к двоичному, строковому или, скажем, DWORD . Кто-нибудь знает, есть ли способ выяснить это в случае RegQueryValue?
1 ответ
Не совсем, но в некоторых случаях мы можем сделать правильное предположение.
Операция RegQueryValue
в Process Monitor по существу соответствует вызываемой функции RegQueryValueEx
. Эта функция имеет параметр с именем lpType
, но это ...
Указатель на переменную, которая получает код, указывающий тип данных, сохраненных в указанном значении.
Акцент мой. Это делается для того, чтобы приложениям можно было узнать тип полученного ими значения. (RegQueryValueEx
не заботится о типах данных, он просто передает байты. Задача программы - интерпретировать байты.) Даже если программа по какой-то причине указала тип, Process Monitor не сообщает значение при вводе функции, а только при успешном выходе.
Это, однако, сообщает "длина". По непонятным причинам это на самом деле не значение lpcbData
которое приложение предоставляет для указания размера буфера для результата - в 64-битной системе нужно вычесть 12, чтобы получить оригинал. Значение DWord занимает 4 байта, значение QWord занимает 8 байтов, а все остальные виды имеют переменную длину. (Программы могут также вообще не подготавливать память перед вызовом функции, просто чтобы проверить, существует ли значение.) Таким образом, если "длина", сообщаемая Process Monitor, равна 16, программа ожидает 4-байтовый фрагмент данных, который почти наверняка является DWord.