OSDN Git Service

If there is hunged process, injection thread stall and when hunged process restart...
[yamy/yamy.git] / fixscancodemap.h
1 #include <windows.h>\r
2 #include "registry.h"\r
3 \r
4 typedef HMODULE (WINAPI *FpGetModuleHandleW)(LPCWSTR);\r
5 typedef FARPROC (WINAPI *FpGetProcAddress)(HMODULE, LPCSTR);\r
6 typedef BOOL (WINAPI *FpUpdatePerUserSystemParameters)(DWORD, BOOL);\r
7 typedef HANDLE (WINAPI *FpOpenProcess)(DWORD, BOOL, DWORD);\r
8 typedef BOOL (WINAPI *FpOpenProcessToken)(HANDLE, DWORD, PHANDLE);\r
9 typedef BOOL (WINAPI *FpImpersonateLoggedOnUser)(HANDLE);\r
10 typedef BOOL (WINAPI *FpRevertToSelf)(VOID);\r
11 typedef BOOL (WINAPI *FpCloseHandle)(HANDLE);\r
12 \r
13 typedef struct {\r
14         DWORD pid_;\r
15         TCHAR advapi32_[64];\r
16         CHAR impersonateLoggedOnUser_[32];\r
17         CHAR revertToSelf_[32];\r
18         CHAR openProcessToken_[32];\r
19         FpGetModuleHandleW pGetModuleHandle;\r
20         FpGetProcAddress pGetProcAddress;\r
21         FpUpdatePerUserSystemParameters pUpdate;\r
22         FpOpenProcess pOpenProcess;\r
23         FpCloseHandle pCloseHandle;\r
24 } InjectInfo;\r
25 \r
26 class FixScancodeMap {\r
27 private:\r
28         typedef struct {\r
29                 DWORD header1;\r
30                 DWORD header2;\r
31                 DWORD count;\r
32                 DWORD entry[1];\r
33         } ScancodeMap;\r
34 \r
35 private:\r
36         static const DWORD s_fixEntryNum;\r
37         static const DWORD s_fixEntry[];\r
38 \r
39 private:\r
40         HANDLE m_hProcess;\r
41         LPVOID m_remoteMem;\r
42         LPVOID m_remoteInfo;\r
43         HANDLE m_hThread;\r
44         InjectInfo m_info;\r
45         Registry m_regHKCU;\r
46         Registry m_regHKLM;\r
47         Registry *m_pReg;\r
48 \r
49 private:\r
50         int acquirePrivileges();\r
51         DWORD getWinLogonPid();\r
52         int clean();\r
53         int injectThread(DWORD dwPID);\r
54         int update();\r
55 \r
56 public:\r
57         FixScancodeMap();\r
58         ~FixScancodeMap();\r
59 \r
60         int fix();\r
61         int restore();\r
62 };\r