命名互斥的不同HANDLE结果

DIfferent HANDLE results for Named Mutexes

本文关键字:HANDLE 结果      更新时间:2023-10-16

OpenMutex()总是返回不同的句柄地址是正常的吗?文档表示,如果成功,则返回HANDLE,否则返回NULL

OpenMutex的每个实例都返回不同的句柄。。。

m_ logMutex定义为CCD_。

m_logMutex = OpenMutex(SYNCHRONIZE, FALSE, LOGMUTEX);
if(m_logMutex == NULL) {
m_logMutex = CreateMutex(NULL, FALSE, LOGMUTEX); 
}

此外,既然这是命名的,为什么还要有一个静态HANDLE?这是一个程序的一部分,该程序可以将来自不同进程的数千个事务归档到同一个数据库中。我发现我的静态句柄被更改为不同的句柄,并导致WAIT_FAILED错误

这里有一个细微的区别:调用不会返回句柄。该调用返回一个句柄。

只要检索到的句柄允许您执行要求的操作(即安全权限),一切都很好。只是不要对没有明确记录的句柄进行任何假设。

此外,既然这是命名的,为什么还要有一个静态HANDLE?这是一个程序的一部分,该程序可以将来自不同进程的数千个事务归档到同一个数据库中。

static指的是您的变量。它不是句柄本身的属性。

我发现我的静态HANDLE被更改为不同的句柄,并导致WAIT_FAILED错误

只要你不关闭句柄(可能在需要的地方正确地关闭DuplicateHandle()),这种情况就不应该发生。如果你CloseHandle()它,它当然会失效。如果您在程序的各个部分之间传递句柄,出于同样的原因,您应该小心句柄的所有权。如果在进程之间传递句柄,则必须调用DuplicateHandle()

除此之外,它非常简单。把手上没有黑魔法。