Funzione di callback LPNSPLOOKUPSERVICEBEGIN (ws2spi.h)
La funzione NSPLookupServiceBegin avvia una query client di un provider di servizi dei nomi vincolata dalle informazioni contenute in una struttura WSAQUERYSET .
NSPLookupServiceBegin restituisce solo un handle, che deve essere usato dalle chiamate successive a NSPLookupServiceNext per ottenere i risultati effettivi. Poiché questa operazione non può essere annullata, deve essere implementata per l'esecuzione rapida. Anche se è accettabile avviare una query di rete, questa funzione non deve richiedere una risposta per restituire correttamente.
Sintassi
LPNSPLOOKUPSERVICEBEGIN Lpnsplookupservicebegin;
INT Lpnsplookupservicebegin(
[in] LPGUID lpProviderId,
[in] LPWSAQUERYSETW lpqsRestrictions,
[in] LPWSASERVICECLASSINFOW lpServiceClassInfo,
[in] DWORD dwControlFlags,
[out] LPHANDLE lphLookup
)
{...}
Parametri
[in] lpProviderId
Puntatore all'identificatore del provider del servizio dei nomi su cui eseguire la query.
[in] lpqsRestrictions
Puntatore ai criteri di ricerca. Vedere la sezione Osservazioni.
[in] lpServiceClassInfo
Puntatore alla struttura WSASERVICECLASSINFO che contiene informazioni sullo schema per il servizio.
[in] dwControlFlags
Valore che controlla la profondità della ricerca.
Valore | Significato |
---|---|
|
Esegue una query verso il basso nella gerarchia di un provider anziché solo nel primo livello. |
|
Restituisce solo contenitori. |
|
Non restituisce alcun contenitore. |
|
Se possibile, restituisce i risultati nell'ordine di distanza. La misura della distanza è specifica del provider. |
|
Recupera il nome come **lpszServiceInstanceName**. |
|
Recupera il tipo come **lpServiceClassId**. |
|
Recupera la versione come **lpVersion**. |
|
Recupera il commento come **lpszComment**. |
|
Recupera gli indirizzi come **lpcsaBuffer**. |
|
Recupera i dati privati come **lpBlob**. |
|
Tutte le informazioni sugli alias disponibili devono essere restituite nelle chiamate successive a NSPLookupServiceNext e ogni alias restituito avrà il flag **RESULT_IS_ALIAS** impostato. |
|
Recupera la stringa di query come **lpszQueryString**. |
|
Recupera informazioni che includono il nome, il tipo, la versione, il commento, l'indirizzo, il BLOB, gli alias e la stringa di query. |
|
Se il provider contiene informazioni memorizzate nella cache, ignorare la cache ed eseguire query sullo spazio dei nomi stesso. |
|
Usato come valore per il parametro dwControlFlags in NSPLookupServiceNext. L'impostazione di questo flag indica al provider di eliminare l'ultimo set di risultati, troppo grande per il buffer fornito, e passare al set di risultati successivo. |
|
Indica che il provider dello spazio dei nomi deve includere risultati non autorevoli per i nomi. |
|
Indica se la risposta prime si trova nella parte remota o locale della struttura di CSADDR_INFO . L'altra parte deve essere utilizzabile in entrambi i casi. Questa opzione si applica solo alle richieste di istanza del servizio. |
|
Indica che il provider dello spazio dei nomi deve usare una query sicura. Questa opzione si applica solo alle richieste di query dei nomi. |
|
Indica che il provider dello spazio dei nomi deve restituire solo nomi preferiti. |
|
Indica che il provider dello spazio dei nomi deve restituire la configurazione dell'indirizzo. |
|
Indica che il provider dello spazio dei nomi deve restituire gli indirizzi duali. Questa opzione si applica solo ai socket in modalità doppia (indirizzi mappati IPv6 e IPv4). |
[out] lphLookup
Puntatore all'handle da usare nelle chiamate successive a NSPLookupServiceNext per recuperare il set di risultati.
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 |
---|---|
Memoria insufficiente per eseguire questa operazione. | |
Uno o più parametri non sono validi o mancanti per questo provider. | |
L'operazione non è supportata. Questo errore viene restituito se il provider dello spazio dei nomi non implementa questa funzione. | |
Il nome è stato trovato nel database, ma non dispone dei dati associati corretti per cui vengono risolti. | |
Il servizio è sconosciuto. Impossibile trovare il servizio nello spazio dei nomi specificato. |
Commenti
Se LUP_CONTAINERS viene specificato in una chiamata, evitare tutti gli altri valori di restrizione. Se vengono forniti, il provider di servizi dei nomi deve decidere se può supportare questa restrizione sui contenitori. In caso contrario, dovrebbe restituire un errore.
Alcuni provider di servizi dei nomi possono avere altri mezzi per trovare i contenitori. Ad esempio, i contenitori possono essere di un tipo noto o di un set di tipi noti e pertanto è possibile creare una restrizione delle query per trovarli. Indipendentemente da ciò che altro significa che il provider di servizi dei nomi ha per individuare i contenitori, LUP_CONTAINERS e LUP_NOCONTAINERS hanno la precedenza. Pertanto, se viene specificata una restrizione di query che include i contenitori, specificando LUP_NOCONTAINERS si impedirà la restituzione degli elementi del contenitore. Analogamente, indipendentemente dalla restrizione della query, se viene specificata LUP_CONTAINERS , devono essere restituiti solo i contenitori. Se uno spazio dei nomi non supporta i contenitori e viene specificato LUP_CONTAINERS , deve restituire WSANO_DATA.
Il metodo preferito per ottenere i contenitori all'interno di un altro contenitore è la chiamata:
dwStatus = NSPLookupServiceBegin(
lpqsRestrictions,
LUP_CONTAINERS,
lphLookup);
seguito dal numero necessario di chiamate NSPLookupServiceNext . Verranno restituiti tutti i contenitori contenuti immediatamente all'interno del contesto iniziale; vale a dire, non è una query approfondita. A questo scopo, è possibile eseguire il mapping della struttura dello spazio indirizzi camminando sulla gerarchia, ad esempio enumerando il contenuto dei contenitori selezionati. Gli usi successivi di NSPLookupServiceBegin usano i contenitori restituiti da una chiamata precedente.
Creazione di query
Come accennato, una struttura WSAQUERYSET viene usata come parametro di input per NSPLookupServiceBegin per qualificare la query. Nella tabella seguente sono elencati i nomi dei membri WSAQUERYSET e viene descritto come viene usato WSAQUERYSET per costruire una query. Quando un membro è contrassegnato come (facoltativo) è possibile specificare un puntatore Null, a indicare che il parametro non verrà usato come criteri di ricerca. Per altre informazioni, vedere Strutture di dati correlate alle query.
Nome del membro WSAQUERYSET | Interpretazione delle query |
---|---|
**dwSize** | Verrà impostato su sizeof(WSAQUERYSET). Si tratta di un meccanismo di controllo delle versioni. |
**dwOutputFlags** | Ignorato per le query. |
**lpszServiceInstanceName** | facoltativo. La stringa di riferimento contiene il nome del servizio. La semantica per il carattere jolly all'interno della stringa non è definita, ma può essere supportata da determinati provider di spazi dei nomi. |
**lpServiceClassId** | Obbligatorio. GUID corrispondente alla classe del servizio. |
**lpVersion** | facoltativo. Riferimenti al numero di versione desiderato e fornisce la semantica di confronto delle versioni, ovvero la versione deve corrispondere esattamente o la versione non deve essere minore del valore fornito. |
**lpszComment** | Ignorato per le query. |
**dwNameSpace** | Identificatore di un singolo spazio dei nomi in cui vincolare la ricerca o **NS_ALL** per includere tutti gli spazi dei nomi. |
**lpNSProviderId** | facoltativo. Fa riferimento al GUID di un provider di spazi dei nomi specifico e limita la query solo a questo provider. |
**lpszContext** | facoltativo. Specifica il punto iniziale della query in uno spazio dei nomi gerarchico. |
**dwNumberOfProtocols** | Le dimensioni, in byte, del numero di voci nella matrice di vincoli di protocollo, possono essere zero. |
**lpafpProtocols** | facoltativo. Riferimenti a una matrice di strutture AFPROTOCOLS . Verranno restituiti solo i servizi che usano questi protocolli. È consentito che il valore **AF_UNSPEC** venga visualizzato come valore della famiglia di protocolli, che indica un carattere jolly. I provider di spazi dei nomi possono fornire informazioni su qualsiasi servizio che utilizza il protocollo corrispondente, indipendentemente dalla famiglia di indirizzi. |
**lpszQueryString** | facoltativo. Alcuni spazi dei nomi (ad esempio whois++) supportano query avanzate simili a SQL contenute in una stringa di testo semplice. Questo parametro viene usato per specificare tale stringa. |
**dwNumberOfCsAddrs** | Ignorato per le query. |
**lpcsaBuffer** | Ignorato per le query. |
**lpBlob** | facoltativo. Puntatore a un'entità specifica del provider. |
Requisiti
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 |