Condividi tramite


Funzione WSCWriteNameSpaceOrder32 (sporder.h)

La funzione WSCWriteNameSpaceOrder32 modifica l'ordine dei provider di spazi dei nomi Windows Sockets (Winsock) 2 disponibili in un catalogo a 32 bit. L'ordine dei provider dello spazio dei nomi determina la priorità dello spazio dei nomi quando viene enumerata o sottoposta a query per la risoluzione dei nomi.

Nota Questa chiamata è una versione rigorosa a 32 bit di WSCWriteNameSpaceOrder per l'uso su piattaforme a 64 bit. Viene fornito per consentire ai processi a 64 bit di riordinare il catalogo dei provider di spazi dei nomi a 32 bit.

 

Sintassi

int WSCWriteNameSpaceOrder32(
  [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 dello spazio dei nomi.

[in] dwNumberOfEntries

Numero di elementi nella matrice NSProviderId .

Valore restituito

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

Codice di errore Significato
WSAEFAULT
La matrice NSProviderId non è completamente contenuta nello spazio indirizzi del processo.
WSAEINVAL
I parametri di input non sono validi, non è stata eseguita alcuna azione.
WSANO_RECOVERY
Si è verificato un errore irreversibile. Questo errore viene restituito in diverse condizioni, tra cui il seguente: impossibile aprire il Registro di sistema Winsock, l'utente non dispone dei privilegi amministrativi necessari per scrivere nel Registro di sistema Winsock o un'altra applicazione sta attualmente scrivendo nel catalogo del provider dello spazio dei nomi.
WSASYSCALLFAILURE
Chiamata di sistema che non dovrebbe mai avere esito negativo.
WSATRY_AGAIN
La funzione viene chiamata da un altro thread o processo.
WSA_NOT_ENOUGH_MEMORY
Memoria insufficiente 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 in piattaforme a 64 bit in un catalogo provider di spazi dei nomi a 32 bit usando la funzione WSCInstallNameSpace32 . L'ordine in cui i provider di spazi dei nomi in un catalogo a 32 bit vengono inizialmente installati determinano l'ordine predefinito in cui vengono enumerati tramite WSCEnumNameSpaceProviders32. Inoltre, questo ordine determina anche l'ordine in cui i provider di spazi dei nomi vengono considerati quando un client richiede la risoluzione dei nomi. Nelle piattaforme a 64 bit, la funzione WSCWriteNameSpaceOrder32 viene fornita per consentire ai processi a 64 bit di modificare l'ordine dei provider di spazi dei nomi nel catalogo dei provider dello spazio dei nomi a 32 bit. L'ordine dei provider di spazi dei nomi nel catalogo nativo può essere modificato usando la funzione WSCWriteNameSpaceOrder .

Il catalogo del provider dello spazio dei nomi corrente viene archiviato nel Registro di sistema nella seguente chiave del Registro di sistema: 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 viene impostato sull'identificatore di un singolo spazio dei nomi (NS_DNS, ad esempio) in cui vincolare 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 (ad esempio, NS_DNS), i risultati di tutti i provider di spazi dei nomi che corrispondono 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 in cui vengono restituiti i risultati dipende dall'ordine del provider dello spazio dei nomi nel catalogo.

Windows SDK include un'applicazione denominata SpOrder.exe che consente di visualizzare il catalogo dei provider di spazi dei nomi installati. Winsock 2 include il ws2_32.DLL su piattaforme a 64 bit che esportano la funzione WSCWriteNameSpaceOrder32 per riordinare i provider di spazi dei nomi nel catalogo del provider dello spazio dei nomi a 32 bit. 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 comando del catalogonetsh.exe winsock show visualizzerà sia il protocollo che i provider di spazi dei nomi installati. Il catalogo nativo a 64 bit viene visualizzato per primo seguito dai cataloghi del provider a 32 bit (indicati con un 32 dopo il nome).

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

Per i computer in esecuzione in Windows Vista e Windows Vista, questa funzione può avere esito negativo anche a causa del controllo dell'account utente. Se un'applicazione che contiene 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 impostato su requireAdministrator. Se l'applicazione in Windows Vista e Windows Vista non dispone di questa impostazione nel file manifesto usato per compilare il file eseguibile, un utente connesso come membro del gruppo Administrators diverso dall'amministratore deve quindi eseguire l'applicazione in una shell avanzata come amministratore (amministratore RunAs) affinché questa funzione abbia esito positivo.

L'elenco seguente descrive gli scenari in cui la funzione WSCWriteNameSpaceOrder32 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 dello spazio dei nomi non valido.
  • La matrice NSProviderId non contiene tutti gli identificatori di provider di spazi dei nomi validi esattamente una volta.
  • La funzione non è in grado di accedere al Registro di sistema per qualche motivo (ad esempio autorizzazioni utente insufficienti).
  • Un altro processo, o thread, sta attualmente chiamando la funzione .

Requisiti

   
Client minimo supportato Windows Vista, Windows XP Professional x64 Edition [solo app desktop]
Server minimo supportato Windows Server 2008, Windows Server 2003 x64 Edition [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

WSCWriteNameSpaceOrder