From: Eric Pouech epouech@codeweavers.com
Let the sub-process be created, without implementing any additional behavior from these flags.
Native cmd.exe uses this flag when spawning itself again for handling builtin commands inside a pipe.
Signed-off-by: Eric Pouech epouech@codeweavers.com --- dlls/kernelbase/process.c | 6 ++++++ include/winbase.h | 3 +++ 2 files changed, 9 insertions(+)
diff --git a/dlls/kernelbase/process.c b/dlls/kernelbase/process.c index 2d08481cd35..6ef21441aaf 100644 --- a/dlls/kernelbase/process.c +++ b/dlls/kernelbase/process.c @@ -595,6 +595,9 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessInternalW( HANDLE token, const WCHAR goto done; } break; + case PROC_THREAD_ATTRIBUTE_EXTENDED_FLAGS: + FIXME("PROC_THREAD_ATTRIBUTE_EXTENDED_FLAGS %lx.\n", *(ULONG *)attrs->attrs[i].value); + break; case PROC_THREAD_ATTRIBUTE_HANDLE_LIST: handle_list = &attrs->attrs[i]; TRACE("PROC_THREAD_ATTRIBUTE_HANDLE_LIST handle count %Iu.\n", attrs->attrs[i].size / sizeof(HANDLE)); @@ -1766,6 +1769,9 @@ static inline DWORD validate_proc_thread_attribute( DWORD_PTR attr, SIZE_T size case PROC_THREAD_ATTRIBUTE_PARENT_PROCESS: if (size != sizeof(HANDLE)) return ERROR_BAD_LENGTH; break; + case PROC_THREAD_ATTRIBUTE_EXTENDED_FLAGS: + if (size != sizeof(ULONG)) return ERROR_BAD_LENGTH; + break; case PROC_THREAD_ATTRIBUTE_HANDLE_LIST: if ((size / sizeof(HANDLE)) * sizeof(HANDLE) != size) return ERROR_BAD_LENGTH; break; diff --git a/include/winbase.h b/include/winbase.h index c775ab71694..1eb6d5d9a6a 100644 --- a/include/winbase.h +++ b/include/winbase.h @@ -1680,6 +1680,7 @@ typedef struct _PROC_THREAD_ATTRIBUTE_LIST typedef enum _PROC_THREAD_ATTRIBUTE_NUM { ProcThreadAttributeParentProcess = 0, + ProcThreadAttributeExtendedFlags = 1, ProcThreadAttributeHandleList = 2, ProcThreadAttributeGroupAffinity = 3, ProcThreadAttributePreferredNode = 4, @@ -1703,6 +1704,8 @@ typedef enum _PROC_THREAD_ATTRIBUTE_NUM } PROC_THREAD_ATTRIBUTE_NUM;
#define PROC_THREAD_ATTRIBUTE_PARENT_PROCESS (ProcThreadAttributeParentProcess | PROC_THREAD_ATTRIBUTE_INPUT) +/* undocumented */ +#define PROC_THREAD_ATTRIBUTE_EXTENDED_FLAGS (ProcThreadAttributeExtendedFlags | PROC_THREAD_ATTRIBUTE_INPUT | PROC_THREAD_ATTRIBUTE_ADDITIVE) #define PROC_THREAD_ATTRIBUTE_HANDLE_LIST (ProcThreadAttributeHandleList | PROC_THREAD_ATTRIBUTE_INPUT) #define PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY (ProcThreadAttributeGroupAffinity | PROC_THREAD_ATTRIBUTE_THREAD | PROC_THREAD_ATTRIBUTE_INPUT) #define PROC_THREAD_ATTRIBUTE_PREFERRED_NODE (ProcThreadAttributePreferredNode | PROC_THREAD_ATTRIBUTE_INPUT)