Запрос конфигурации службы

В примере ниже, программа конфигурации службы использует функцию 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;
}

 

Назад в оглавление
На главную страницу

Hosted by uCoz