OSDN Git Service

receive return code of injected code by GetExitCodeThread()
authorU-i7\gimy <gimy@users.sourceforge.jp>
Thu, 13 Aug 2009 15:25:40 +0000 (00:25 +0900)
committerU-i7\gimy <gimy@users.sourceforge.jp>
Thu, 13 Aug 2009 15:25:40 +0000 (00:25 +0900)
continue search of winlogon.exe even if ProcessIdToSessionId() failed
add comment that Windows7 may not support Scancode Map on HKCU

fixscancodemap.cpp

index a99a77d..3c36936 100755 (executable)
@@ -13,10 +13,7 @@ typedef BOOL (WINAPI *FpImpersonateLoggedOnUser)(HANDLE);
 typedef BOOL (WINAPI *FpRevertToSelf)(VOID);\r
 typedef BOOL (WINAPI *FpCloseHandle)(HANDLE);\r
 \r
-typedef BOOL (WINAPI *FpRegisterShellHook)(HWND, DWORD);\r
-\r
 typedef struct {\r
-       DWORD retval_;\r
        DWORD pid_;\r
        TCHAR advapi32_[64];\r
        CHAR impersonateLoggedOnUser_[32];\r
@@ -39,8 +36,6 @@ static DWORD invokeFunc(InjectInfo *info)
        FpRevertToSelf pRevertToSelf;\r
        FpOpenProcessToken pOpenProcessToken;\r
 \r
-       info->retval_ = 0;\r
-\r
        hAdvapi32 = info->pGetModuleHandle(info->advapi32_);\r
 \r
        pImpersonateLoggedOnUser = (FpImpersonateLoggedOnUser)info->pGetProcAddress(hAdvapi32, info->impersonateLoggedOnUser_);\r
@@ -49,28 +44,24 @@ static DWORD invokeFunc(InjectInfo *info)
 \r
        HANDLE hProcess = info->pOpenProcess(PROCESS_QUERY_INFORMATION, FALSE, info->pid_);\r
        if (hProcess == NULL) {\r
-               info->retval_ = 1;\r
-               return 0;\r
+               return 1;\r
        }\r
 \r
        ret = pOpenProcessToken(hProcess, TOKEN_QUERY | TOKEN_DUPLICATE , &hToken);\r
        if (ret == FALSE) {\r
-               info->retval_ = 2;\r
-               return 0;\r
+               return 2;\r
        }\r
 \r
        ret = pImpersonateLoggedOnUser(hToken);\r
        if (ret == FALSE) {\r
-               info->retval_ = 3;\r
-               return 0;\r
+               return 3;\r
        }\r
 \r
        info->pUpdate(0, 1);\r
 \r
        ret = pRevertToSelf();\r
        if (ret == FALSE) {\r
-               info->retval_ = 4;\r
-               return 0;\r
+               return 4;\r
        }\r
 \r
        info->pCloseHandle(hToken);\r
@@ -91,7 +82,7 @@ int FixScancodeMap::acquirePrivileges()
        }\r
 \r
        LUID luid;\r
-       if (!LookupPrivilegeValue(NULL, _T("SeDebugPrivilege"), &luid)) {\r
+       if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid)) {\r
                ret = 2;\r
                goto exit;\r
        }\r
@@ -136,14 +127,11 @@ DWORD FixScancodeMap::getWinLogonPid()
                if (!_tcscmp(pe.szExeFile, _T("winlogon.exe"))) {\r
                        DWORD sessionId;\r
 \r
-                       if (ProcessIdToSessionId(pe.th32ProcessID, &sessionId) == FALSE) {\r
-                               pid = 0;\r
-                               break;\r
-                       }\r
-\r
-                       if (sessionId == mySessionId) {\r
-                               pid = pe.th32ProcessID;\r
-                               break;\r
+                       if (ProcessIdToSessionId(pe.th32ProcessID, &sessionId) != FALSE) {\r
+                               if (sessionId == mySessionId) {\r
+                                       pid = pe.th32ProcessID;\r
+                                       break;\r
+                               }\r
                        }\r
                }\r
                bResult = Process32Next(hSnap, &pe);\r
@@ -266,6 +254,9 @@ int FixScancodeMap::injectThread(DWORD dwPID)
                ret = 5;\r
                goto exit;\r
        }\r
+       DWORD result = -1;\r
+       GetExitCodeThread(hThread, &result);\r
+       ret = result;\r
        CloseHandle(hThread);\r
 \r
 exit:\r
@@ -319,6 +310,8 @@ int FixScancodeMap::fix()
 {\r
        ScancodeMap *origMap, *fixMap;\r
        Registry reg(HKEY_CURRENT_USER, _T("Keyboard Layout"));\r
+       // Windows7 RC not support Scancode Map on HKCU?\r
+       //Registry reg(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\Control\\Keyboard Layout"));\r
        DWORD origSize, fixSize;\r
        bool ret;\r
        int result = 0;\r