代码之家  ›  专栏  ›  技术社区  ›  c00000fd

我如何更新我的流程?

  •  1
  • c00000fd  · 技术社区  · 7 年前

    比如说,当我的进程被创建时 STARTUPINFOEX 结构和 PROC_THREAD_ATTRIBUTE_LIST 成员:

    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 回复  |  直到 7 年前
        1
  •  0
  •   c00000fd    7 年前

    这不能完全回答我的问题。这是我在上面的原始帖子的评论线索的后续。

    所以仅用于禁用子进程的创建(类似于 PROC_THREAD_ATTRIBUTE_CHILD_PROCESS_POLICY )可以为自己的进程启用此特性:

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

    请注意,您的流程不必提升才能正常工作。

    (别逼我,但我想 ProcessChildProcessPolicy 标志仅在Windows 10上受支持。)