Condividi tramite


Funzione EnumServicesStatusExA (winsvc.h)

Enumera i servizi nel database di Gestione controllo dei servizi specificato. Vengono forniti il nome e lo stato di ogni servizio, insieme a dati aggiuntivi in base al livello di informazioni specificato.

Sintassi

BOOL EnumServicesStatusExA(
  [in]                SC_HANDLE    hSCManager,
  [in]                SC_ENUM_TYPE InfoLevel,
  [in]                DWORD        dwServiceType,
  [in]                DWORD        dwServiceState,
  [out, optional]     LPBYTE       lpServices,
  [in]                DWORD        cbBufSize,
  [out]               LPDWORD      pcbBytesNeeded,
  [out]               LPDWORD      lpServicesReturned,
  [in, out, optional] LPDWORD      lpResumeHandle,
  [in, optional]      LPCSTR       pszGroupName
);

Parametri

[in] hSCManager

Handle per il database di Gestione controllo dei servizi. Questo handle viene restituito dalla funzione OpenSCManager e deve avere il diritto di accesso SC_MANAGER_ENUMERATE_SERVICE . Per altre informazioni, vedere Sicurezza del servizio e diritti di accesso.

[in] InfoLevel

Attributi del servizio da restituire. Usare SC_ENUM_PROCESS_INFO per recuperare le informazioni sul nome e sullo stato del servizio per ogni servizio nel database. Il parametro lpServices è un puntatore a un buffer che riceve una matrice di strutture ENUM_SERVICE_STATUS_PROCESS . Il buffer deve essere sufficientemente grande da contenere le strutture e le stringhe a cui puntano i membri.

Attualmente non sono definiti altri livelli di informazioni.

[in] dwServiceType

Tipo di servizi da enumerare. Questo parametro può essere uno o più dei valori seguenti.

Valore Significato
SERVICE_DRIVER
0x0000000B
Servizi di tipo SERVICE_KERNEL_DRIVER e SERVICE_FILE_SYSTEM_DRIVER.
SERVICE_FILE_SYSTEM_DRIVER
0x00000002
Servizi driver del file system.
SERVICE_KERNEL_DRIVER
0x00000001
Servizi driver.
SERVICE_WIN32
0x00000030
Servizi di tipo SERVICE_WIN32_OWN_PROCESS e SERVICE_WIN32_SHARE_PROCESS.
SERVICE_WIN32_OWN_PROCESS
0x00000010
Servizi eseguiti nei propri processi.
SERVICE_WIN32_SHARE_PROCESS
0x00000020
Servizi che condividono un processo con uno o più servizi. Per altre informazioni, vedere Programmi di servizio.

[in] dwServiceState

Stato dei servizi da enumerare. Questo parametro può avere uno dei valori seguenti.

Valore Significato
SERVICE_ACTIVE
0x00000001
Enumera i servizi inclusi negli stati seguenti: SERVICE_START_PENDING, SERVICE_STOP_PENDING, SERVICE_RUNNING, SERVICE_CONTINUE_PENDING, SERVICE_PAUSE_PENDING e SERVICE_PAUSED.
SERVICE_INACTIVE
0x00000002
Enumera i servizi nello stato SERVICE_STOPPED .
SERVICE_STATE_ALL
0x00000003
Combina gli stati SERVICE_ACTIVE e SERVICE_INACTIVE .

[out, optional] lpServices

Puntatore al buffer che riceve le informazioni sullo stato. Il formato di questi dati dipende dal valore del parametro InfoLevel .

La dimensione massima di questa matrice è di 256.000 byte. Per determinare le dimensioni necessarie, specificare NULL per questo parametro e 0 per il parametro cbBufSize . La funzione avrà esito negativo e GetLastError restituirà ERROR_MORE_DATA. Il parametro pcbBytesNeeded riceverà le dimensioni necessarie.

Windows Server 2003 e Windows XP: La dimensione massima di questa matrice è di 64.000 byte. Questo limite è stato aumentato a partire da Windows Server 2003 con SP1 e Windows XP con SP2.

[in] cbBufSize

Dimensioni del buffer a cui punta il parametro lpServices , in byte.

[out] pcbBytesNeeded

Puntatore a una variabile che riceve il numero di byte necessari per restituire le voci del servizio rimanenti, se il buffer è troppo piccolo.

[out] lpServicesReturned

Puntatore a una variabile che riceve il numero di voci del servizio restituite.

[in, out, optional] lpResumeHandle

Puntatore a una variabile che, all'input, specifica il punto iniziale dell'enumerazione. È necessario impostare questo valore su zero la prima volta che viene chiamata la funzione EnumServicesStatusEx . Nell'output questo valore è zero se la funzione ha esito positivo. Tuttavia, se la funzione restituisce zero e la funzione GetLastError restituisce ERROR_MORE_DATA, questo valore indica la voce di servizio successiva da leggere quando viene chiamata la funzione EnumServicesStatusEx per recuperare i dati aggiuntivi.

[in, optional] pszGroupName

Nome del gruppo dell'ordine di caricamento. Se questo parametro è una stringa, gli unici servizi enumerati sono quelli che appartengono al gruppo con il nome specificato dalla stringa. Se questo parametro è una stringa vuota, vengono enumerati solo i servizi che non appartengono ad alcun gruppo. Se questo parametro è NULL, l'appartenenza al gruppo viene ignorata e tutti i servizi vengono enumerati.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero.

Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError. È possibile che vengano restituiti gli errori seguenti.

Codice restituito Descrizione
ERROR_ACCESS_DENIED
L'handle non dispone del diritto di accesso SC_MANAGER_ENUMERATE_SERVICE .
ERROR_MORE_DATA
Il buffer è troppo piccolo. Non tutti i dati nel database attivo potrebbero essere restituiti. Il parametro pcbBytesNeeded contiene il numero di byte necessari per ricevere le voci rimanenti.
ERROR_INVALID_PARAMETER
È stato usato un valore di parametro non valido.
ERROR_INVALID_HANDLE
Handle non valido.
ERROR_INVALID_LEVEL
Il parametro InfoLevel contiene un valore non supportato.
ERROR_SHUTDOWN_IN_PROGRESS
Il sistema sta arrestando; questa funzione non può essere chiamata.

Commenti

Se il chiamante non dispone del diritto di accesso SERVICE_QUERY_STATUS a un servizio, il servizio viene omesso automaticamente dall'elenco dei servizi restituiti al client.

Nota

L'intestazione winsvc.h definisce EnumServicesStatusEx come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice che non è indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzioni.

Requisiti

   
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione winsvc.h (include Windows.h)
Libreria Advapi32.lib
DLL Advapi32.dll

Vedi anche

ENUM_SERVICE_STATUS_PROCESS

Funzioni del servizio

Installazione, rimozione ed enumerazione del servizio