tôi đang chuẩn bị một mô-đun Delphi, mà đặt một cái móc trong một thread để ghi lại một macro:SetWindowsHookEx cho WH_JOURNALRECORD thất bại dưới Vista/Windows 7
FHandleRec := SetWindowsHookEx(WH_JOURNALRECORD, FRecordProc, HInstance, 0);
FHandlePlay := SetWindowsHookEx(WH_JOURNALPLAYBACK, FPlayProc, HInstance, 0);
Đó hoạt động tốt trên WinXP, nhưng trên Vista/Windows 7 không thành công với ERROR_ACCESS_DENIED
. Tôi đã tìm thấy trong Google (this) tham chiếu (that). Báo giá:
Quy trình đặc quyền thấp hơn không thể:… Sử dụng móc tạp chí để theo dõi quy trình đặc quyền cao hơn .
Cố gắng nhưng không thành công:
- Chạy ứng dụng as administrator. Có lẽ sợi chỉ được bắt đầu với đặc quyền thấp hơn so với sợi chính (mặc dù tôi không đảm bảo 100% )
- Mạo danh luồng có ngữ cảnh bảo mật của quản trị viên cũng không giúp ích gì.
Mẫu mã:
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
và ImpersonateLoggedOnUser
thực hiện mà không có lỗi.
khả năng khác để thử:
- tắt UAC vĩnh viễn. Điều này giúp, nhưng tôi không thể ép buộc mô-đun người dùng làm điều đó.
- Một khách hàng mô-đun ký một ứng dụng và đặt nó ở vị trí đáng tin cậy . Không thử điều đó, nhưng điều đó làm phức tạp triệt để việc sử dụng mô-đun cho người dùng.
- Đặt mô-đun vào một số ứng dụng đã ký và phân phối EXE. Điều đó sẽ phá vỡ một số chức năng cốt lõi.
Bạn vui lòng hiển thị mã đang đặt móc dưới Visa/Windows 7 hoặc đề xuất giải pháp làm việc?
Bạn cần nhúng tệp kê khai để yêu cầu người dùng cấp quyền. Tôi nghi ngờ rằng rơi vào thể loại "phức tạp triệt để". –