WSCWriteNameSpaceOrder32-Funktion (sporder.h)
Die WSCWriteNameSpaceOrder32-Funktion ändert die Reihenfolge der verfügbaren Windows Sockets (Winsock) 2-Namespaceanbieter in einem 32-Bit-Katalog. Die Reihenfolge der Namespaceanbieter bestimmt die Priorität des Namespace, wenn die Namensauflösung aufgezählt oder abgefragt wird.
Syntax
int WSCWriteNameSpaceOrder32(
[in] LPGUID lpProviderId,
[in] DWORD dwNumberOfEntries
);
Parameter
[in] lpProviderId
Ein Array von NSProviderId-Elementen , wie es in der WSANAMESPACE_INFO-Struktur zu finden ist. 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. | |
Eingabeparameter waren ungültig, es wurde keine Aktion ausgeführt. | |
Ein nicht behebbarer Fehler ist aufgetreten. Dieser Fehler wird unter verschiedenen Bedingungen zurückgegeben, einschließlich der folgenden: Die Winsock-Registrierung konnte nicht geöffnet werden, dem Benutzer fehlen die Administratorrechte, die zum Schreiben in die Winsock-Registrierung erforderlich sind, oder eine andere Anwendung schreibt derzeit in den Namespaceanbieterkatalog. | |
Ein Systemaufruf, der nie fehlschlagen sollte, ist fehlgeschlagen. | |
Die Funktion wird von einem anderen Thread oder Prozess aufgerufen. | |
Zum Ausführen des Vorgangs war nicht genügend Arbeitsspeicher verfügbar. | |
|
Die Funktion gibt möglicherweise einen beliebigen Registrierungsfehlercode zurück. |
Hinweise
Namespaceanbieter werden auf 64-Bit-Plattformen in einem 32-Bit-Namespaceanbieterkatalog mithilfe der WSCInstallNameSpace32-Funktion installiert. Die Reihenfolge, in der Namespaceanbieter in einem 32-Bit-Katalog anfänglich installiert werden, bestimmt die Standardreihenfolge, in der sie über WSCEnumNameSpaceProviders32 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. Auf 64-Bit-Plattformen wird die WSCWriteNameSpaceOrder32-Funktion bereitgestellt, damit 64-Bit-Prozesse die Reihenfolge der Namespaceanbieter im 32-Bit-Namespaceanbieterkatalog ändern können. Die Reihenfolge der Namespaceanbieter im nativen Katalog kann mithilfe der WSCWriteNameSpaceOrder-Funktion geändert werden.
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 für die Namensauflösung verwendet die Routinen WSALookupServiceBegin, WSALookupServiceNext und WSALookupServiceEnd . Das dwNameSpace-Element der WSAQUERYSET-Struktur , die an WSALookupServiceBegin übergeben wird, wird auf den Bezeichner eines einzelnen Namespaces (z. B. NS_DNS) festgelegt, in dem die Suche eingeschränkt werden soll, oder NS_ALL , alle Namespaces einzuschließen. Wenn mehrere Namespaceanbieter einen bestimmten Namespace unterstützen (z. B. NS_DNS), werden die Ergebnisse aller Namespaceanbieter zurückgegeben, die dem angeforderten dwNameSpace entsprechen, es sei denn, das lpNSProviderId-Element 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. Winsock 2 enthält die ws2_32.DLL auf 64-Bit-Plattformen, die die WSCWriteNameSpaceOrder32-Funktion zum Neuanordnen von Namespaceanbietern im 32-Bit-Namespaceanbieterkatalog exportiert. Diese Schnittstelle kann durch Verknüpfen mit WS2_32.lib importiert werden. Für Computer unter Windows XP mit Service Pack 2 (SP2) und Windows Server 2003 mit Service Pack 1 (SP1) und höher zeigt der Befehlnetsh.exe winsock show catalog sowohl die installierten Protokoll- als auch namespaceanbieter an. Der native 64-Bit-Katalog wird zuerst angezeigt, gefolgt von den 32-Bit-Anbieterkatalogen (gekennzeichnet mit einem 32 nach ihrem Namen).
WSCWriteNameSpaceOrder32 kann nur von einem Benutzer aufgerufen werden, der als Mitglied der Gruppe Administratoren angemeldet ist. Wenn WSCWriteNameSpaceOrder32 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 unter Windows Vista und Windows Vista kann diese Funktion auch aufgrund der Benutzerkontensteuerung (UAC) fehlschlagen. Wenn eine Anwendung, die diese Funktion enthält, von einem Benutzer ausgeführt wird, der als Mitglied der Gruppe Administratoren als administrator angemeldet ist, schlägt dieser Aufruf fehl, es sei denn, die Anwendung wurde in der Manifestdatei mit einem requestedExecutionLevel 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 als Mitglied der Administratorgruppe angemeldet ist, 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 WSCWriteNameSpaceOrder32-Funktion fehlschlägt:
- Der dwNumberOfEntries-Parameter ist nicht gleich der Anzahl der registrierten Namespaceanbieter.
- Das NSProviderId-Array enthält einen ungültigen Namespaceanbieterbezeichner.
- Das NSProviderId-Array enthält nicht alle gültigen Namespaceanbieterbezeichner genau einmal.
- Die Funktion kann aus irgendeinem Grund 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 Vista, Windows XP Professional x64 Edition [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2008, Windows Server 2003 x64 Edition [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | sporder.h |
Bibliothek | Sporder.lib |
DLL | Ws2_32.dll |