3 #include "registry.h"
\r
5 typedef HMODULE (WINAPI *FpGetModuleHandleW)(LPCWSTR);
\r
6 typedef FARPROC (WINAPI *FpGetProcAddress)(HMODULE, LPCSTR);
\r
7 typedef BOOL (WINAPI *FpUpdatePerUserSystemParameters4)(BOOL);
\r
8 typedef BOOL (WINAPI *FpUpdatePerUserSystemParameters8)(DWORD, BOOL);
\r
9 typedef HANDLE (WINAPI *FpOpenProcess)(DWORD, BOOL, DWORD);
\r
10 typedef BOOL (WINAPI *FpOpenProcessToken)(HANDLE, DWORD, PHANDLE);
\r
11 typedef BOOL (WINAPI *FpImpersonateLoggedOnUser)(HANDLE);
\r
12 typedef BOOL (WINAPI *FpRevertToSelf)(VOID);
\r
13 typedef BOOL (WINAPI *FpCloseHandle)(HANDLE);
\r
16 DWORD isVistaOrLater_;
\r
18 TCHAR advapi32_[64];
\r
19 CHAR impersonateLoggedOnUser_[32];
\r
20 CHAR revertToSelf_[32];
\r
21 CHAR openProcessToken_[32];
\r
22 FpGetModuleHandleW pGetModuleHandle;
\r
23 FpGetProcAddress pGetProcAddress;
\r
24 FpUpdatePerUserSystemParameters4 pUpdate4;
\r
25 FpUpdatePerUserSystemParameters8 pUpdate8;
\r
26 FpOpenProcess pOpenProcess;
\r
27 FpCloseHandle pCloseHandle;
\r
30 class FixScancodeMap {
\r
42 LPVOID m_remoteInfo;
\r
47 static const DWORD s_fixEntryNum;
\r
48 static const DWORD s_fixEntry[];
\r
52 UINT m_messageOnFail;
\r
53 int m_errorOnConstruct;
\r
54 DWORD m_winlogonPid;
\r
55 std::list<WlInfo> m_wlTrash;
\r
61 HANDLE m_hRestoreEvent;
\r
62 HANDLE m_hQuitEvent;
\r
64 unsigned m_threadId;
\r
67 int acquirePrivileges();
\r
68 DWORD getWinLogonPid();
\r
69 static bool clean(WlInfo wl);
\r
70 int injectThread(DWORD dwPID);
\r
74 static unsigned int WINAPI threadLoop(void *i_this);
\r
80 int init(HWND i_hwnd, UINT i_messageOnFail);
\r
81 int escape(bool i_escape);
\r