From 808653a9b6f2d9cb6aedf21533dd628f58050195 Mon Sep 17 00:00:00 2001 From: James Ross-Gowan Date: Sun, 6 Dec 2015 11:40:41 +1100 Subject: win32: remove ProcThreadAttributeList dynamic loading These are always available in supported Windows versions, as is the EXTENDED_STARTUPINFO_PRESENT flag. --- osdep/subprocess-win.c | 42 ++++++------------------------------------ 1 file changed, 6 insertions(+), 36 deletions(-) (limited to 'osdep') diff --git a/osdep/subprocess-win.c b/osdep/subprocess-win.c index 3f0330958b..44f6d2bb68 100644 --- a/osdep/subprocess-win.c +++ b/osdep/subprocess-win.c @@ -137,15 +137,7 @@ error: static void delete_handle_list(void *p) { LPPROC_THREAD_ATTRIBUTE_LIST list = p; - VOID (WINAPI *pDeleteProcThreadAttributeList)(LPPROC_THREAD_ATTRIBUTE_LIST); - - HMODULE kernel32 = GetModuleHandleW(L"kernel32.dll"); - pDeleteProcThreadAttributeList = - (VOID (WINAPI*)(LPPROC_THREAD_ATTRIBUTE_LIST)) - GetProcAddress(kernel32, "DeleteProcThreadAttributeList"); - - if (pDeleteProcThreadAttributeList) - pDeleteProcThreadAttributeList(list); + DeleteProcThreadAttributeList(list); } // Create a PROC_THREAD_ATTRIBUTE_LIST that specifies exactly which handles are @@ -153,38 +145,21 @@ static void delete_handle_list(void *p) static LPPROC_THREAD_ATTRIBUTE_LIST create_handle_list(void *ctx, HANDLE *handles, int num) { - WINBOOL (WINAPI *pInitializeProcThreadAttributeList)( - LPPROC_THREAD_ATTRIBUTE_LIST, DWORD, DWORD, PSIZE_T); - WINBOOL (WINAPI *pUpdateProcThreadAttribute)(LPPROC_THREAD_ATTRIBUTE_LIST, - DWORD, DWORD_PTR, PVOID, SIZE_T, PVOID, PSIZE_T); - - // Load Windows Vista functions, if available - HMODULE kernel32 = GetModuleHandleW(L"kernel32.dll"); - pInitializeProcThreadAttributeList = - (WINBOOL (WINAPI*)(LPPROC_THREAD_ATTRIBUTE_LIST, DWORD, DWORD, PSIZE_T)) - GetProcAddress(kernel32, "InitializeProcThreadAttributeList"); - pUpdateProcThreadAttribute = - (WINBOOL (WINAPI*)(LPPROC_THREAD_ATTRIBUTE_LIST, DWORD, DWORD_PTR, - PVOID, SIZE_T, PVOID, PSIZE_T)) - GetProcAddress(kernel32, "UpdateProcThreadAttribute"); - if (!pInitializeProcThreadAttributeList || !pUpdateProcThreadAttribute) - return NULL; - // Get required attribute list size SIZE_T size = 0; - if (!pInitializeProcThreadAttributeList(NULL, 1, 0, &size)) { + if (!InitializeProcThreadAttributeList(NULL, 1, 0, &size)) { if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) return NULL; } // Allocate attribute list LPPROC_THREAD_ATTRIBUTE_LIST list = talloc_size(ctx, size); - if (!pInitializeProcThreadAttributeList(list, 1, 0, &size)) + if (!InitializeProcThreadAttributeList(list, 1, 0, &size)) goto error; talloc_set_destructor(list, delete_handle_list); - if (!pUpdateProcThreadAttribute(list, 0, PROC_THREAD_ATTRIBUTE_HANDLE_LIST, - handles, num * sizeof(HANDLE), NULL, NULL)) + if (!UpdateProcThreadAttribute(list, 0, PROC_THREAD_ATTRIBUTE_HANDLE_LIST, + handles, num * sizeof(HANDLE), NULL, NULL)) goto error; return list; @@ -265,7 +240,7 @@ int mp_subprocess(char **args, struct mp_cancel *cancel, void *ctx, // Convert the args array to a UTF-16 Windows command-line string wchar_t *cmdline = write_cmdline(tmp, args); - DWORD flags = CREATE_UNICODE_ENVIRONMENT; + DWORD flags = CREATE_UNICODE_ENVIRONMENT | EXTENDED_STARTUPINFO_PRESENT; PROCESS_INFORMATION pi = {0}; STARTUPINFOEXW si = { .StartupInfo = { @@ -284,11 +259,6 @@ int mp_subprocess(char **args, struct mp_cancel *cancel, void *ctx, (HANDLE[]){ pipes[0].write, pipes[1].write }, 2), }; - // PROC_THREAD_ATTRIBUTE_LISTs are only supported in Vista and up. If not - // supported, create_handle_list will return NULL. - if (si.lpAttributeList) - flags |= EXTENDED_STARTUPINFO_PRESENT; - // If we have a console, the subprocess will automatically attach to it so // it can receive Ctrl+C events. If we don't have a console, prevent the // subprocess from creating its own console window by specifying -- cgit v1.2.3