MCPcopy Create free account
hub / github.com/acl-dev/acl / DetourCreateProcessWithDllW

Function DetourCreateProcessWithDllW

lib_fiber/cpp/src/detours/creatwth.cpp:958–1012  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

956
957
958BOOL WINAPI DetourCreateProcessWithDllW(_In_opt_ LPCWSTR lpApplicationName,
959 _Inout_opt_ LPWSTR lpCommandLine,
960 _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes,
961 _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
962 _In_ BOOL bInheritHandles,
963 _In_ DWORD dwCreationFlags,
964 _In_opt_ LPVOID lpEnvironment,
965 _In_opt_ LPCWSTR lpCurrentDirectory,
966 _In_ LPSTARTUPINFOW lpStartupInfo,
967 _Out_ LPPROCESS_INFORMATION lpProcessInformation,
968 _In_ LPCSTR lpDllName,
969 _In_opt_ PDETOUR_CREATE_PROCESS_ROUTINEW pfCreateProcessW)
970{
971 DWORD dwMyCreationFlags = (dwCreationFlags | CREATE_SUSPENDED);
972 PROCESS_INFORMATION pi;
973
974 if (pfCreateProcessW == NULL) {
975 pfCreateProcessW = CreateProcessW;
976 }
977
978 BOOL fResult = pfCreateProcessW(lpApplicationName,
979 lpCommandLine,
980 lpProcessAttributes,
981 lpThreadAttributes,
982 bInheritHandles,
983 dwMyCreationFlags,
984 lpEnvironment,
985 lpCurrentDirectory,
986 lpStartupInfo,
987 &pi);
988
989 if (lpProcessInformation) {
990 CopyMemory(lpProcessInformation, &pi, sizeof(pi));
991 }
992
993 if (!fResult) {
994 return FALSE;
995 }
996
997 LPCSTR rlpDlls[2];
998 DWORD nDlls = 0;
999 if (lpDllName != NULL) {
1000 rlpDlls[nDlls++] = lpDllName;
1001 }
1002
1003 if (!DetourUpdateProcessWithDll(pi.hProcess, rlpDlls, nDlls)) {
1004 TerminateProcess(pi.hProcess, ~0u);
1005 return FALSE;
1006 }
1007
1008 if (!(dwCreationFlags & CREATE_SUSPENDED)) {
1009 ResumeThread(pi.hThread);
1010 }
1011 return TRUE;
1012}
1013
1014BOOL WINAPI DetourCopyPayloadToProcess(_In_ HANDLE hProcess,
1015 _In_ REFGUID rguid,

Callers

nothing calls this directly

Calls 1

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…