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

Function DetourCreateProcessWithDllsW

lib_fiber/cpp/src/detours/creatwth.cpp:1722–1781  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1720}
1721
1722BOOL WINAPI DetourCreateProcessWithDllsW(_In_opt_ LPCWSTR lpApplicationName,
1723 _Inout_opt_ LPWSTR lpCommandLine,
1724 _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes,
1725 _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
1726 _In_ BOOL bInheritHandles,
1727 _In_ DWORD dwCreationFlags,
1728 _In_opt_ LPVOID lpEnvironment,
1729 _In_opt_ LPCWSTR lpCurrentDirectory,
1730 _In_ LPSTARTUPINFOW lpStartupInfo,
1731 _Out_ LPPROCESS_INFORMATION lpProcessInformation,
1732 _In_ DWORD nDlls,
1733 _In_reads_(nDlls) LPCSTR *rlpDlls,
1734 _In_opt_ PDETOUR_CREATE_PROCESS_ROUTINEW pfCreateProcessW)
1735{
1736 if (pfCreateProcessW == NULL) {
1737 pfCreateProcessW = CreateProcessW;
1738 }
1739
1740 PROCESS_INFORMATION backup;
1741 if (lpProcessInformation == NULL) {
1742 lpProcessInformation = &backup;
1743 ZeroMemory(&backup, sizeof(backup));
1744 }
1745
1746 if (!pfCreateProcessW(lpApplicationName,
1747 lpCommandLine,
1748 lpProcessAttributes,
1749 lpThreadAttributes,
1750 bInheritHandles,
1751 dwCreationFlags | CREATE_SUSPENDED,
1752 lpEnvironment,
1753 lpCurrentDirectory,
1754 lpStartupInfo,
1755 lpProcessInformation)) {
1756 return FALSE;
1757 }
1758
1759
1760 if (!DetourUpdateProcessWithDll(lpProcessInformation->hProcess, rlpDlls, nDlls) &&
1761 !DetourProcessViaHelperDllsW(lpProcessInformation->dwProcessId,
1762 nDlls,
1763 rlpDlls,
1764 pfCreateProcessW)) {
1765
1766 TerminateProcess(lpProcessInformation->hProcess, ~0u);
1767 CloseHandle(lpProcessInformation->hProcess);
1768 CloseHandle(lpProcessInformation->hThread);
1769 return FALSE;
1770 }
1771
1772 if (!(dwCreationFlags & CREATE_SUSPENDED)) {
1773 ResumeThread(lpProcessInformation->hThread);
1774 }
1775
1776 if (lpProcessInformation == &backup) {
1777 CloseHandle(lpProcessInformation->hProcess);
1778 CloseHandle(lpProcessInformation->hThread);
1779 }

Callers

nothing calls this directly

Calls 2

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…