Función WSCSetApplicationCategory (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 **WSCSetApplicationCategory** establece las categorías permitidas del proveedor de servicios en capas (LSP) asociadas a una aplicación.

Sintaxis

int WSCSetApplicationCategory(
  [in]  LPCWSTR Path,
  [in]  DWORD   PathLength,
  [in]  LPCWSTR Extra,
  [in]  DWORD   ExtraLength,
  [in]  DWORD   PermittedLspCategories,
  [out] DWORD   *pPrevPermLspCat,
  [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.

[in] PermittedLspCategories

Valor DWORD de las categorías LSP permitidas 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] pPrevPermLspCat

Puntero para recibir el conjunto anterior de categorías LSP permitidas que se permitieron para todas las instancias de esta aplicación. Este parámetro es opcional puede ser NULL.

[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, WSCSetApplicationCategory 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.
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.

Observaciones

WSCSetApplicationCategory se usa para establecer 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, mediante la especificación de categorías LSP permitidas, una aplicación solo puede permitir a los proveedores de servicios en 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.

Si se llama a la función WSCSetApplicationCategory en la misma aplicación (la misma ruta de acceso completa, nombre EXE y parámetros) varias veces, las categorías se agrupan en ORed. Por ejemplo, si clasifica "c:\foo.exe -param" con LSP_SYSTEM y, a continuación, llama a la función WSCSetApplicationCategory de nuevo con LSP_REDIRECTOR, la entrada resultante para esta aplicación contiene LSP_SYSTEM | LSP_REDIRECTOR. Este comportamiento está diseñado para admitir un único archivo ejecutable que hospeda varias aplicaciones en un único EXE (los servicios del sistema de Windows svchost.exe, por ejemplo).

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 se pueden mutable 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 un 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).

Un usuario que inició sesión como miembro del grupo Administradores solo puede llamar a la función WSCSetApplicationCategory . Si un usuario llama a WSCSetApplicationCategory que no es miembro del grupo Administradores, se producirá un error en la llamada de función y se devolverá WSANO_RECOVERY en el parámetro lpErrno . Esta función también puede producir un error debido al control de cuentas de usuario (UAC). Si un usuario que ha iniciado sesión como miembro del grupo Administradores que no sea el administrador integrado ejecuta esta función, se producirá un error en esta llamada a menos que la aplicación se haya marcado en el archivo de manifiesto con un valor requestedExecutionLevel establecido en requireAdministrator. Si la aplicación en Windows Vista o Windows Server 2008 carece de este archivo de manifiesto, un usuario que ha iniciado sesión como miembro del grupo Administradores que no sea el administrador integrado debe ejecutar la aplicación en un shell mejorado como administrador integrado (administrador de RunAs) para que esta función se realice correctamente.

El autor de la llamada debe realizar cualquier instalación de archivos o configuración específica del proveedor de servicios.

Requisitos

   
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

WSCGetApplicationCategory

WSCGetProviderInfo

WSCGetProviderInfo32

WSCSetProviderInfo

WSCSetProviderInfo32