| Код | #include <stdio.h> #include <tchar.h> #include <windows.h> #include <locale.h>
int _tmain(int argc, _TCHAR* argv[]) { setlocale(LC_ALL,"russian"); SC_HANDLE hSCM = NULL; PUCHAR pBuf = NULL; ULONG dwBufSize = 0x00; ULONG dwBufNeed = 0x00; ULONG dwNumberOfService = 0x00; LPENUM_SERVICE_STATUS_PROCESS pInfo = NULL; hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE | SC_MANAGER_CONNECT); if (hSCM == NULL) { printf_s("OpenSCManager fail \n"); return 0xffff0001; } EnumServicesStatusEx( hSCM, SC_ENUM_PROCESS_INFO, SERVICE_WIN32, // SERVICE_DRIVER SERVICE_STATE_ALL, NULL, dwBufSize, &dwBufNeed, &dwNumberOfService, NULL, NULL); if (dwBufNeed < 0x01) { printf_s("EnumServicesStatusEx fail ?? \n"); return 0xffff0002; } dwBufSize = dwBufNeed + 0x10; pBuf = (PUCHAR) malloc(dwBufSize); EnumServicesStatusEx( hSCM, SC_ENUM_PROCESS_INFO, SERVICE_WIN32, // SERVICE_DRIVER, SERVICE_ACTIVE, //SERVICE_STATE_ALL, pBuf, dwBufSize, &dwBufNeed, &dwNumberOfService, NULL, NULL); pInfo = (LPENUM_SERVICE_STATUS_PROCESS)pBuf; for (ULONG i=0;i<dwNumberOfService;i++) { wprintf_s(L"Display Name \t : %s \n", pInfo[i].lpDisplayName); wprintf_s(L"Service Name \t : %s \n", pInfo[i].lpServiceName); //wprintf_s(L"Process Id \t : %04x (%d) \n", pInfo[i].ServiceStatusProcess.dwProcessId, pInfo[i].ServiceStatusProcess.dwProcessId); } free(pBuf); CloseServiceHandle(hSCM); return 0; }
|
|