Я проголосовал за ответ @dyared, потому что он помог мне найти полный ответ. Прежде всего, я должен упомянуть, что я не специализируюсь в этом вопросе, и это только краткое изложение моих выводов.
Похоже, что пример MSDN не работает с указанным строка SID, так как она указывает слишком низкий уровень целостности. Из исходный код Chromium, S-1-16-1024
SID, используемый в примере, находится между 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.
Однако то, что этого было достаточно, чтобы заставить пример работать, не означает, что он достаточно строг для каждой ситуации, и выбор соответствующего уровня целостности должен осуществляться с учетом его последствий.
11.09.2015