[vlc-devel] [PATCH] winvlc: Try to load DLLs from system32 before any other folder
Steve Lhomme
robux4 at gmail.com
Fri Mar 10 14:52:54 CET 2017
On Fri, Mar 10, 2017 at 2:49 PM, Hugo Beauzée-Luyssen <hugo at beauzee.fr> wrote:
> ---
> bin/winvlc.c | 36 ++++++++++++++++++++++++++++++++++++
> 1 file changed, 36 insertions(+)
>
> diff --git a/bin/winvlc.c b/bin/winvlc.c
> index ce44f5dd29..085a908fed 100644
> --- a/bin/winvlc.c
> +++ b/bin/winvlc.c
> @@ -78,7 +78,39 @@ static BOOL SetDefaultDllDirectories_(DWORD flags)
> return SetDefaultDllDirectoriesReal(flags);
> }
> # define SetDefaultDllDirectories SetDefaultDllDirectories_
> +
> +#endif
> +
> +static void PrioritizeSystem32()
> +{
> +#if _WIN32_WINNT < _WIN32_WINNT_WIN10
> + typedef struct _PROCESS_MITIGATION_IMAGE_LOAD_POLICY {
> + union {
> + DWORD Flags;
> + struct {
> + DWORD NoRemoteImages :1;
> + DWORD NoLowMandatoryLabelImages :1;
> + DWORD PreferSystem32Images :1;
> + DWORD ReservedFlags :29;
> + };
> + };
> + } PROCESS_MITIGATION_IMAGE_LOAD_POLICY;
Are these the official names ? Because they may collide when it's
added with mingw or when compiled with MS headers.
> +#if _WIN32_WINNT < _WIN32_WINNT_WIN8
> + BOOL WINAPI (*SetProcessMitigationPolicy)(PROCESS_MITIGATION_POLICY, PVOID, SIZE_T);
> + HINSTANCE h_Kernel32 = GetModuleHandle(TEXT("kernel32.dll"));
> + if ( !h_Kernel32 )
> + return;
> + SetProcessMitigationPolicy = (BOOL (WINAPI *)(PROCESS_MITIGATION_POLICY, PVOID, SIZE_T))
> + GetProcAddress(h_Kernel32, "SetProcessMitigationPolicy");
> + if (SetProcessMitigationPolicy == NULL)
> + return;
> +#endif
> #endif
> + PROCESS_MITIGATION_IMAGE_LOAD_POLICY m;
> + m.Flags = 0;
> + m.PreferSystem32Images = 1;
> + SetProcessMitigationPolicy( 10 /* ProcessImageLoadPolicy */, &m, sizeof( m ) );
> +}
>
> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
> LPSTR lpCmdLine,
> @@ -126,6 +158,10 @@ int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
> * will search in SYSTEM32 only
> * */
> SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32);
> + /***
> + * Load DLLs from system32 before any other folder (when possible)
> + */
> + PrioritizeSystem32();
>
> /* Args */
> wchar_t **wargv = CommandLineToArgvW (GetCommandLine (), &argc);
> --
> 2.11.0
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
More information about the vlc-devel
mailing list