Я делаю проект виртуализации приложений. Поэтому я подключаю приложения на уровне NT и буду направлять вызовы реестра в мой виртуальный реестр. При запуске любого приложения, если я перехожу в «Файл» -> «Открыть». У меня есть несколько вызовов реестра, как показано ниже:
ZwOpenKey(registry key path)
-> он создает дескриптор ex:(0x04e8)ZwQueryKey(0x4ea,...)
Монитор процесса говорит, что и открытие, и запрос выполняются с одним и тем же ключом. Я сам проверил и подтвердил, что это тот же ключ.
Также ключ запроса дал правильный результат для API запроса. Эта разница в 2 байта не для всех случаев открытия и запроса ключей.
Как и почему приложение меняет дескриптор с 0x4e8
на 0x4ea
перед вызовом querykey
?
Я также протестировал вызов ZWDuplicateObject
между open и querykey, однако API-интерфейс дублирующего объекта не вызывается.
Кто-нибудь может сказать, как меняется эта ручка?