WSCInstallProviderAndChains64_32-Funktion (ws2spi.h)

Die WSCInstallProviderAndChains64_32-Funktion installiert den angegebenen Transportanbieter und seine spezifischen Protokollketten in den 32-Bit- und 64-Bit-Winsock 2-Systemkonfigurationsdatenbanken auf einem 64-Bit-Computer. Diese Funktion stellt sicher, dass die Protokollketten am Anfang der Konfigurationsinformationen des Transportanbieters sortiert werden, sodass ein separater Aufruf von WSCWriteProviderOrder nicht erforderlich ist.

Syntax

int WSCInstallProviderAndChains64_32(
  [in]            LPGUID              lpProviderId,
  [in]            const LPWSTR        lpszProviderDllPath,
  [in]            const LPWSTR        lpszProviderDllPath32,
  [in]            const LPWSTR        lpszLspName,
  [in]            DWORD               dwServiceFlags,
  [in]            LPWSAPROTOCOL_INFOW lpProtocolInfoList,
  [in]            DWORD               dwNumberOfEntries,
  [out, optional] LPDWORD             lpdwCatalogEntryId,
  [out]           LPINT               lpErrno
);

Parameter

[in] lpProviderId

Ein Zeiger auf einen Globally Unique Identifier (GUID) für den Anbieter.

[in] lpszProviderDllPath

Ein Zeiger auf eine Unicode-Zeichenfolge, die den Ladepfad zur 64-Bit-DLL des Anbieters enthält. Diese Zeichenfolge beachtet die üblichen Regeln für die Pfadauflösung und kann eingebettete Umgebungszeichenfolgen (z. B. %SystemRoot%) enthalten. Solche Umgebungszeichenfolgen werden erweitert, wenn die Ws2_32.dll anschließend die Anbieter-DLL im Namen einer Anwendung laden muss. Nachdem alle eingebetteten Umgebungszeichenfolgen erweitert wurden, übergibt der Ws2_32.dll die resultierende Zeichenfolge an die LoadLibrary-Funktion , die den Anbieter in den Arbeitsspeicher lädt. Weitere Informationen finden Sie unter LoadLibrary.

**Hinweis** Wenn lpszProviderDllPath32 auf **NULL** festgelegt ist, muss lpszProviderDllPath auf %windir%\system32\<dllname> festgelegt werden. Andernfalls schlägt der Aufruf fehl und gibt den WSAEINVAL-Fehlercode zurück.
 

[in] lpszProviderDllPath32

Ein Zeiger auf eine Unicode-Zeichenfolge, die den vollqualifizierten Pfad zur 32-Bit-DLL des Anbieters enthält. Diese Zeichenfolge beachtet die üblichen Regeln für die Pfadauflösung und kann eingebettete Umgebungszeichenfolgen (z. B. %SystemRoot%) enthalten. Solche Umgebungszeichenfolgen werden erweitert, wenn die Ws2_32.dll anschließend die Anbieter-DLL im Namen einer Anwendung lädt. Nachdem eingebettete Umgebungszeichenfolgen erweitert wurden, übergibt der Ws2_32.dll die resultierende Zeichenfolge an die LoadLibrary-Funktion , um den Anbieter in den Arbeitsspeicher zu laden. Weitere Informationen finden Sie unter LoadLibrary.

**Hinweis** Wenn dieser Parameter auf **NULL** festgelegt ist, muss der 64-Bit-Anbieter im Ordner %windir%\system32 vorhanden sein, und der 32-Bit-Anbieter muss sich im Ordner %windir%\syswow64 befinden.
 

[in] lpszLspName

Ein Zeiger auf eine Unicode-Zeichenfolge, die den Namen des Mehrschichtdienstanbieters (Layered Service Provider, LSP) enthält.

[in] dwServiceFlags

Die Dienstflags für den Typ des zu erstellenden Mehrschichtprotokollkatalogeintrags. Ein Mehrschichtprotokolleintrag ist eine WSAProtocol_Info-Struktur , bei der das ChainLen-Element auf 0 festgelegt ist. Der tatsächliche Katalogeintrag für den LSP verweist auf die ID dieses mehrstufigen Protokolleintrags in dessen ProtocolChain-Member .

Wert Bedeutung
XP1_IFS_HANDLES
Der Katalogeintrag ist für einen IFS-LSP (Installable File System) vorgesehen, der IFS-spezifische Sockethandles zurückgibt. Ein IFS-LSP kann den Abschluss von Winsock-Aufrufen nicht abfangen und muss nicht alle Winsock-Funktionen implementieren.

[in] lpProtocolInfoList

Ein Zeiger auf ein Array von WSAProtocol_Info Strukturen. Jede Struktur definiert ein Protokoll, eine Adressfamilie und einen Sockettyp, der vom Anbieter unterstützt wird. Die Elemente der WSAPROTOCOL_INFO-Struktur , die untersucht werden, sind iProtocol, iAddressFamily und iSocketType.

[in] dwNumberOfEntries

Die Anzahl der Einträge im LpProtocolInfoList-Array .

[out, optional] lpdwCatalogEntryId

Ein Zeiger auf den neu installierten Mehrschichtprotokolleintrag für den Transportanbieter in der Winsock 2-Systemkonfigurationsdatenbank. Dies war die ID, die zum Erstellen der Protokollketteneinträge verwendet wurde, die im Katalog für den LSP installiert sind.

[out] lpErrno

Ein Zeiger auf den Fehlercode, der vom Aufruf generiert wird, wenn die Funktion fehlschlägt.

Rückgabewert

Wenn WSCInstallProviderAndChains64_32 erfolgreich ist, wird null zurückgegeben. Andernfalls wird SOCKET_ERROR zurückgegeben, und im lpErrno-Parameter wird ein bestimmter Fehlercode zurückgegeben.

Fehlercode Bedeutung
WSAEFAULT
Mindestens eines der Argumente befindet sich nicht in einem gültigen Teil des Benutzeradressraums.
WSAEINVAL
Mindestens ein Argument ist ungültig. Dieser Fehler wird für die folgenden Bedingungen zurückgegeben: Der lpProviderId-Parameter ist **NULL**, der lpszProviderDllPath-Parameter ungültig oder die Pfadlänge ist zu groß (**MAX_PATH** wurde überschritten), der lpszLspName-Parameter ungültig oder die Namenslänge ist zu groß (**WSAPROTOCOL_LEN** wird überschritten), die lpProtocolInfoList ist auf ein nicht-**NULL** und die dwNumberOfEntries festgelegt. der Parameter ist null, eine doppelte Anbieter-ID oder der Name des mehrstufigen Dienstanbieters ist bereits im Katalog vorhanden, oder es wurde keine Übereinstimmung für das angegebene Protokoll, die angegebene Adressfamilie und den angegebenen Sockettyp gefunden.
WSAEINVALIDPROCTABLE
Dem Anbieter fehlen die erforderlichen Funktionen. Ein Nicht-IFS-Anbieter muss alle Winsock 2-Erweiterungsfunktionen implementieren (AcceptEx, ConnectEx, DisconnectEx, TransmitFile, TransmitPackets und LPFN_WSARECVMSG (WSARecvMsg)).
WSAEINPROGRESS
Eine Anbieterinstallation wird bereits ausgeführt.
WSAENOBUFS
Speicher kann nicht für Puffer zugeordnet werden.
WSANO_RECOVERY
Ein nicht behebbarer Fehler ist aufgetreten. Dieser Fehler wird unter verschiedenen Bedingungen zurückgegeben, einschließlich der folgenden: Der Anbieter ist bereits installiert, der parameter lpProtocolInfoList war **NULL**, und es wurde kein Basisanbieter gefunden, die maximale Protokollkettenlänge (**MAX_PROTOCOL_CHAIN**) wurde erreicht, der Benutzer verfügt nicht über die Administratorrechte, die zum Schreiben in die Winsock-Registrierung erforderlich sind, oder beim Erstellen oder Installieren eines Katalogeintrags ist ein Fehler aufgetreten.
WSASYSCALLFAILURE
Ein Systemaufruf, der nie fehlschlagen sollte, ist fehlgeschlagen.

Hinweise

WSCInstallProviderAndChains64_32 ist eine erweiterte Version der funktion basic WSCInstallProvider64_32 , die zum Installieren eines einzelnen Transportdienstanbieters verwendet wird. Wenn ein Mehrschichtdienstanbieter installiert wird, sollte WSCInstallProviderAndChains64_32 verwendet werden. WSCInstallProviderAndChains64_32 können ein mehrstufiges Protokoll und eine oder mehrere Protokollketten mit einem einzelnen Funktionsaufruf installieren. Um die gleiche Arbeit mit WSCInstallProvider64_32 auszuführen, wären mehrere Funktionsaufrufe erforderlich.

Winsock 2 bietet mehrstufige Protokolle. Ein mehrstufiges Protokoll ist ein Protokoll, das nur Kommunikationsfunktionen auf höherer Ebene implementiert, während ein zugrunde liegender Transportstapel für den tatsächlichen Austausch von Daten mit einem Remoteendpunkt verwendet wird. Ein Beispiel für ein mehrschichtiges Protokoll wäre eine Sicherheitsebene, die dem Verbindungsaufbauprozess ein Protokoll hinzufügt, um die Authentifizierung durchzuführen und ein gemeinsam vereinbartes Verschlüsselungsschema einzurichten. Ein solches Sicherheitsprotokoll erfordert im Allgemeinen die Dienste eines zugrunde liegenden zuverlässigen Transportprotokolls wie TCP oder SPX. Der Begriff Basisprotokoll bezieht sich auf ein Protokoll wie TCP oder SPX, das die Datenkommunikation mit einem Remoteendpunkt durchführen kann. Der Begriff Mehrschichtprotokoll wird verwendet, um ein Protokoll zu beschreiben, das nicht allein stehen kann. Eine Protokollkette würde dann als ein oder mehrere mehrstufige Protokolle definiert, die zusammengekettet und durch ein Basisprotokoll verankert sind. Bei einem Basisprotokoll ist der ChainLen-Member der WSAProtocol_Info-Struktur auf BASE_PROTOCOL festgelegt, der als 1 definiert ist. Bei einem mehrstufigen Protokoll ist der ChainLen-Member der WSAPROTOCOL_INFO-Struktur auf LAYERED_PROTOCOL festgelegt, der als null definiert ist. In einer Protokollkette ist der ChainLen-Member der WSAPROTOCOL_INFO-Struktur auf größer als 1 festgelegt.

WSCInstallProviderAndChains64_32 ist die 64-Bit-Version von WSCInstallProviderAndChains. Der Anbieter wird sowohl in den 32-Bit- als auch in den 64-Bit-Katalogen auf 64-Bit-Plattformen installiert. Dies bedeutet, dass auf 64-Bit-Plattformen zwei Winsock-Kataloge verwaltet werden und dass sowohl 32-Bit- als auch 64-Bit-Prozesse den mit dieser Funktion installierten LSP laden können.

Auf einem 64-Bit-Computer werden alle Aufrufe, die nicht speziell für 32-Bit konzipiert sind (z. B. alle Funktionen, die nicht auf "32" enden) im nativen 64-Bit-Katalog ausgeführt. Prozesse, die auf einem 64-Bit-Computer ausgeführt werden, müssen WSCInstallProviderAndChains64_32 verwenden, um sowohl mit dem 32-Bit-Katalog als auch mit dem 64-Bit-Katalog zu arbeiten, um die Kompatibilität zu gewährleisten. Die Definitionen und Semantik der spezifischen 32-Bit-Aufrufe sind identisch mit ihren nativen Entsprechungen.

**Hinweis** Auf 64-Bit-Plattformen gibt es keine **WSCInstallProviderAndChains**-Funktion, die nur im 64-Bit-Katalog installiert werden kann. Auf 64-Bit-Plattformen muss sowohl eine 32-Bit- als auch eine 64-Bit-Version des LSP installiert sein. Für Anbieter, die nur im 64-Bit-Winsock-Katalog installiert werden dürfen, kann die WSCInstallProvider-Funktion verwendet werden.
 

Wenn lpProtocolInfoList auf NULL festgelegt ist, erstellt diese Funktion Protokollketten, bei denen der Anbieter über das Basisprotokoll für jeden eindeutigen Protokolltyp verteilt wird, wie durch die Adressfamilie, den Sockettyp und das Protokoll definiert. Dadurch wird das Erstellen von nicht zugänglichen doppelten Anbietereinträgen vermieden.

Wenn lpProtocolInfoList auf einen Wert ungleich NULL festgelegt ist, erstellt diese Funktion Protokollketten, indem der oberste Eintrag in den Konfigurationsinformationen abgerufen wird, der dem Tupel {address family, socket type, protocol} von jedem Element im bereitgestellten Array entspricht. Auch hier wird nur das Tupel {address family, socket type, protocol} berücksichtigt; alle anderen Member und Duplikate werden ignoriert.

Nach erfolgreichem Abschluss dieses Aufrufs geben alle nachfolgenden Aufrufe von WSAEnumProtocols, WSCEnumProtocols oder WSCEnumProtocols32 die neu erstellten Protokollketteneinträge zurück. Beachten Sie, dass in Windows-Umgebungen nur Instanzen von Ws_32.dll , die durch Aufrufen von WSAStartup nach erfolgreichem Abschluss von WSCInstallProviderAndChains64_32 erstellt wurden, die neuen Einträge enthalten, wenn WSAEnumProtocols, WSCEnumProtocols und WSCEnumProtocols32 zurückgegeben werden.

Hinweis Die WSAEnumProtocols-Funktion listet keinen mehrstufigen Protokolleintrag auf, während WSCEnumProtocols und WSCEnumProtocols32 dies tun.

 

Bei Erfolg versucht WSCInstallProviderAndChains64_32 , alle interessierten Anwendungen zu benachrichtigen, die sich für die Benachrichtigung über die Änderung registriert haben, indem WSAProviderConfigChange aufgerufen wird.

Die funktion WSCInstallProviderAndChains64_32 kann nur von einem Benutzer aufgerufen werden, der als Mitglied der Gruppe Administratoren angemeldet ist. Wenn WSCInstallProviderAndChains64_32 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, auf denen Windows Vista oder Windows Server 2008 ausgeführt wird, 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 angemeldet ist, die nicht der integrierten Administratorgruppe angehört, schlägt dieser Aufruf fehl, es sei denn, die Anwendung wurde in der Manifestdatei mit einem requestedExecutionLevel gekennzeichnet, der auf requireAdministrator festgelegt ist. Wenn in der Anwendung unter Windows Vista oder Windows Server 2008 diese Manifestdatei nicht vorhanden ist, muss ein Benutzer, der sich als Mitglied der Gruppe "Administratoren" angemeldet hat und nicht der integrierte Administrator die Anwendung in einer erweiterten Shell als integrierter Administrator (RunAs-Administrator) ausführen, damit diese Funktion erfolgreich ist.

Jede Dateiinstallation oder anbieterspezifische Konfiguration muss von der aufrufenden Anwendung ausgeführt werden.

IFS- und Nicht-IFS-Anbieter

Ein IFS-Anbieter ist ein Anbieter, der native Betriebssystemhandles zurückgibt. In der Regel sind diese Handles Treibern des Kernelmodusprotokolls zugeordnet. Die TCP/IPv4-Basis, UDP/IPv4, TCP/IPv6 und UDP/IPv6 sind beispielsweise IFS-Anbieter, da diese Einträge einer Kernelmoduskomponente entsprechen. IFS-Handles können in Funktionsaufrufen **ReadFile**, **WriteFile** und **CancelIo** verwendet werden. Ein Mehrschichtdienstanbieter, bei dem es sich um einen IFS-Anbieter handelt, gibt das Sockethandle, das vom unteren Anbieter (der ebenfalls ein IFS-Anbieter sein muss) erstellt wurde, direkt an die aufrufende Anwendung zurück. Ein IFS-LSP kann keine Abschlussbenachrichtigungen für Winsock-Aufrufe abfangen.

Ein Nicht-IFS-Anbieter ist ein Anbieter, der ein Zwischenhandle mit WPUCreateSocketHandle erstellt und dieses Handle an den Aufrufer zurückgibt. Dies ermöglicht es einem Nicht-IFS-LSP, Sende- und Empfangsereignisse vor den aufrufenden Anwendungen abzufangen, um die Nachverarbeitung zu ermöglichen (z. B. entschlüsseln eines empfangenen Datenblocks). Nicht-IFS-Sockethandles können in Aufrufen von ReadFile und WriteFile verwendet werden, können jedoch nicht mit CancelIo verwendet werden. Die einzige garantierte Methode zum Abbrechen eines Vorgangs für ein Nicht-IFS-Handle besteht darin, den Socket mit closesocket zu schließen.

Pfade für 32-Bit- und 64-Bit-Anbieter-DLLs

lpszProviderDllPath stellt den vollqualifizierten Pfad zur 64-Bit-Version der Anbieter-DLL dar. Dieser Parameter kann eingebettete Umgebungszeichenfolgen (z. B. %SystemRoot%) enthalten.

lpszProviderDllPath32 stellt den vollqualifizierten Pfad zur 32-Bit-Version der Anbieter-DLL dar. Dieser Parameter kann eingebettete Umgebungszeichenfolgen (z. B. %SystemRoot%) enthalten.

Wenn lpszProviderDllPath32NULL ist, ist lpszProviderDllPath der Pfad für 32- und 64-Bit-Anbieter. Wenn ein 32-Bit-Prozess auf einem 64-Bit-Computer ausgeführt wird (z. B. wenn eine Winsock-Anwendung die 32-Bit-Version eines LSP lädt), versucht sie, den in lpszProviderDllPath angegebenen 32-Bit-Anbieter zu laden. Wenn lpszProviderDllPath32NULL ist, muss der parameter lpszProviderDllPath auf %windir%\system32< dllname>. Wenn dies nicht der Fall ist, schlägt der Aufruf mit WSAEINVAL fehl. Wenn der Pfad in lpszProviderDllPath%windir%\system32< dllname> Wenn lpszProviderDllPath32NULL ist, wird der Aufruf (mit dem Dateisystemumleitungsor) an das von GetSystemWow64Directory zurückgegebene Verzeichnis umgeleitet, in dem sich der 32-Bit-LSP befinden muss. Für Windows XP 64-Bit Edition, Windows Server 2003 und Windows Vista lautet dieses Verzeichnis %windir%\syswow64.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile ws2spi.h
Bibliothek Ws2_32.lib
DLL Ws2_32.dll

Weitere Informationen

LoadLibrary

Transportkonfiguration und -installation

Transportdienstleister

WPUCreateSocketHandle

WSAStartup

WSCEnumProtocols

WSCEnumProtocols32

WSCInstallProvider64_32

WSCInstallProviderAndChains

WSCWriteProviderOrder