Función WSCGetApplicationCategory (ws2spi.h)

**Nota** Los proveedores de servicios en capas están en desuso. A partir de Windows 8 y Windows Server 2012, use la Plataforma de filtrado de Windows.
 
La función **WSCGetApplicationCategory** recupera las categorías del proveedor de servicios en capas (LSP) asociadas a una aplicación.

Sintaxis

int WSCGetApplicationCategory(
  [in]  LPCWSTR Path,
  [in]  DWORD   PathLength,
  [in]  LPCWSTR Extra,
  [in]  DWORD   ExtraLength,
  [out] DWORD   *pPermittedLspCategories,
  [out] LPINT   lpErrno
);

Parámetros

[in] Path

Puntero a una cadena Unicode que contiene la ruta de acceso de carga a la imagen ejecutable de la aplicación. Esta cadena observa las reglas habituales para la resolución de rutas de acceso y puede contener cadenas de entorno insertadas (como %SystemRoot%).

[in] PathLength

Longitud, en caracteres, del parámetro Path . Esta longitud no incluye el valor NULL de terminación.

[in] Extra

Puntero a una cadena Unicode que representa los argumentos de la línea de comandos usados al iniciar la aplicación especificada en el parámetro Path . El parámetro Extra se usa para distinguir entre varias instancias distintas de una aplicación cuando se inicia con una línea de comandos coherente. Esto es para admitir diferentes categorizaciones de aplicaciones para diferentes instancias de Svchost.exe o Rundll32.exe. Si solo se requiere el parámetro Path y no se necesita ningún argumento de línea de comandos para distinguir aún más entre las instancias de una aplicación, el parámetro Extra debe establecerse en NULL.

[in] ExtraLength

Longitud, en caracteres, del parámetro Extra . Esta longitud no incluye el valor NULL de terminación.

[out] pPermittedLspCategories

Puntero a un valor DWORD de las categorías LSP permitidas que se permiten para todas las instancias de esta aplicación. La aplicación se identifica mediante la combinación de los valores de los parámetros Path y Extra .

[out] lpErrno

Puntero al código de error si se produce un error en la función.

Valor devuelto

Si no se produce ningún error, WSCGetApplicationCategory devuelve ERROR_SUCCESS (cero). De lo contrario, devuelve SOCKET_ERROR y se devuelve un código de error específico en el parámetro lpErrno .

Código de error Significado
WSAEFAULT
Uno o varios de los argumentos no están en una parte válida del espacio de direcciones del usuario.
WSAEINVAL
Uno o varios argumentos no son válidos.
WSASERVICE_NOT_FOUND
No se encontró el servicio en función de los parámetros Path y Extra .

También se puede devolver el error si la aplicación que está consultando no existe en el Registro. En este caso, el error indica que la aplicación no está categorizada actualmente.

WSANO_RECOVERY
Error irrecuperable. Este error se devuelve en varias condiciones, incluido lo siguiente: el usuario carece de los privilegios administrativos necesarios para acceder al registro winsock o se produjo un error al abrir una entrada de catálogo winsock o una entrada de identificador de aplicación.

Comentarios

WSCGetApplicationCategory se usa para recuperar las marcas de categoría LSP asociadas a una instancia de aplicación. Las aplicaciones pueden determinar qué comportamientos LSP son aceptables dentro del contexto de la aplicación. Por lo tanto, al especificar las categorías LSP permitidas, una aplicación solo puede permitir a los proveedores de servicios por capas que implementan comportamientos aceptables que se van a cargar.

El parámetro Extra es necesario cuando se usa la línea de comandos para distinguir entre diferentes instancias de una aplicación o un servicio hospedados en el mismo ejecutable. Cada instancia puede tener diferentes necesidades de categorización de aplicaciones. Svchost.exe y Rundll32.exe son dos ejemplos en los que se requiere la línea de comandos para diferenciar entre diferentes instancias de proceso. Para SvcHost.exe, el modificador -k <svcinstance> define la instancia de proceso.

En el caso de los servicios, el uso del nombre del servicio no es suficiente, ya que el catálogo de Winsock es global para un proceso determinado y un proceso puede hospedar varios servicios.

Los sockets de ventana determinan la identidad de una aplicación y recuperan las categorías LSP permitidas durante la primera llamada a WSAStartup. Este será el conjunto de categorías LSP permitidas durante la instancia de la aplicación. Los cambios posteriores en las categorías LSP permitidas para una identidad de aplicación determinada no se recogerán hasta la siguiente instancia de la aplicación. Las categorías LSP permitidas no son mutables durante la vigencia de la instancia de la aplicación.

Winsock 2 admite protocolos en capas. Un protocolo en capas es uno que implementa solo funciones de comunicaciones de nivel superior, mientras se basa en una pila de transporte subyacente para el intercambio real de datos con un punto de conexión remoto. Un ejemplo de un protocolo o proveedor de servicios en capas sería un nivel de seguridad que agrega protocolo al proceso de establecimiento de conexión para realizar la autenticación y establecer un esquema de cifrado mutuamente acordado. Por lo general, este protocolo de seguridad requeriría los servicios de un protocolo de transporte confiable subyacente, como TCP o SPX. El término protocolo base hace referencia a un protocolo como TCP o SPX que es capaz de realizar comunicaciones de datos con un punto de conexión remoto. El término protocolo en capas se usa para describir un protocolo que no puede ser independiente.

Durante la inicialización de LSP, el LSP debe proporcionar punteros a una serie de funciones SPI de Winsock. Esta función se llamará durante el procesamiento normal por parte de la capa directamente encima del LSP (ya sea otro LSP o Ws2_32.DLL).

Un LSP que implementa un sistema de archivos instalable (IFS) puede elegir de forma selectiva proporcionar punteros a las funciones que se implementan por sí mismo, o pasar atrás los punteros proporcionados por la capa directamente debajo del LSP. Los LSP que no son IFS, ya que proporcionan sus propios identificadores, deben implementar todas las funciones SPI de Winsock. Esto se debe a que cada SPI requerirá el LSP para asignar todos los identificadores de socket creados al controlador de socket del proveedor inferior (ya sea otro LSP o el protocolo base).

Sin embargo, todos los LSP realizan su trabajo específico realizando un procesamiento adicional solo en un subconjunto de las funciones SPI de Winsock.

Es posible definir categorías LSP basadas en el subconjunto de funciones SPI que implementa un LSP y la naturaleza del procesamiento adicional realizado para cada una de esas funciones.

Mediante la clasificación de LSP, así como la clasificación de aplicaciones que usan sockets Winsock, es posible determinar selectivamente si un LSP debe participar en un proceso determinado en tiempo de ejecución.

En Windows Vista y versiones posteriores, un LSP se puede clasificar en función de cómo interactúa con las llamadas y los datos de Windows Sockets. Una categoría LSP es un grupo identificable de comportamientos en un subconjunto de funciones SPI de Winsock. Por ejemplo, un filtro de contenido HTTP se clasificaría como inspector de datos (la categoría LSP_INSPECTOR). La categoría LSP_INSPECTOR inspeccionará (pero no modificar) parámetros para transferir datos funciones SPI. Una aplicación puede consultar la categoría de un LSP y elegir no cargar el LSP según la categoría LSP y el conjunto de categorías LSP permitidas de la aplicación.

En la tabla siguiente se enumeran las categorías en las que se puede clasificar un LSP.

Categoría LSP Descripción
**LSP_CRYPTO_COMPRESS** El LSP es un proveedor de criptografía o compresión de datos.
**LSP_FIREWALL** El LSP es un proveedor de firewall.
**LSP_LOCAL_CACHE** LSP es un proveedor de caché local.
**LSP_INBOUND_MODIFY** El LSP modifica los datos entrantes.
**LSP_INSPECTOR** El LSP inspecciona o filtra los datos.
**LSP_OUTBOUND_MODIFY** El LSP modifica los datos salientes.
**LSP_PROXY** El LSP actúa como proxy y redirige paquetes.
**LSP_REDIRECTOR** El LSP es un redirector de red.
**LSP_SYSTEM** El LSP es aceptable para su uso en los servicios y procesos del sistema.
 

Un LSP puede pertenecer a más de una categoría. Por ejemplo, un LSP de firewall o seguridad podría pertenecer a las categorías inspector (LSP_INSPECTOR) y firewall (LSP_FIREWALL).

Si un LSP no tiene un conjunto de categorías, se considera que está en la categoría Todos los demás. Esta categoría LSP no se cargará en servicios o procesos del sistema (por ejemplo, lsass, winlogon y muchos procesos de svchost).

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado ws2spi.h
Library Ws2_32.lib
Archivo DLL Ws2_32.dll

Consulte también

Categorización de aplicaciones y proveedores de servicios en capas

WSAStartup

WSCGetProviderInfo

WSCGetProviderInfo32

WSCSetApplicationCategory

WSCSetProviderInfo

WSCSetProviderInfo32