Я проголосовал за ответ @ dyared, потому что он помог мне найти полный ответ. Прежде всего я должен упомянуть, что я не специализируюсь в этом вопросе, и это лишь краткое изложение моих выводов.
Кажется, что пример MSDN не работает с указанной строкой SID , поскольку он указывает на слишком низкий уровень целостности. Исходя из исходного кода Chromium , SID S-1-16-1024
, используемый в примере, находится в диапазоне от INTEGRITY_LEVEL_BELOW_LOW
до INTEGRITY_LEVEL_UNTRUSTED
:
const wchar_t* GetIntegrityLevelString(IntegrityLevel integrity_level) {
switch (integrity_level) {
case INTEGRITY_LEVEL_SYSTEM:
return L"S-1-16-16384";
case INTEGRITY_LEVEL_HIGH:
return L"S-1-16-12288";
case INTEGRITY_LEVEL_MEDIUM:
return L"S-1-16-8192";
case INTEGRITY_LEVEL_MEDIUM_LOW:
return L"S-1-16-6144";
case INTEGRITY_LEVEL_LOW:
return L"S-1-16-4096";
case INTEGRITY_LEVEL_BELOW_LOW:
return L"S-1-16-2048";
case INTEGRITY_LEVEL_UNTRUSTED:
return L"S-1-16-0";
case INTEGRITY_LEVEL_LAST:
return NULL;
}
Более того, похоже, что SID S-1-16-4096
, предложенный @dyared, также используется при запуске Internet Explorer в защищенном режиме, как это было заявлено в Создание процесса в защищенном режиме в Windows Vista , статья о Блоги MSDN.
Однако то, что этого примера было достаточно, не означает, что он достаточно строг для каждой ситуации, и выбор соответствующего уровня целостности должен быть сделан с пониманием его последствий.