Приложение или сервис может определить конфигурацию заданного сервиса, вызвав для этого функцию QueryServiceConfig:
BOOL QueryServiceConfig(
SC_HANDLE schService, // идентификатор сервиса
LPQUERY_SERVICE_CONFIG lpqscServConfig, // адрес структуры
// QUERY_SERVICE_CONFIG, в которую будет
// записана конфигурация сервиса
DWORD cbBufSize, // размер буфера для записи конфигурации
LPDWORD lpcbBytesNeeded); // адрес переменной, в котоую будет
// записан размер буфера, необходимый для
// сохранения всей информации о конфигурации
Формат структуры QUERY_SERVICE_CONFIG приведен ниже:
typedef struct _QUERY_SERVICE_CONFIG
{
DWORD dwServiceType;
DWORD dwStartType;
DWORD dwErrorControl;
LPTSTR lpBinaryPathName;
LPTSTR lpLoadOrderGroup;
DWORD dwTagId;
LPTSTR lpDependencies;
LPTSTR lpServiceStartName;
LPTSTR lpDisplayName;
} QUERY_SERVICE_CONFIG, LPQUERY_SERVICE_CONFIG;
Содержимое полей этой структуры соответствует содержимому параметров функции CreateService, описанной ранее.
Ниже расположен фрагмент кода, в котором определяется текущая конфигурация сервиса:
schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
schService = OpenService(
schSCManager, MYServiceName, SERVICE_ALL_ACCESS);
lpBuf = (LPQUERY_SERVICE_CONFIG)malloc(4096);
if(lpBuf != NULL)
{
QueryServiceConfig(schService, lpBuf, 4096, &dwBytesNeeded);
. . .
free(lpBuf);
}