#endif // LOG_TO_FILE\r
\r
HMENU m_hMenuTaskTray; /// tasktray menu\r
+#ifdef _WIN64\r
+ HANDLE m_hMutexYamyd;\r
STARTUPINFO m_si;\r
PROCESS_INFORMATION m_pi;\r
+#endif // _WIN64\r
HANDLE m_mutex;\r
#ifdef USE_MAILSLOT\r
HANDLE m_hNotifyMailslot; /// mailslot to receive notify\r
// set initial lock state\r
notifyLockState();\r
\r
- BOOL result;\r
-\r
+#ifdef _WIN64\r
ZeroMemory(&m_pi,sizeof(m_pi));\r
ZeroMemory(&m_si,sizeof(m_si));\r
m_si.cb=sizeof(m_si);\r
-#ifdef _WIN64\r
- result = CreateProcess(_T("yamyd32"), _T("yamyd32"), NULL, NULL, FALSE,\r
+\r
+ // create mutex to block yamyd\r
+ m_hMutexYamyd = CreateMutex((SECURITY_ATTRIBUTES *)NULL, TRUE, MUTEX_YAMYD_BLOCKER);\r
+\r
+ BOOL result = CreateProcess(_T("yamyd32"), _T("yamyd32"), NULL, NULL, FALSE,\r
NORMAL_PRIORITY_CLASS, 0, NULL, &m_si, &m_pi);\r
if (result == FALSE) {\r
TCHAR buf[1024];\r
TCHAR text[1024];\r
TCHAR title[1024];\r
\r
+ m_pi.hProcess = NULL;\r
LoadString(GetModuleHandle(NULL), IDS_cannotInvoke,\r
text, sizeof(text)/sizeof(text[0]));\r
LoadString(GetModuleHandle(NULL), IDS_mayu,\r
MessageBox((HWND)NULL, buf, title, MB_OK | MB_ICONSTOP);\r
} else {\r
CloseHandle(m_pi.hThread);\r
- CloseHandle(m_pi.hProcess);\r
}\r
#endif // _WIN64\r
}\r
// stop notify from mayu.dll\r
g_hookData->m_hwndTaskTray = NULL;\r
CHECK_FALSE( uninstallMessageHook() );\r
- PostMessage(HWND_BROADCAST, WM_NULL, 0, 0);\r
+\r
+#ifdef _WIN64\r
+ ReleaseMutex(m_hMutexYamyd);\r
+ if (m_pi.hProcess) {\r
+ WaitForSingleObject(m_pi.hProcess, 5000);\r
+ CloseHandle(m_pi.hProcess);\r
+ }\r
+ CloseHandle(m_hMutexYamyd);\r
+#endif // _WIN64\r
+ if (!(m_sessionState & SESSION_END_QUERIED)) {\r
+ DWORD_PTR result;\r
+ SendMessageTimeout(HWND_BROADCAST, WM_NULL, 0, 0, SMTO_ABORTIFHUNG, 3000, &result);\r
+ }\r
\r
// destroy windows\r
CHECK_TRUE( DestroyWindow(m_hwndVersion) );\r
int WINAPI _tWinMain(HINSTANCE /* i_hInstance */, HINSTANCE /* i_hPrevInstance */,\r
LPTSTR /* i_lpszCmdLine */, int /* i_nCmdShow */)\r
{\r
- HANDLE mutex = OpenMutex(SYNCHRONIZE, FALSE, MUTEX_MAYU_EXCLUSIVE_RUNNING);\r
+ HANDLE mutex = OpenMutex(SYNCHRONIZE, FALSE, MUTEX_YAMYD_BLOCKER);\r
if (mutex != NULL) {\r
CHECK_FALSE( installMessageHook() );\r
\r
ReleaseMutex(mutex);\r
\r
CHECK_FALSE( uninstallMessageHook() );\r
- PostMessage(HWND_BROADCAST, WM_NULL, 0, 0);\r
}\r
\r
return 0;\r