Funzione WSCWriteNameSpaceOrder (sporder.h)

La funzione WSCWriteNameSpaceOrder modifica l'ordine dei provider di spazi dei nomi Windows Sockets (Winsock) disponibili. L'ordine dei provider di spazi dei nomi determina la priorità dello spazio dei nomi in caso di enumerazione o query per la risoluzione dei nomi.

Sintassi

int WSCWriteNameSpaceOrder(
  [in] LPGUID lpProviderId,
  [in] DWORD  dwNumberOfEntries
);

Parametri

[in] lpProviderId

Matrice di elementi NSProviderId trovati nella struttura WSANAMESPACE_INFO . L'ordine degli elementi NSProviderId è il nuovo ordine di priorità per i provider di spazi dei nomi.

[in] dwNumberOfEntries

Numero di elementi nella matrice NSProviderId .

Valore restituito

La funzione restituisce ERROR_SUCCESS (zero) se la routine ha esito positivo. In caso contrario, restituisce un codice di errore specifico.

Codice di errore Significato
WSAEFAULT
La matrice NSProviderId non è completamente contenuta nello spazio degli indirizzi del processo.
WSAEINVAL
Uno o più argomenti sono parametri di input non validi, nessuna azione è stata eseguita.
WSANO_RECOVERY
Si è verificato un errore non recuperabile. Questo errore viene restituito in diverse condizioni, tra cui quanto segue: l'utente non ha i privilegi amministrativi necessari per scrivere nel Registro di sistema Winsock o un'altra applicazione sta attualmente scrivendo nel catalogo del provider di spazi dei nomi.
WSASYSCALLFAILURE
Una chiamata di sistema che non deve mai avere esito negativo.
WSATRY_AGAIN
La funzione viene chiamata da un altro thread o processo.
WSA_NOT_ENOUGH_MEMORY
Memoria insufficiente disponibile per eseguire l'operazione.
(altro)
La funzione può restituire qualsiasi codice di errore del Registro di sistema.

Commenti

I provider di spazi dei nomi vengono installati usando la funzione WSCInstallNameSpace . L'ordine in cui i provider di spazi dei nomi vengono inizialmente installati regola l'ordine predefinito in cui vengono enumerati tramite WSAEnumNameSpaceProviders. Più importante, questo ordine regola anche l'ordine in cui i provider di spazi dei nomi vengono considerati quando un client richiede la risoluzione dei nomi. L'ordine dei provider di spazi dei nomi può essere modificato usando la funzione WSCWriteNameSpaceOrder . Nelle piattaforme a 64 bit viene fornita la funzione WSCWriteNameSpaceOrder32 per consentire ai processi a 64 bit di modificare l'ordine dei provider di spazi dei nomi nel catalogo provider di spazi dei nomi a 32 bit. Nelle piattaforme a 64 bit i provider di spazi dei nomi vengono installati nel catalogo provider di spazi dei nomi a 32 bit usando la funzione WSCInstallNameSpace32 .

Il catalogo del provider di spazi dei nomi corrente viene archiviato nel Registro di sistema sotto la chiave del Registro di sistema seguente: HKEY_LOCAL_MACHINE SYSTEMCurrent Control Set\Services\Winsock2\Parameters\NameSpace_Catalog5\\

Una richiesta client per la risoluzione dei nomi usa le routine WSALookupServiceBegin, WSALookupServiceNext e WSALookupServiceEnd. Il membro dwNameSpace della struttura WSAQUERYSET passato a WSALookupServiceBegin è impostato sull'identificatore di un singolo spazio dei nomi (NS_DNS, ad esempio) in cui limitare la ricerca o NS_ALL per includere tutti gli spazi dei nomi. Se più provider di spazi dei nomi supportano uno spazio dei nomi specifico (NS_DNS, ad esempio), i risultati di tutti i provider di spazi dei nomi corrispondenti a dwNameSpace richiesti vengono restituiti a meno che il membro lpNSProviderId non sia impostato su un provider di spazi dei nomi specifico. I risultati di tutti i provider di spazi dei nomi vengono restituiti se NS_ALL viene specificato per il membro dwNameSpace . L'ordine restituito dei risultati dipende dall'ordine del provider dello spazio dei nomi nel catalogo.

Windows SDK include un'applicazione denominata SpOrder.exe che consente la visualizzazione del catalogo di provider di spazi dei nomi installati. Windows Sockets 2 include la ws2_32.dll che esporta la funzione WSCWriteNameSpaceOrder per riordinare i provider di spazi dei nomi nel catalogo. Questa interfaccia può essere importata collegando WS2_32.lib. Per i computer in esecuzione in Windows XP con Service Pack 2 (SP2) e Windows Server 2003 con Service Pack 1 (SP1) e versioni successive, il comandonetsh.exe winsock show catalog visualizzerà sia i provider di protocolli che i provider di spazi dei nomi installati nel sistema.

WSCWriteNameSpaceOrder può essere chiamato solo da un utente connesso come membro del gruppo Administrators. Se WSCWriteNameSpaceOrder viene chiamato da un utente che non è membro del gruppo Administrators, la chiamata alla funzione avrà esito negativo e WSANO_RECOVERY viene restituita nel parametro lpErrno .

Per i computer in esecuzione in Windows Vista e Windows Vista, questa funzione può anche non riuscire a causa del controllo dell'account utente . Se un'applicazione contenente questa funzione viene eseguita da un utente connesso come membro del gruppo Administrators diverso dall'amministratore, questa chiamata avrà esito negativo a meno che l'applicazione non sia stata contrassegnata nel file manifesto con un set requestedExecutionLevel per richiedereAdministrator. Se l'applicazione in Windows Vista e Windows Vista non ha questa impostazione nel file manifesto usato per compilare il file eseguibile, un utente ha eseguito l'accesso come membro del gruppo Administrators diverso dall'amministratore deve quindi eseguire l'applicazione in una shell avanzata come amministratore (amministratore RunAs) per questa funzione.

L'elenco seguente descrive gli scenari in cui la funzione WSCWriteNameSpaceOrder potrebbe non riuscire:

  • Il parametro dwNumberOfEntries non è uguale al numero di provider di spazi dei nomi registrati.
  • La matrice NSProviderId contiene un identificatore del provider di spazi dei nomi non valido.
  • La matrice NSProviderId non contiene tutti gli identificatori del provider di spazi dei nomi validi esattamente una volta.
  • La funzione non può accedere al Registro di sistema, ad esempio autorizzazioni utente insufficienti.
  • Un altro processo (o thread) sta attualmente chiamando la funzione.

Requisiti

   
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione sporder.h
Libreria Sporder.lib
DLL Ws2_32.dll

Vedi anche

WSAEnumNameSpaceProviders

WSANAMESPACE_INFO

WSAQUERYSET

WSCEnumNameSpaceProviders32

WSCInstallNameSpace

WSCInstallNameSpace32

WSCWriteNameSpaceOrder32