作成中の名前付きパイプへのアクセスを全員に許可する必要があります。その方法は、NULL/空の DACL を作成して に渡すことだと理解していますCreateNamedPipe
。
NULL DACL を作成するにはどうすればよいですか? に NULL ポインタを渡すのと同じではないと言われましたLPSECURITY_ATTRIBUTES
。
このような:
SECURITY_DESCRIPTOR SD;
InitializeSecurityDescriptor(&SD, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&SD, TRUE, NULL, FALSE);
簡潔にするためにエラーチェックを省略しました。あなたはそうしないでしょう。
次に、呼び出し時に、次CreateNamedPipe
のようにセキュリティ属性レコードを設定できます。
SA.nLength = sizeof(SA);
SA.lpSecurityDescriptor = &SD;
SA.bInheritHandle = TRUE;
状態のドキュメントSetSecurityDescriptorDacl
:
pDacl パラメータが DACL を指しておらず、bDaclPresent フラグが TRUE の場合、NULL DACL が指定されます。すべてのアクセスが許可されます。すべてのユーザーが DACL とセキュリティ記述子の所有者を変更できるため、オブジェクトで NULL DACL を使用しないでください。これにより、オブジェクトの使用が妨げられます。
したがって、上記はその方法ですが、ドキュメントではそうすべきではないことを強調しています。
プロジェクトの 1 つで使用するコードは次のとおりです。
SECURITY_DESCRIPTOR pSD;
SECURITY_ATTRIBUTES SA;
if(!InitializeSecurityDescriptor(&pSD, SECURITY_DESCRIPTOR_REVISION))
throw error;
if(!SetSecurityDescriptorDacl(&pSD, true, NULL, false))
throw error;
SA.nLength = sizeof(SA);
SA.lpSecurityDescriptor = &pSD;
SA.bInheritHandle = true;
pSA = &SA;
...
FMapping = CreateFileMapping(INVALID_HANDLE_VALUE, pSA, PAGE_READWRITE, 0, 4096, p);
このコードは、すべてのアクセス権を持つマッピングを作成します