mirror of https://github.com/vxunderground/VX-API
50 lines
1.1 KiB
C++
50 lines
1.1 KiB
C++
#include "Win32Helper.h"
|
|
|
|
BOOL CreateProcessFromShell32ShellExecRunW(LPCWSTR PathToFile)
|
|
{
|
|
typedef VOID(WINAPI* SHELLEXEC_RUNDLLW)(HWND, HINSTANCE, LPCWSTR, INT);
|
|
SHELLEXEC_RUNDLLW ShellExec_RunDllW = NULL;
|
|
HMODULE hMod = NULL;
|
|
BOOL bFlag = FALSE;
|
|
|
|
hMod = TryLoadDllMultiMethodW((PWCHAR)L"shell32.dll");
|
|
if (hMod == NULL)
|
|
goto EXIT_ROUTINE;
|
|
|
|
ShellExec_RunDllW = (SHELLEXEC_RUNDLLW)GetProcAddressA((DWORD64)hMod, "ShellExec_RunDLLW");
|
|
if (!ShellExec_RunDllW)
|
|
goto EXIT_ROUTINE;
|
|
|
|
ShellExec_RunDllW(NULL, NULL, PathToFile, SW_SHOW);
|
|
|
|
bFlag = TRUE;
|
|
|
|
EXIT_ROUTINE:
|
|
|
|
|
|
return bFlag;
|
|
}
|
|
|
|
BOOL CreateProcessFromShell32ShellExecRunA(LPCSTR PathToFile)
|
|
{
|
|
typedef VOID(WINAPI* SHELLEXEC_RUNDLLA)(HWND, HINSTANCE, LPCSTR, INT);
|
|
SHELLEXEC_RUNDLLA ShellExec_RunDllA = NULL;
|
|
HMODULE hMod = NULL;
|
|
BOOL bFlag = FALSE;
|
|
|
|
hMod = TryLoadDllMultiMethodW((PWCHAR)L"shell32.dll");
|
|
if (hMod == NULL)
|
|
goto EXIT_ROUTINE;
|
|
|
|
ShellExec_RunDllA = (SHELLEXEC_RUNDLLA)GetProcAddressA((DWORD64)hMod, "ShellExec_RunDLLA");
|
|
if (!ShellExec_RunDllA)
|
|
goto EXIT_ROUTINE;
|
|
|
|
ShellExec_RunDllA(NULL, NULL, PathToFile, SW_SHOW);
|
|
|
|
bFlag = TRUE;
|
|
|
|
EXIT_ROUTINE:
|
|
|
|
return bFlag;
|
|
} |