/******************************************************************** RmuAddProcessesByName - Adds all processes by the given process name to the Restart Manager Session. You should call this multiple times as necessary before calling RmuRegisterResources. ********************************************************************/ extern "C" HRESULT DAPI RmuAddProcessesByName( __in PRMU_SESSION pSession, __in_z LPCWSTR wzProcessName ) { HRESULT hr = S_OK; DWORD *pdwProcessIds = NULL; DWORD cProcessIds = 0; BOOL fNotFound = FALSE; hr = ProcFindAllIdsFromExeName(wzProcessName, &pdwProcessIds, &cProcessIds); ExitOnFailure(hr, "Failed to enumerate all the processes by name %ls.", wzProcessName); for (DWORD i = 0; i < cProcessIds; ++i) { hr = RmuAddProcessById(pSession, pdwProcessIds[i]); if (E_NOTFOUND == hr) { // RmuAddProcessById returns E_NOTFOUND when this setup is not elevated and OpenProcess returned access denied (target process running under another user account). fNotFound = TRUE; } else { ExitOnFailure(hr, "Failed to add process %ls (%d) to the Restart Manager session.", wzProcessName, pdwProcessIds[i]); } } // If one or more calls to RmuAddProcessById returned E_NOTFOUND, then return E_NOTFOUND even if other calls succeeded, so that caller can log the issue. if (fNotFound) { hr = E_NOTFOUND; } LExit: ReleaseMem(pdwProcessIds); return hr; }
/******************************************************************** RmuAddProcessesByName - Adds all processes by the given process name to the Restart Manager Session. You should call this multiple times as necessary before calling RmuRegisterResources. ********************************************************************/ extern "C" HRESULT DAPI RmuAddProcessesByName( __in PRMU_SESSION pSession, __in_z LPCWSTR wzProcessName ) { HRESULT hr = S_OK; DWORD *pdwProcessIds = NULL; DWORD cProcessIds = 0; hr = ProcFindAllIdsFromExeName(wzProcessName, &pdwProcessIds, &cProcessIds); ExitOnFailure1(hr, "Failed to enumerate all the processes by name %ls.", wzProcessName); for (DWORD i = 0; i < cProcessIds; ++i) { hr = RmuAddProcessById(pSession, pdwProcessIds[i]); ExitOnFailure2(hr, "Failed to add process %ls (%d) to the Restart Manager session.", wzProcessName, pdwProcessIds[i]); } LExit: ReleaseMem(pdwProcessIds); return hr; }