Следующий пример открывает дескриптор сервиса при помощи функции OpenService с правом SERVICE_QUERY_CONFIG, а затем в функции QueryServiceConfig использует этот дескриптор, чтобы получить текущие настройки сервиса.
VOID GetSampleServiceConfig() { LPQUERY_SERVICE_CONFIG lpqscBuf; LPSERVICE_DESCRIPTION lpqscBuf2; DWORD dwBytesNeeded;
// Открываем дескриптор сервиса.
schService = OpenService( schSCManager, // база данных SCManager "Sample_Srv", // имя сервиса SERVICE_QUERY_CONFIG); // нужно только получить if (schService == NULL) MyErrorExit("OpenService");
// Выделяем буфер для информации о настройках сервиса.
lpqscBuf = (LPQUERY_SERVICE_CONFIG) LocalAlloc( LPTR, 4096); if (lpqscBuf == NULL) MyErrorExit("LocalAlloc");
lpqscBuf2 = (LPSERVICE_DESCRIPTION) LocalAlloc( LPTR, 4096); if (lpqscBuf2 == NULL) MyErrorExit("LocalAlloc");
// Получаем настройки сервиса.
if (! QueryServiceConfig( schService, lpqscBuf, 4096, &dwBytesNeeded) ) { MyErrorExit("QueryServiceConfig"); }
if (! QueryServiceConfig2( schService, SERVICE_CONFIG_DESCRIPTION, lpqscBuf2, 4096, &dwBytesNeeded) ) { MyErrorExit("QueryServiceConfig2"); }
// Распечатываем настройки сервиса.
printf("\nSample_Srv configuration: \n"); printf(" Тип: 0x%x\n", lpqscBuf->dwServiceType); printf(" Тип запуска: 0x%x\n", lpqscBuf->dwStartType); printf(" Контроль ошибок: 0x%x\n", lpqscBuf->dwErrorControl); printf(" Путь сервиса: %s\n", lpqscBuf->lpBinaryPathName);
if (lpqscBuf->lpLoadOrderGroup != NULL) printf(" Группа: %s\n", lpqscBuf->lpLoadOrderGroup); if (lpqscBuf->dwTagId != 0) printf(" Идентификатор в группе: %d\n", lpqscBuf->dwTagId); if (lpqscBuf->lpDependencies != NULL) printf(" Зависимости: %s\n", lpqscBuf->lpDependencies); if (lpqscBuf->lpServiceStartName != NULL) printf(" Имя: %s\n", lpqscBuf->lpServiceStartName); if (lpqscBuf2->lpDescription != NULL) printf(" Описание: %s\n", lpqscBuf2->lpDescription);
LocalFree(lpqscBuf); LocalFree(lpqscBuf2); } |