@SetWindowsHookEx para WH_JOURNALRECORD falha no Vista / Windows 7
Estou preparando um módulo Delphi, que define um gancho em um thread para gravar uma macro:
FHandleRec := SetWindowsHookEx(WH_JOURNALRECORD, FRecordProc, HInstance, 0);
FHandlePlay := SetWindowsHookEx(WH_JOURNALPLAYBACK, FPlayProc, HInstance, 0);
Isso funciona bem no WinXP, mas no Vista / Windows 7 falha comERROR_ACCESS_DENIED
. Eu encontrei no Google est) referindo naquel). A citação
Um processo com privilégios mais baixos não pode:… Use ganchos do Diário para monitorar um processo com privilégios mais alto
Tentei sem sucesso:
xecute o aplicativo como administrador. Provavelmente, o encadeamento é iniciado com privilégios mais baixos que o encadeamento principal (embora eu não tenha 100% de certeza) A representação do encadeamento com o contexto de segurança do administrador também não ajuda.O exemplo de código:
if LogonUser(PWideChar(sAdminUser), PWideChar(sDomain), PWideChar(sPwd),
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hToken) then
begin
if not ImpersonateLoggedOnUser(hToken) then
raise Exception.Create('Error impersonating the user');
end;
FHandleRec := SetWindowsHookEx(WH_JOURNALRECORD, FRecordProc, HInstance, 0);
LogonUser
eImpersonateLoggedOnUser
executar sem erros.
Outras possibilidades de experimentar:
Desative o UAC permanentemente. Isso ajuda, mas não posso forçar os usuários do módulo a fazer iss cliente do módulo @A assina um aplicativo e o coloca em um local confiável. Não tentei isso, mas isso complica radicalmente o uso do módulo para os usuário Coloque o módulo em algum aplicativo assinado e distribua o EXE. Isso quebrará algumas funcionalidades principais.Você pode mostrar o código que está definindo o gancho em Visa / Windows 7 ou sugerir a solução que está funcionand