В примере ниже, программа конфигурации службы использует функцию OpenService, чтобы получить дескриптор с доступом SERVICE_QUERY_CONFIG к установленному объекту службы. Затем программа использует дескриптор объекта службы в функции QueryServiceConfig, чтобы извлечь текущую конфигурацию службы.
#include <windows.h> #include <stdio.h> BOOL GetSampleServiceConfig() { LPQUERY_SERVICE_CONFIG lpqscBuf; LPSERVICE_DESCRIPTION lpqscBuf2; DWORD dwBytesNeeded; BOOL bSuccess=TRUE; // Открываем дескриптор службы. schService = OpenService( schSCManager, // база данных SCManager TEXT("Sample_Srv"), // название службы SERVICE_QUERY_CONFIG); // нужен доступ QUERY if (schService == NULL) { printf("OpenService failed (%d)", GetLastError()); return FALSE; } // Назначим буфер для информации о конфигурации. lpqscBuf = (LPQUERY_SERVICE_CONFIG) LocalAlloc( LPTR, 4096); if (lpqscBuf == NULL) { return FALSE; } lpqscBuf2 = (LPSERVICE_DESCRIPTION) LocalAlloc( LPTR, 4096); if (lpqscBuf2 == NULL) { return FALSE; } // Получим информацию о конфигурации. if (!QueryServiceConfig( schService, lpqscBuf, 4096, &dwBytesNeeded) ) { printf("QueryServiceConfig failed (%d)", GetLastError()); bSuccess = FALSE; } if (!QueryServiceConfig2( schService, SERVICE_CONFIG_DESCRIPTION, lpqscBuf2, 4096, &dwBytesNeeded) ) { printf("QueryServiceConfig2 failed (%d)", GetLastError()); bSuccess = FALSE; } // Напечатаем информацию о конфигурации. printf("\nSample_Srv configuration: \n"); printf(" Type: 0x%x\n", lpqscBuf->dwServiceType); printf(" Start Type: 0x%x\n", lpqscBuf->dwStartType); printf(" Error Control: 0x%x\n", lpqscBuf->dwErrorControl); printf(" Binary path: %s\n", lpqscBuf->lpBinaryPathName); if (lpqscBuf->lpLoadOrderGroup != NULL) printf(" Load order group: %s\n", lpqscBuf->lpLoadOrderGroup); if (lpqscBuf->dwTagId != 0) printf(" Tag ID: %d\n", lpqscBuf->dwTagId); if (lpqscBuf->lpDependencies != NULL) printf(" Dependencies: %s\n", lpqscBuf->lpDependencies); if (lpqscBuf->lpServiceStartName != NULL) printf(" Start Name: %s\n", lpqscBuf->lpServiceStartName); if (lpqscBuf2->lpDescription != NULL) printf(" Description: %s\n", lpqscBuf2->lpDescription); LocalFree(lpqscBuf); LocalFree(lpqscBuf2); return bSuccess; } |