OSDN Git Service

prototype of UpdatePerUserSystemParameters differ by vista or earlier
[yamy/yamy.git] / fixscancodemap.h
1 #include <list>\r
2 #include <windows.h>\r
3 #include "registry.h"\r
4 \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
14 \r
15 typedef struct {\r
16         DWORD isVistaOrLater_;\r
17         DWORD pid_;\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
28 } InjectInfo;\r
29 \r
30 class FixScancodeMap {\r
31 private:\r
32         typedef struct {\r
33                 DWORD header1;\r
34                 DWORD header2;\r
35                 DWORD count;\r
36                 DWORD entry[1];\r
37         } ScancodeMap;\r
38 \r
39         typedef struct {\r
40                 HANDLE m_hProcess;\r
41                 LPVOID m_remoteMem;\r
42                 LPVOID m_remoteInfo;\r
43                 HANDLE m_hThread;\r
44         } WlInfo;\r
45 \r
46 private:\r
47         static const DWORD s_fixEntryNum;\r
48         static const DWORD s_fixEntry[];\r
49 \r
50 private:\r
51         int m_errorOnConstruct;\r
52         DWORD m_winlogonPid;\r
53         std::list<WlInfo> m_wlTrash;\r
54         InjectInfo m_info;\r
55         Registry m_regHKCU;\r
56         Registry m_regHKLM;\r
57         Registry *m_pReg;\r
58 \r
59 private:\r
60         int acquirePrivileges();\r
61         DWORD getWinLogonPid();\r
62         static bool clean(WlInfo wl);\r
63         int injectThread(DWORD dwPID);\r
64         int update();\r
65 \r
66 public:\r
67         FixScancodeMap();\r
68         ~FixScancodeMap();\r
69 \r
70         int fix();\r
71         int restore();\r
72 };\r