低完整性进程可以创建一个命名的突变对象吗?

Can low integrity process create a named mutant object?

我正在尝试从低完整性进程创建一个新的命名突变体。此代码在高完整性过程中运行良好,但在低完整性和中等完整性过程中失败。

RtlInitUnicodeString(&Name, L"\MutantName");
InitializeObjectAttributes(&Attr, &Name, OBJ_INHERIT | OBJ_OPENIF, NULL, NULL);
NTStatus = NtCreateMutant(&Mutant, MUTANT_ALL_ACCESS, &Attr, 0);

我得到 NTStatus = ERROR_ACCESS_DENIED (0xc0000022)

是否可以从低完整性进程创建突变体?如果是 - 有人知道我做错了什么吗?谢谢!

低完整性进程只能在具有低强制标签的对象目录中创建对象。根对象目录没有此标签。 \BaseNamedObjects 可以,所以你可以从低完整性进程中创建你的突变体:

RtlInitUnicodeString(&Name, L"\BaseNamedObjects\MutantName");