| 409 | std::map<std::string, std::string> RegistryFallback::s_Defaults; |
| 410 | |
| 411 | BOOL CreateProcessInJob( |
| 412 | HANDLE hJob, |
| 413 | LPCTSTR lpApplicationName, |
| 414 | LPTSTR lpCommandLine, |
| 415 | LPSECURITY_ATTRIBUTES lpProcessAttributes, |
| 416 | LPSECURITY_ATTRIBUTES lpThreadAttributes, |
| 417 | BOOL bInheritHandles, |
| 418 | DWORD dwCreationFlags, |
| 419 | LPVOID lpEnvironment, |
| 420 | LPCTSTR lpCurrentDirectory, |
| 421 | LPSTARTUPINFO lpStartupInfo, |
| 422 | LPPROCESS_INFORMATION ppi) |
| 423 | { |
| 424 | BOOL fRc = CreateProcess( |
| 425 | lpApplicationName, |
| 426 | lpCommandLine, |
| 427 | lpProcessAttributes, |
| 428 | lpThreadAttributes, |
| 429 | bInheritHandles, |
| 430 | dwCreationFlags | CREATE_SUSPENDED, |
| 431 | lpEnvironment, |
| 432 | lpCurrentDirectory, |
| 433 | lpStartupInfo, |
| 434 | ppi); |
| 435 | if (fRc) |
| 436 | { |
| 437 | fRc = AssignProcessToJobObject(hJob, ppi->hProcess); |
| 438 | if (fRc && !(dwCreationFlags & CREATE_SUSPENDED)) |
| 439 | { |
| 440 | fRc = ResumeThread(ppi->hThread) != (DWORD)-1; |
| 441 | } |
| 442 | if (!fRc) |
| 443 | { |
| 444 | TerminateProcess(ppi->hProcess, 0); |
| 445 | CloseHandle(ppi->hProcess); |
| 446 | CloseHandle(ppi->hThread); |
| 447 | ppi->hProcess = ppi->hThread = nullptr; |
| 448 | } |
| 449 | } |
| 450 | return fRc; |
| 451 | } |
| 452 | |
| 453 | BOOL CreateProcessInJobAsAdmin( |
| 454 | HANDLE hJob, |
no outgoing calls
no test coverage detected