Программирование для Windows NT (том 2)

Определение конфигурации сервиса


Приложение или сервис может определить конфигурацию заданного сервиса, вызвав для этого функцию 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);

}



Содержание раздела