Как я могу обновить PROC_THREAD_ATTRIBUTE_LIST для моего процесса? - PullRequest
0 голосов
/ 31 декабря 2018

Скажем, когда мой процесс был создан с использованием STARTUPINFOEX struct и PROC_THREAD_ATTRIBUTE_LIST member:

DWORD ProtectionLevel = PROTECTION_LEVEL_SAME;
SIZE_T AttributeListSize;
STARTUPINFOEXW StartupInfoEx = { 0 };


StartupInfoEx.StartupInfo.cb = sizeof(StartupInfoEx);


InitializeProcThreadAttributeList(NULL, 1, 0, &AttributeListSize)


StartupInfoEx.lpAttributeList = (LPPROC_THREAD_ATTRIBUTE_LIST) HeapAlloc(
GetProcessHeap(),
0,
AttributeListSize
);


if (InitializeProcThreadAttributeList(StartupInfoEx.lpAttributeList,
1,
0,
&AttributeListSize) == FALSE)
{
Result = GetLastError();
goto exitFunc;
}


if (UpdateProcThreadAttribute(StartupInfoEx.lpAttributeList,
0,
PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL,
&ProtectionLevel,
sizeof(ProtectionLevel),
NULL,
NULL) == FALSE)
{
Result = GetLastError();
goto exitFunc;
}


PROCESS_INFORMATION ProcessInformation = { 0 };


if (CreateProcessW(ApplicationName,
CommandLine,
ProcessAttributes,
ThreadAttributes,
InheritHandles,
EXTENDED_STARTUPINFO_PRESENT | CREATE_PROTECTED_PROCESS,
Environment,
CurrentDirectory,
(LPSTARTUPINFOW)&StartupInfoEx,
&ProcessInformation) == FALSE)
{
Result = GetLastError();
goto exitFunc;
}

Как я могу обновить этот список атрибутов для своего собственного процесса?

Например, я хочу изменить свой собственный процесс 'PROC_THREAD_ATTRIBUTE_CHILD_PROCESS_POLICY, чтобы он не мог создавать дочерние процессы.

1 Ответ

0 голосов
/ 10 января 2019

Это не полностью отвечает на мой вопрос.Это продолжение ветки комментариев к моему оригинальному сообщению выше.

Так что просто для отключения создания дочерних процессов (аналогично PROC_THREAD_ATTRIBUTE_CHILD_PROCESS_POLICY) можно включить эту функцию для своего собственного процесса следующим образом:

DWORD dwNoChild = 1;
BOOL bResult = ::SetProcessMitigationPolicy((PROCESS_MITIGATION_POLICY)13 /*ProcessChildProcessPolicy*/, 
    &dwNoChild, sizeof(dwNoChild));

Обратите внимание, что ваш процесс не имеетбыть возвышенным для этого, чтобы работать.

(Не держите меня за это, но я думаю, что флаг ProcessChildProcessPolicy поддерживается только в Windows 10.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...