Код | #include <stdio.h> #include <Windows.h>
void main() { //Open the Service Control Manager SC_HANDLE sc = ::OpenSCManager (NULL,NULL,SC_MANAGER_ENUMERATE_SERVICE);
//Check if OpenSCManager returns NULL. Otherwise proceed if (sc != NULL) { printf("Opened SCM using OpenSCManager \n"); ENUM_SERVICE_STATUS service_data, *lpservice; BOOL retVal; DWORD bytesNeeded,srvCount,resumeHandle = 0,srvType, srvState;
srvType = SERVICE_WIN32; srvState = SERVICE_STATE_ALL;
//Call EnumServicesStatus using the handle returned by OpenSCManager retVal = ::EnumServicesStatus (sc,srvType,srvState,&service_data,sizeof(service_data), &bytesNeeded,&srvCount,&resumeHandle);
DWORD err = GetLastError(); //Check if EnumServicesStatus needs more memory space if ((retVal == FALSE) || err == ERROR_MORE_DATA) { DWORD dwBytes = bytesNeeded + sizeof(ENUM_SERVICE_STATUS); lpservice = new ENUM_SERVICE_STATUS [dwBytes]; EnumServicesStatus (sc,srvType,srvState,lpservice,dwBytes, &bytesNeeded,&srvCount,&resumeHandle); }
printf("Count of NT Services using EnumServicesStatus : %d\n\n",srvCount);
for(int i=0;i<srvCount;i++) { printf("%s\n",lpservice[i].lpDisplayName); } }
//Close the SC_HANLDE returned by OpenSCManager CloseServiceHandle(sc);
}
|
© http://www.codersource.net/win32_enumservicesstatus.html |