WSCWriteNameSpaceOrder-Funktion (sporder.h)
Die WSCWriteNameSpaceOrder-Funktion ändert die Reihenfolge der verfügbaren Windows Sockets (Winsock) 2-Namespaceanbieter. Die Reihenfolge der Namespaceanbieter bestimmt die Priorität des Namespaces, wenn er zur Namensauflösung aufgezählt oder abgefragt wird.
Syntax
int WSCWriteNameSpaceOrder(
[in] LPGUID lpProviderId,
[in] DWORD dwNumberOfEntries
);
Parameter
[in] lpProviderId
Ein Array von NSProviderId-Elementen , wie in der WSANAMESPACE_INFO-Struktur gefunden. Die Reihenfolge der NSProviderId-Elemente ist die neue Prioritätsreihenfolge für die Namespaceanbieter.
[in] dwNumberOfEntries
Die Anzahl der Elemente im NSProviderId-Array .
Rückgabewert
Die Funktion gibt ERROR_SUCCESS (null) zurück, wenn die Routine erfolgreich ist. Andernfalls wird ein bestimmter Fehlercode zurückgegeben.
Fehlercode | Bedeutung |
---|---|
Das NSProviderId-Array ist nicht vollständig im Prozessadressraum enthalten. | |
Mindestens eines der Argumente sind Eingabeparameter ungültig, und es wurde keine Aktion ausgeführt. | |
Ein nicht behebbarer Fehler ist aufgetreten. Dieser Fehler wird unter verschiedenen Bedingungen zurückgegeben, einschließlich der folgenden: Dem Benutzer fehlen die administratorrechtlichen Berechtigungen, die zum Schreiben in die Winsock-Registrierung erforderlich sind, oder eine andere Anwendung schreibt derzeit in den Namespaceanbieterkatalog. | |
Ein Systemaufruf, der niemals fehlschlagen sollte, ist fehlgeschlagen. | |
Die Funktion wird von einem anderen Thread oder Prozess aufgerufen. | |
Für die Ausführung des Vorgangs war nicht genügend Arbeitsspeicher verfügbar. | |
|
Die Funktion gibt möglicherweise einen beliebigen Registrierungsfehlercode zurück. |
Hinweise
Namespaceanbieter werden mithilfe der Funktion WSCInstallNameSpace installiert. Die Reihenfolge der anfänglichen Installation von Namespaceanbietern bestimmt die Standardreihenfolge, in der sie über WSAEnumNameSpaceProviders aufgezählt werden. Noch wichtiger ist, dass diese Reihenfolge auch die Reihenfolge bestimmt, in der Namespaceanbieter berücksichtigt werden, wenn ein Client die Namensauflösung anfordert. Die Reihenfolge der Namespaceanbieter kann mithilfe der WSCWriteNameSpaceOrder-Funktion geändert werden. Auf 64-Bit-Plattformen wird die WSCWriteNameSpaceOrder32-Funktion bereitgestellt, damit 64-Bit-Prozesse die Reihenfolge der Namespaceanbieter im 32-Bit-Namespaceanbieterkatalog ändern können. Auf 64-Bit-Plattformen werden Namespaceanbieter mithilfe der WSCInstallNameSpace32-Funktion im 32-Bit-Namespaceanbieterkatalog installiert.
Der aktuelle Namespaceanbieterkatalog wird in der Registrierung unter dem folgenden Registrierungsschlüssel gespeichert: HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Winsock2\Parameters\NameSpace_Catalog5
Eine Clientanforderung zur Namensauflösung verwendet die Routinen WSALookupServiceBegin, WSALookupServiceNext und WSALookupServiceEnd . Das dwNameSpace-Element der WSAQUERYSET-Struktur , das an WSALookupServiceBegin übergeben wird, ist auf den Bezeichner eines einzelnen Namespaces (z. B. NS_DNS) festgelegt, in dem die Suche eingeschränkt werden soll, oder NS_ALL alle Namespaces einschließen soll. Wenn mehrere Namespaceanbieter einen bestimmten Namespace unterstützen (z. B. NS_DNS), werden die Ergebnisse aller Namespaceanbieter zurückgegeben, die mit dem angeforderten dwNameSpace übereinstimmen, es sei denn, der lpNSProviderId-Member ist auf einen bestimmten Namespaceanbieter festgelegt. Die Ergebnisse aller Namespaceanbieter werden zurückgegeben, wenn NS_ALL für das dwNameSpace-Element angegeben ist. Die Reihenfolge, in der die Ergebnisse zurückgegeben werden, hängt von der Namespaceanbieterreihenfolge im Katalog ab.
Das Windows SDK enthält eine Anwendung namens SpOrder.exe, mit der der Katalog der installierten Namespaceanbieter angezeigt werden kann. Windows Sockets 2 enthält die ws2_32.dll, die die WSCWriteNameSpaceOrder-Funktion zum Neuanordnen von Namespaceanbietern im Katalog exportiert. Diese Schnittstelle kann importiert werden, indem Sie eine Verknüpfung mit WS2_32.lib herstellen. Für Computer, die unter Windows XP mit Service Pack 2 (SP2) und Windows Server 2003 mit Service Pack 1 (SP1) und höher ausgeführt werden, zeigt der Befehlnetsh.exe winsock show catalog sowohl die auf dem System installierten Protokoll- als auch namespaceanbieter an.
WSCWriteNameSpaceOrder kann nur von einem Benutzer aufgerufen werden, der als Mitglied der Gruppe Administratoren angemeldet ist. Wenn WSCWriteNameSpaceOrder von einem Benutzer aufgerufen wird, der kein Mitglied der Gruppe Administratoren ist, schlägt der Funktionsaufruf fehl, und WSANO_RECOVERY wird im lpErrno-Parameter zurückgegeben.
Bei Computern, die unter Windows Vista und Windows Vista ausgeführt werden, kann diese Funktion auch aufgrund der Benutzerkontensteuerung (User Account Control, UAC) fehlschlagen. Wenn eine Anwendung, die diese Funktion enthält, von einem Benutzer ausgeführt wird, der als Mitglied der Administratorgruppe außer dem Administrator angemeldet ist, tritt bei diesem Aufruf ein Fehler auf, es sei denn, die Anwendung wurde in der Manifestdatei mit einem requestedExecutionLevel-Wert gekennzeichnet, der auf requireAdministrator festgelegt ist. Wenn der Anwendung unter Windows Vista und Windows Vista diese Einstellung in der Manifestdatei fehlt, die zum Erstellen der ausführbaren Datei verwendet wird, muss ein Benutzer, der sich als Mitglied der Gruppe Administratoren angemeldet hat, nicht der Administrator, die Anwendung dann in einer erweiterten Shell als Administrator (RunAs-Administrator) ausführen, damit diese Funktion erfolgreich ist.
In der folgenden Liste werden Szenarien beschrieben, in denen die WSCWriteNameSpaceOrder-Funktion fehlschlägt:
- Der dwNumberOfEntries-Parameter entspricht nicht der Anzahl der registrierten Namespaceanbieter.
- Das Array NSProviderId enthält einen ungültigen Namespaceanbieterbezeichner.
- Das NSProviderId-Array enthält nicht alle gültigen Namespaceanbieterbezeichner genau einmal.
- Die Funktion kann nicht auf die Registrierung zugreifen (z. B. unzureichende Benutzerberechtigungen).
- Ein anderer Prozess (oder Thread) ruft derzeit die Funktion auf.
Anforderungen
Unterstützte Mindestversion (Client) | Windows 2000 Professional [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows 2000 Server [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | sporder.h |
Bibliothek | Sporder.lib |
DLL | Ws2_32.dll |