WSCSetApplicationCategory-Funktion (ws2spi.h)

**Hinweis** Mehrschichtige Dienstanbieter sind veraltet. Verwenden Sie ab Windows 8 und Windows Server 2012 die Windows-Filterplattform.
 
Die **WSCSetApplicationCategory**-Funktion legt die zulässigen LSP-Kategorien (Layered Service Provider) fest, die einer Anwendung zugeordnet sind.

Syntax

int WSCSetApplicationCategory(
  [in]  LPCWSTR Path,
  [in]  DWORD   PathLength,
  [in]  LPCWSTR Extra,
  [in]  DWORD   ExtraLength,
  [in]  DWORD   PermittedLspCategories,
  [out] DWORD   *pPrevPermLspCat,
  [out] LPINT   lpErrno
);

Parameter

[in] Path

Ein Zeiger auf eine Unicode-Zeichenfolge, die den Ladepfad zum ausführbaren Image für die Anwendung enthält. Diese Zeichenfolge beachtet die üblichen Regeln für die Pfadauflösung und kann eingebettete Umgebungszeichenfolgen (z. B. %SystemRoot%) enthalten.

[in] PathLength

Die Länge des Path-Parameters in Zeichen. Diese Länge enthält nicht das beendende NULL.This length does not include the endating NULL.

[in] Extra

Ein Zeiger auf eine Unicode-Zeichenfolge, die die Befehlszeilenargumente darstellt, die beim Starten der im Path-Parameter angegebenen Anwendung verwendet werden. Der Extra-Parameter wird verwendet, um zwischen mehreren, unterschiedlichen Instanzen einer Anwendung zu unterscheiden, wenn sie mit einer konsistenten Befehlszeile gestartet wird. Dies dient zur Unterstützung verschiedener Anwendungskategorisierungen für verschiedene Instanzen von Svchost.exe oder Rundll32.exe. Wenn nur der Path-Parameter erforderlich ist und keine Befehlszeilenargumente erforderlich sind, um zwischen Instanzen einer Anwendung weiter zu unterscheiden, sollte der Extra-Parameter auf NULL festgelegt werden.

[in] ExtraLength

Die Länge des Extra-Parameters in Zeichen. Diese Länge enthält nicht das beendende NULL.This length does not include the endating NULL.

[in] PermittedLspCategories

Ein DWORD-Wert der LSP-Kategorien, die für alle Instanzen dieser Anwendung zulässig sind. Die Anwendung wird durch die Kombination der Werte der Parameter Path und Extra identifiziert.

[out] pPrevPermLspCat

Ein Zeiger, um den vorherigen Satz zulässiger LSP-Kategorien zu erhalten, die für alle Instanzen dieser Anwendung zulässig waren. Dieser Parameter ist optional, kann NULL sein.

[out] lpErrno

Ein Zeiger auf den Fehlercode, wenn die Funktion fehlschlägt.

Rückgabewert

Wenn kein Fehler auftritt, gibt WSCSetApplicationCategoryERROR_SUCCESS (null) zurück. 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.
WSANO_RECOVERY
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 für den Zugriff auf die Winsock-Registrierung erforderlich sind, oder es ist ein Fehler aufgetreten, wenn ein Winsock-Katalogeintrag oder ein Anwendungs-ID-Eintrag geöffnet wurde.

Hinweise

WSCSetApplicationCategory wird verwendet, um die LSP-Kategorieflags festzulegen, die einer Anwendung instance zugeordnet sind. Anwendungen können bestimmen, welche LSP-Verhaltensweisen im Kontext der Anwendung akzeptabel sind. Daher kann eine Anwendung durch die Angabe zulässiger LSP-Kategorien nur mehrstufige Dienstanbieter zulassen, die akzeptables Verhalten implementieren, um geladen zu werden.

Der Extra-Parameter ist erforderlich, wenn die Befehlszeile verwendet wird, um zwischen verschiedenen Instanzen einer Anwendung oder eines Diensts zu unterscheiden, die in derselben ausführbaren Datei gehostet werden. Jede instance kann unterschiedliche Anwendungskategorisierungsanforderungen haben. Svchost.exe und Rundll32.exe sind zwei Beispiele, bei denen die Befehlszeile erforderlich ist, um zwischen verschiedenen Prozessinstanzen zu unterscheiden. Für SvcHost.exe definiert der Schalter -k <svcinstance> den Prozess instance.

Für Dienste ist die Verwendung des Dienstnamens nicht ausreichend, da der Winsock-Katalog für einen bestimmten Prozess global ist und ein Prozess mehrere Dienste hosten kann.

Wenn die WSCSetApplicationCategory-Funktion für dieselbe Anwendung (derselbe Fullpath, EXE-Name und die gleichen Parameter) mehrmals aufgerufen wird, werden die Kategorien gemeinsam aufgehoben. Wenn Sie beispielsweise "c:\foo.exe -param" mit LSP_SYSTEM kategorisiert und dann die Funktion WSCSetApplicationCategory erneut mit LSP_REDIRECTOR aufgerufen haben, enthält der resultierende Eintrag für diese Anwendung LSP_SYSTEM | LSP_REDIRECTOR. Dieses Verhalten soll eine einzelne ausführbare Datei unterstützen, die mehrere Anwendungen in einer einzelnen EXE hostet (z. B. die Windows-Systemdienste svchost.exe).

Fenstersockets bestimmen die Identität einer Anwendung und rufen die zulässigen LSP-Kategorien während des ersten Aufrufs von WSAStartup ab. Dies ist der Satz zulässiger LSP-Kategorien für die Dauer der Anwendung instance. Nachfolgende Änderungen an den zulässigen LSP-Kategorien für eine bestimmte Anwendungsidentität werden erst im nächsten instance der Anwendung übernommen. Die zulässigen LSP-Kategorien sind während der Lebensdauer der Anwendung instance nicht veränderbar.

Winsock 2 bietet mehrstufige Protokolle. Ein mehrschichtiges 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 oder einen mehrschichtigen Dienstanbieter wäre eine Sicherheitsebene, die dem Verbindungsaufbauprozess protokolliert, um die Authentifizierung durchzuführen und ein gegenseitig 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.

Während der LSP-Initialisierung muss der LSP Zeiger auf eine Reihe von Winsock SPI-Funktionen bereitstellen. Diese Funktionen werden während der normalen Verarbeitung von der Ebene direkt über dem LSP aufgerufen (entweder ein anderer LSP oder Ws2_32.dll).

Ein LSP, der ein installierbares Dateisystem (Installable File System, IFS) implementiert, kann selektiv Zeiger auf Funktionen bereitstellen, die selbst implementiert werden, oder die von der Ebene direkt unterhalb des LSP bereitgestellten Zeiger zurückgeben. Nicht-IFS-LSPs müssen alle Winsock SPI-Funktionen implementieren, da sie ihre eigenen Handles bereitstellen. Dies liegt daran, dass für jede SPI der LSP alle erstellten Sockethandles dem Sockethandle des unteren Anbieters (entweder ein anderer LSP oder das Basisprotokoll) zugeordnet werden muss.

Alle LSPs führen ihre spezifische Arbeit jedoch durch zusätzliche Verarbeitung nur für eine Teilmenge der Winsock SPI-Funktionen aus.

Es ist möglich, LSP-Kategorien basierend auf der Teilmenge der SPI-Funktionen zu definieren, die ein LSP implementiert, und der Art der zusätzlichen Verarbeitung, die für jede dieser Funktionen ausgeführt wird.

Durch das Klassifizieren von LSPs sowie durch das Klassifizieren von Anwendungen, die Winsock-Sockets verwenden, wird es möglich, selektiv zu bestimmen, ob ein LSP zur Laufzeit an einem bestimmten Prozess beteiligt werden soll.

Unter Windows Vista und höher kann ein LSP basierend darauf klassifiziert werden, wie er mit Windows Sockets-Aufrufen und -Daten interagiert. Eine LSP-Kategorie ist eine identifizierbare Gruppe von Verhaltensweisen für eine Teilmenge der Winsock SPI-Funktionen. Beispielsweise würde ein HTTP-Inhaltsfilter als Dateninspektor (die kategorie LSP_INSPECTOR ) kategorisiert werden. Die LSP_INSPECTOR Kategorie überprüft (ändert jedoch nicht) Parameter für SPI-Funktionen für die Datenübertragung. Eine Anwendung kann die Kategorie eines LSP abfragen und den LSP basierend auf der LSP-Kategorie und dem Satz zulässiger LSP-Kategorien der Anwendung nicht laden.

In der folgenden Tabelle sind Kategorien aufgeführt, in die ein LSP klassifiziert werden kann.

LSP-Kategorie BESCHREIBUNG
**LSP_CRYPTO_COMPRESS** Der LSP ist ein Kryptografie- oder Datenkomprimierungsanbieter.
**LSP_FIREWALL** Der LSP ist ein Firewallanbieter.
**LSP_LOCAL_CACHE** Der LSP ist ein lokaler Cacheanbieter.
**LSP_INBOUND_MODIFY** Der LSP ändert eingehende Daten.
**LSP_INSPECTOR** Der LSP überprüft oder filtert Daten.
**LSP_OUTBOUND_MODIFY** Der LSP ändert ausgehende Daten.
**LSP_PROXY** Der LSP fungiert als Proxy und leitet Pakete um.
**LSP_REDIRECTOR** Der LSP ist ein Netzwerkumleitungsanbieter.
**LSP_SYSTEM** Der LSP ist für die Verwendung in Diensten und Systemprozessen akzeptabel.
 

Ein LSP kann zu mehr als einer Kategorie gehören. Beispielsweise kann ein Firewall-/Sicherheits-LSP sowohl zur Inspektorkategorie (LSP_INSPECTOR) als auch zur Firewall (LSP_FIREWALL) gehören.

Wenn ein LSP nicht über einen Kategoriesatz verfügt, wird er als in der Kategorie Alle anderen betrachtet. Diese LSP-Kategorie wird nicht in Dienste oder Systemprozesse geladen (z. B. lsass, winlogon und viele svchost-Prozesse).

Die WSCSetApplicationCategory-Funktion kann nur von einem Benutzer aufgerufen werden, der als Mitglied der Gruppe Administratoren angemeldet ist. Wenn WSCSetApplicationCategory 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. Diese Funktion kann 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 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 fehlt, muss ein Benutzer, der sich als Mitglied der Gruppe Administratoren angemeldet hat, nicht der integrierte Administrator, die Anwendung dann in einer erweiterten Shell als integrierter Administrator (RunAs-Administrator) ausführen, damit diese Funktion erfolgreich ist.

Jede Dateiinstallation oder dienstanbieterspezifische Konfiguration muss vom Aufrufer ausgeführt werden.

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

Kategorisieren von mehrschichtigen Dienstanbietern und Anwendungen

WSAStartup

WSCGetApplicationCategory

WSCGetProviderInfo

WSCGetProviderInfo32

WSCSetProviderInfo

WSCSetProviderInfo32