ShellExecRunDLL

BOOL CreateProcessFromShell32ShellExecRunW(_In_ LPCWSTR PathToFile)
{
	typedef VOID(WINAPI* SHELLEXEC_RUNDLLW)(HWND, HINSTANCE, LPCWSTR, INT);
	SHELLEXEC_RUNDLLW ShellExec_RunDllW = NULL;
	HMODULE hMod = NULL;
	BOOL bFlag = FALSE;

	hMod = LoadLibraryW(L"shell32.dll");
	if (hMod == NULL)
		goto EXIT_ROUTINE;

	ShellExec_RunDllW = (SHELLEXEC_RUNDLLW)GetProcAddress(hMod, "ShellExec_RunDLLW");
	if (!ShellExec_RunDllW)
		goto EXIT_ROUTINE;

	ShellExec_RunDllW(NULL, NULL, PathToFile, SW_SHOW);

	bFlag = TRUE;

EXIT_ROUTINE:


	return bFlag;
}

BOOL CreateProcessFromShell32ShellExecRunA(_In_ LPCSTR PathToFile)
{
	typedef VOID(WINAPI* SHELLEXEC_RUNDLLA)(HWND, HINSTANCE, LPCSTR, INT);
	SHELLEXEC_RUNDLLA ShellExec_RunDllA = NULL;
	HMODULE hMod = NULL;
	BOOL bFlag = FALSE;

	hMod = LoadLibraryW(L"shell32.dll");
	if (hMod == NULL)
		goto EXIT_ROUTINE;

	ShellExec_RunDllA = (SHELLEXEC_RUNDLLA)GetProcAddress(hMod, "ShellExec_RunDLLA");
	if (!ShellExec_RunDllA)
		goto EXIT_ROUTINE;

	ShellExec_RunDllA(NULL, NULL, PathToFile, SW_SHOW);

	bFlag = TRUE;

EXIT_ROUTINE:

	return bFlag;
}

Last updated