Em Vista, como o interruptor das BANDEIRAS de REG.EXE trabalha? Parte 2
Nota: este índice originalmente de http://mygreenpaste.blogspot.com. Se você for leitura ele de algum outro local, faça exame por favor do momento de visitar Minha pasta verde, Inc. Obrigado.
Previamente, Eu escrevi sobre o interruptor das BANDEIRAS para REG.EXE em Vista e cobri uma técnica que ajustasse as bandeiras virtualization-relacionadas de uma chave do registro programmatically. Este borne pretende cobrir o outro lado - perguntando para as bandeiras virtualization-relacionadas de uma chave do registro. Outra vez, nós estamos tratando de uma função “undocumented” em NTDLL.DLL - NtQueryKey:
NTSTATUS NtQueryKey (
No PUNHO KeyHandle,
Em KEY_INFORMATION_CLASS KeyInformationClass,
PARA FORA PVOID KeyInformation,
No comprimento de ULONG
PARA FORA PULONG ResultLength);
Para recuperar as bandeiras para uma chave, a chamada NtQueryKey com KeyInformationClass ajustou-se a 5, que WDM.h nos diz que é KeyFlagsInformation.
_KEY_INFORMATION_CLASS do enum do typedef {
KeyBasicInformation,
KeyNodeInformation,
KeyFullInformation,
KeyNameInformation,
KeyCachedInformation,
KeyFlagsInformation,
KeyVirtualizationInformation,
MaxKeyInfoClass // MaxKeyInfoClass deve sempre ser o último enum
} KEY_INFORMATION_CLASSREG.EXE fornece 12 para o valor do param do comprimento, e os últimos 4 bytes do amortecedor (KeyInformation) são modificados quando NtQueryKey retorna. Isto pareceria sugerir que o struct para receber a informação que contem o virtualization embandeira olhares algo como:
_KEY_FLAGS_INFO do struct do typedef {
ULONG unknown1;
ULONG unknown2;
ULONG ControlFlags;
} KEY_FLAGS_INFO, *PKEY_FLAGS_INFO;Unindo o todo, então, nós temos algo como:
typedef NTSYSAPI NTSTATUS (NTAPI* FuncNtQueryKey) (comprimento do PUNHO KeyHandle, do KEY_INFORMATION_CLASS KeyInformationClass, do PVOID KeyInformation, do ULONG, PULONG ResultLength);
// ...
Ntqk de FuncNtQueryKey = (FuncNtQueryKey) GetProcAddress (GetModuleHandle (_T (“ntdll.dll”)), “NtQueryKey”);
Kfi de KEY_FLAGS_INFO = {0};
hTheKey = ZERO de HKEY;
RegOpenKeyEx (HKEY_LOCAL_MACHINE, _T (“SOFTWARE \ \ o que quer que”), 0, KEY_ALL_ACCESS, &hTheKey);
DWORD dwResultLen = 0;
dwNtqkResult de DWORD = ntqk (o hTheKey, KeyFlagsInformation, &kfi, sizeof (KEY_FLAGS_INFO), &dwResultLen);
RegCloseKey (hTheKey);
hTheKey = ZERO;
As bandeiras (_CONTROL_FLAGS, de Parte 1) são armazenados como um bitmask em kfi.ControlFlags.
_CONTROL_FLAGS do enum do typedef {
RegKeyClearFlags = 0,
RegKeyDontVirtualize = 2,
RegKeyDontSilentFail = 4,
RegKeyRecurseFlag = 8
} CONTROL_FLAGS;O código acima fornece a mesma informação que invocar REG.EXE EMBANDEIRA HKLM \ software \ o que PERGUNTA.
Outra vez - anote que esta exploração estêve feita em Windows Vista SP1. Eu esperaria o índice aqui aplicar-se também a Windows Vista (nenhum SP) as well as o usuário 2008 de Windows, mas… popularidade: 3%
Escrito/de  “\/\ Ø|² DE ö±à \/” ®©. As alimentações mais grandes lidas em são fonte WEB SITE
nenhuns comentários.
Leia mais artigos sobre Forum de Sysinternals e virtualization do registro e bandeiras de reg.exe e NtQueryKey e REG_KEY_DONT_VIRTUALIZE and flags and vista and otherSoftware and REG_KEY_DONT_SILENT_FAIL and reg and Virtualization.
- [+] Digg: Feature this article
- [+] Del.icio.us: Bookmark this article
- [+] Furl: Bookmark this article















