我想关闭位于另一个进程中的互斥体的句柄,以便我可以运行该应用程序的多个实例。关闭另一个进程中互斥锁的句柄
我已经知道这可以做到,see Process Explorer。例如:Windows 扫雷(Windows 7)使用互斥体只允许一个游戏,所以我想我会用它作为一个例子,因为它预装了Windows,因此更容易让你们引导我。
我需要关闭的互斥锁是\Sessions\1\BaseNamedObjects\Oberon_Minesweeper_Singleton
,我发现它使用Process Explorer。
关闭此互斥锁后,我能够启动扫雷两场比赛,但我想在我的程序中使用C++执行此操作。
经过一番搜索后,我发现我可能需要API DuplicateHandle。到目前为止,我还没有能够关闭这个互斥量的句柄。
这是到目前为止我的代码:
#include <Windows.h>
#include <iostream>
using namespace std;
void printerror(LPSTR location){
printf("Error: %s_%d", location, GetLastError());
cin.get();
}
int main(){
DWORD pid = 0;
HWND hMineWnd = FindWindow("Minesweeper", "Minesveiper");
GetWindowThreadProcessId(hMineWnd, &pid);
HANDLE hProc =OpenProcess(PROCESS_DUP_HANDLE, 0, pid);
if(hProc == NULL){
printerror("1");
return 1;
}
HANDLE hMutex = OpenMutex(MUTEX_ALL_ACCESS, TRUE, "Oberon_Minesweeper_Singleton");
if(hMutex == NULL){
printerror("2");
return 2;
}
if(DuplicateHandle(hProc, hMutex, NULL, 0, 0, FALSE, DUPLICATE_CLOSE_SOURCE) == 0){
printerror("3");
return 3;
}
if(CloseHandle(hMutex) == 0){
printerror("4");
return 4;
}
return 0;
}
此代码返回0,但互斥量仍然存在,我不能够推出扫雷更多的游戏。我认为DuplicateHandle的一些参数是错误的。
这种互斥量在Microsoft遭受无情攻击后进入的XP SP1漏洞列表中居高不下。拒绝服务,DOS有不同的含义。你正在享受反制措施。这又是什么意思? – 2011-12-31 23:53:02
@HansPassant目标是通过互斥锁并能够运行多个相同的应用程序。 – WePro2 2012-01-01 00:02:31
您绝对*错过了“单身申请”的要点。只需在谷歌查询中输入。 – 2012-01-01 00:28:53