6

作成中の名前付きパイプへのアクセスを全員に許可する必要があります。その方法は、NULL/空の DACL を作成して に渡すことだと理解していますCreateNamedPipe

NULL DACL を作成するにはどうすればよいですか? に NULL ポインタを渡すのと同じではないと言われましたLPSECURITY_ATTRIBUTES

4

3 に答える 3

11

このような:

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 を使用しないでください。これにより、オブジェクトの使用が妨げられます。

したがって、上記はその方法ですが、ドキュメントではそうすべきではないことを強調しています。

于 2013-01-24T13:34:00.977 に答える
4

プロジェクトの 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);

このコードは、すべてのアクセス権を持つマッピングを作成します

于 2013-01-24T13:36:18.833 に答える