2013-04-30 155 views
3

我正在嘗試關閉正在使用Win32函數的Windows上的進程持有的互斥鎖。這可以通過使用procexp來完成,但我需要以編程方式執行而不使用procexp GUI。procexp如何關閉另一個進程持有的互斥鎖?

方法一: 我試過注射用EasyHook一個dll到PROCESSS,然後試圖從注入線程執行以下操作: - OpenMutex
- ReleaseMutex 它給了我大概ERROR_NOT_OWNER錯誤,因爲該版本被稱爲上與調用AcquireMutex的線程不同。

方法2: 注入dll之後,我嘗試使用mHook掛接CreateMutex。掛鉤的CreateMutex只是調用原始的CreateMutex。但是這隻會使應用程序崩潰。

我可以使用procexp關閉互斥鎖,但我需要以編程方式執行它。 procexp如何做到這一點?如何在沒有任何內核模式代碼的情況下以編程方式完成?

+2

ReleaseMutex不是它的關閉方法。你需要調用CloseHandle。你想解鎖一個互斥鎖或關閉它的句柄嗎? Process Explorer只能關閉它。 – 2013-04-30 04:43:43

+0

這是一個由進程持有的全局互斥鎖。關閉它會讓其他進程能夠獲得它嗎? – pkumar0 2013-04-30 05:37:27

+0

從文檔中不能確定,但​​我期望WaitForSingleObject成功,但錯誤代碼爲WAIT_ABANDONED。如果這不起作用,我會嘗試使用內核模式驅動程序;-) – 2013-04-30 05:47:01

回答

0

只要添加一個完整的答案。在識別互斥後,我必須添加以下代碼來處理cpp:

 HANDLE realHandle; 
    ret = DuplicateHandle(processHandle, (HANDLE)handle.Handle, GetCurrentProcess(), &realHandle, 0, TRUE, DUPLICATE_CLOSE_SOURCE); 

     if(!ret) 
       printf("DuplicateHandle Problem!"); 

     if (!CloseHandle(realHandle)) 
    { 
     printf("Problem closing the copied handle"); 
    } 
    printf("", realHandle); 
    } 
+0

顯然,如果'DuplicateHandle()'失敗,不要調用'CloseHandle()',因爲沒有什麼要關閉的。由於沒有提供格式說明符,因此最後一個'printf()'不會輸出任何內容。 – 2014-08-20 21:14:21