Something went wrong. Try again.
Reactos
Something went wrong. Try again.
2.7 kB · 100 lines
C
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101/* * PROJECT: ReactOS Services * LICENSE: GPL - See COPYING in the top level directory * FILE: base/applications/sc/depend.c * PURPOSE: * COPYRIGHT: Copyright 2016 Eric Kohl * */
#include "sc.h"
BOOL EnumDepend(LPCTSTR ServiceName){ SC_HANDLE hManager = NULL; SC_HANDLE hService = NULL; BOOL bResult = TRUE; DWORD BufferSize = 0; DWORD EntriesRead = 0; LPENUM_SERVICE_STATUS pBuffer = NULL; DWORD i;
hManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT); if (hManager == NULL) { _tprintf(_T("[SC] OpenSCManager FAILED %lu:\n\n"), GetLastError()); bResult = FALSE; goto done; }
hService = OpenService(hManager, ServiceName, SERVICE_ENUMERATE_DEPENDENTS); if (hService == NULL) { _tprintf(_T("[SC] OpenService FAILED %lu:\n\n"), GetLastError()); bResult = FALSE; goto done; }
if (!EnumDependentServices(hService, SERVICE_STATE_ALL, NULL, 0, &BufferSize, &EntriesRead)) { if (BufferSize == 0) { _tprintf(_T("[SC] EnumDependentServices FAILED %lu:\n\n"), GetLastError()); bResult = FALSE; goto done; } }
pBuffer = HeapAlloc(GetProcessHeap(), 0, BufferSize); if (pBuffer == NULL) { SetLastError(ERROR_OUTOFMEMORY); _tprintf(_T("[SC] HeapAlloc FAILED %lu:\n\n"), GetLastError()); bResult = FALSE; goto done; }
if (!EnumDependentServices(hService, SERVICE_STATE_ALL, pBuffer, BufferSize, &BufferSize, &EntriesRead)) { _tprintf(_T("[SC] EnumDependentServices FAILED %lu:\n\n"), GetLastError()); bResult = FALSE; goto done; }
_tprintf(_T("Enum: entriesRead = %lu\n"), EntriesRead);
for (i = 0; i < EntriesRead; i++) { _tprintf(_T("\n")); _tprintf(_T("SERVICE_NAME: %s\n"), pBuffer[i].lpServiceName); _tprintf(_T("DISPLAY_NAME: %s\n"), pBuffer[i].lpDisplayName); PrintServiceStatus(&pBuffer[i].ServiceStatus); }
done: if (bResult == FALSE) ReportLastError();
if (pBuffer != NULL) HeapFree(GetProcessHeap(), 0, pBuffer);
if (hService) CloseServiceHandle(hService);
if (hManager) CloseServiceHandle(hManager);
return bResult;}