0

私の OS は UAC がオンになっている Vista で、サーバー側でグローバル Mutex オブジェクトを作成します。次に、UI を備えた AP が CreateMutex を同じ名前で使用して、サーバーで作成された Mutex オブジェクトを取得したいと考えていますが、関数は私に言わないことを教えてくれますアクセスする権利がありません。どうすればいいですか?

4

1 に答える 1

5

あなたの場合、対応するセキュリティ属性を初期化することにより、ミューテックスへのすべてのアクセスを明示的に許可する必要があると思います。

この方法でミューテックスを作成してみてください (半疑似コードと考えてください):

SECURITY_ATTRIBUTES sa;
SECURITY_DESCRIPTOR sd;
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, TRUE, NULL, FALSE);
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = &sd;
CreateMutex(&sa, ...);

ところで、 CreateMutexを使用して既存のミューテックスを開くことは問題ありません。ただし、OpenMutex では、必要なアクセス レベルを指定できます。

また、本当にグローバルなミューテックスが必要な場合は、名前の前に「Global\」を付ける必要があることに注意してください (MSDN の記事「Kernel Object Namespaces」を参照してください)。

于 2009-05-15T16:52:23.373 に答える