Condividi tramite


Funzione di callback LPNSPSETSERVICE (ws2spi.h)

La funzione NSPSetService registra o deregista un'istanza del servizio all'interno di uno spazio dei nomi.

Sintassi

LPNSPSETSERVICE Lpnspsetservice;

INT Lpnspsetservice(
  [in] LPGUID lpProviderId,
  [in] LPWSASERVICECLASSINFOW lpServiceClassInfo,
  [in] LPWSAQUERYSETW lpqsRegInfo,
  [in] WSAESETSERVICEOP essOperation,
  [in] DWORD dwControlFlags
)
{...}

Parametri

[in] lpProviderId

Puntatore al GUID del provider dello spazio dei nomi specifico in cui è registrato il servizio.

[in] lpServiceClassInfo

Informazioni sullo schema della classe del servizio.

[in] lpqsRegInfo

Informazioni sulle proprietà da aggiornare al momento della registrazione.

[in] essOperation

Tipo di operazione richiesta.

Questo parametro può essere uno dei valori del tipo di enumerazione WSAESETSERVICEOP definito nel file di intestazione Winsock2.h .

Valore Significato
RNRSERVICE_REGISTER
0
Registrare il servizio. Per lo spazio dei nomi SAP (Service Advertising Protocol) usato all'interno di un ambiente NetWare, significa inviare una trasmissione periodica. Si tratta di un NOP per lo spazio dei nomi DNS (Domain Name System). Per gli archivi dati persistenti ciò significa aggiornare le informazioni sull'indirizzo.
RNRSERVICE_DEREGISTER
1
Annullare la registrazione del servizio. Per lo spazio dei nomi SAP, ciò significa interrompere l'invio della trasmissione periodica. Si tratta di un NOP per lo spazio dei nomi DNS. Per gli archivi dati persistenti ciò significa eliminare le informazioni sull'indirizzo.
RNRSERVICE_DELETE
2
Eliminare il servizio da spazi permanenti e nome dinamico. Per i servizi rappresentati da più strutture di CSADDR_INFO (utilizzando il flag di SERVICE_MULTIPLE), verrà eliminato solo l'indirizzo fornito e deve corrispondere esattamente alla struttura **CSADDR_INFO** corrispondente fornita al momento della registrazione del servizio.

[in] dwControlFlags

Set di flag che controlla l'operazione del servizio richiesta.

I valori possibili per questo parametro sono definiti nel file di intestazione Winsock2.h .

Valore Significato
SERVICE_MULTIPLE
0x00000001
Controllare l'ambito dell'operazione.

Quando questo valore viene impostato, l'azione viene eseguita solo sul set di indirizzi specificato. Un'operazione di registrazione non invalida gli indirizzi esistenti e un'operazione di annullamento della registrazione invalida solo il set specificato di indirizzi.

Quando questo valore è assente, gli indirizzi del servizio vengono gestiti come gruppo. Un registro o annulla la registrazione invalida tutti gli indirizzi esistenti prima di aggiungere il set di indirizzi specificato.

Valore restituito

La funzione deve restituire NO_ERROR (zero) se la routine ha esito positivo. Deve restituire SOCKET_ERROR (-1) se la routine ha esito negativo e deve impostare il codice di errore appropriato usando WSASetLastError.

Codice di errore Significato
WSAEACCES
La routine chiamante non dispone di privilegi sufficienti per installare il servizio.
WSA_NOT_ENOUGH_MEMORY
Memoria insufficiente per eseguire questa operazione.
WSAEINVAL
Uno o più parametri non sono validi o mancanti per questo provider.
WSAEOPNOTSUPP
L'operazione non è supportata. Questo errore viene restituito se il provider dello spazio dei nomi non implementa questa funzione.
WSASERVICE_NOT_FOUND
Il servizio è sconosciuto. Impossibile trovare il servizio nello spazio dei nomi specificato.

Commenti

Nella tabella seguente sono elencati i valori disponibili per essOperation e dwControlFlags.

Operazione Flags Il servizio esiste già Il servizio non esiste
**RNRSERVICE_REGISTER** Nessuno Sovrascrive l'oggetto . Usa solo gli indirizzi specificati. L'oggetto è REGISTERED. Crea un nuovo oggetto. Usa solo gli indirizzi specificati. L'oggetto è REGISTERED.
**RNRSERVICE_REGISTER** **SERVICE_MULTIPLE** Aggiornamenti oggetto . Aggiunge nuovi indirizzi al set esistente. L'oggetto è REGISTERED. Crea un nuovo oggetto. Utilizza tutti gli indirizzi specificati. L'oggetto è REGISTERED.
**RNRSERVICE_DEREGISTER** Nessuno Rimuove tutti gli indirizzi, ma non rimuove l'oggetto dallo spazio dei nomi. L'oggetto è DEREGISTERED. WSASERVICE_NOT_FOUND
**RNRSERVICE_DEREGISTER** **SERVICE_MULTIPLE** Aggiornamenti oggetto . Rimuove solo gli indirizzi specificati. Contrassegna l'oggetto come DEREGISTERED solo se non sono presenti indirizzi. Non rimuove dallo spazio dei nomi . WSASERVICE_NOT_FOUND
**RNRSERVICE_DELETE** Nessuno Rimuove l'oggetto dallo spazio dei nomi . WSASERVICE_NOT_FOUND
**RNRSERVICE_DELETE** **SERVICE_MULTIPLE** Rimuove solo gli indirizzi specificati. Rimuove l'oggetto dallo spazio dei nomi solo se non rimangono indirizzi. WSASERVICE_NOT_FOUND
 

Quando il parametro dwControlFlags è impostato su SERVICE_MULTIPLE, ciò consente a un'applicazione di gestire i relativi indirizzi in modo indipendente. Ciò è utile quando l'applicazione deve gestire i protocolli singolarmente o quando il servizio risiede in più computer. Ad esempio, quando un servizio usa più di un protocollo, un socket di ascolto può interrompere, ma gli altri socket rimangono operativi. In questo esempio, il servizio potrebbe annullare la registrazione dell'indirizzo interrotto senza influire sugli altri indirizzi.

Quando si usa SERVICE_MULTIPLE, un'applicazione non deve lasciare che gli indirizzi precedenti rimangano nell'oggetto . Ciò può verificarsi se l'applicazione viene interrotta senza inviare una richiesta di RNRSERVICE_DEREGISTER . Quando un servizio viene registrato, deve archiviarne gli indirizzi. Alla chiamata successiva, il servizio deve annullare esplicitamente la registrazione di questi indirizzi precedenti prima di registrare nuovi indirizzi.

Proprietà del servizio

Nella tabella seguente sono elencati i nomi dei membri WSAQUERYSET e viene descritto il modo in cui vengono rappresentati i dati delle proprietà del servizio. I membri etichettati come (facoltativo) possono essere forniti con un puntatore Null.
Nome del membro WSAQUERYSET Descrizione della proprietà del servizio
**dwSize** Impostare su sizeof(WSAQUERYSET). Si tratta di un meccanismo di controllo delle versioni.
**lpszServiceInstanceName** La stringa di riferimento contiene il nome dell'istanza del servizio.
**lpServiceClassId** GUID che corrisponde a questa classe di servizio.
**lpVersion** facoltativo. Fornisce il numero di versione dell'istanza del servizio.
**lpszComment** facoltativo. Stringa di commento facoltativa.
**dwNameSpace** Ignorato per questa operazione.
**lpNSProviderId** Ignorato per questa operazione. L'identificatore del provider è contenuto nel parametro lpProviderId .
**lpszContext** facoltativo. Punto iniziale della query in uno spazio dei nomi gerarchico.
**dwNumberOfProtocols** Ignorato per questa operazione.
**lpafpProtocols** Ignorato per questa operazione.
**pszQueryString** Ignorato per questa operazione.
**dwNumberOfCsAddrs** Numero di elementi nella matrice di CSADDR_INFO strutture a cui fa riferimento lpcsaBuffer.
**lpcsaBuffer** Puntatore a una matrice di strutture CSADDR_INFO che contengono l'indirizzo o gli indirizzi su cui il servizio è in ascolto.
**dwOutputFlags** Ignorato per questa operazione.
**lpBlob** facoltativo. Puntatore a un'entità specifica del provider.
 
**Nota** È accettabile che il membro **iProtocol** della struttura CSADDR_INFO contenga la costante manifesto **IPROTOCOL_ANY**, che indica un valore con caratteri jolly. Il provider dello spazio dei nomi deve sostituire un valore accettabile per la famiglia di indirizzi e il tipo di socket specificati.
 

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione ws2spi.h

Vedi anche

CSADDR_INFO

WSAQUERYSET

WSASetLastError