Función SspiInitializeSecurityContextAsyncA (sspi.h)

La función SspiInitializeSecurityContextAsyncA inicia el contexto de seguridad saliente del lado cliente desde un identificador de credenciales. La función se usa para crear un contexto de seguridad entre la aplicación cliente y un elemento del mismo nivel remoto. SspiInitializeSecurityContextAsyncA devuelve un token que el cliente debe pasar al mismo nivel remoto, que a su vez el mismo nivel envía a la implementación de seguridad local a través de la llamada SspiAcceptSecurityContextAsync .

Nota

Esta función actúa como el homólogo asincrónico de lafunción InitializeSecurityContext.

Sintaxis

SECURITY_STATUS SspiInitializeSecurityContextAsyncA(
  SspiAsyncContext *AsyncContext,
  PCredHandle      phCredential,
  PCtxtHandle      phContext,
  LPSTR            pszTargetName,
  unsigned long    fContextReq,
  unsigned long    Reserved1,
  unsigned long    TargetDataRep,
  PSecBufferDesc   pInput,
  unsigned long    Reserved2,
  PCtxtHandle      phNewContext,
  PSecBufferDesc   pOutput,
  unsigned long    *pfContextAttr,
  PTimeStamp       ptsExpiry
);

Parámetros

AsyncContext

Contexto de llamada asincrónica.

phCredential

Identificador de las credenciales devueltas por AcquireCredentialsHandle. Este identificador se usa para crear el contexto de seguridad.

phContext

Puntero a una estructura CtxtHandle existente.

pszTargetName

Puntero a una cadena terminada en null que indica el destino del contexto. El contenido de la cadena es específico del paquete de seguridad , como se describe en la tabla siguiente. Esta lista no es exhaustiva. Se pueden agregar SSP adicionales del sistema y SSP de terceros a un sistema.

SSP en uso Significado
Digest Cadena terminada en NULL que identifica de forma única el URI del recurso solicitado. La cadena debe estar compuesta de caracteres permitidos en un URI y debe ser representable por el conjunto de código ASCII de US. La codificación porcentual se puede usar para representar caracteres fuera del conjunto de código ASCII de EE. UU.
Kerberos o Negotiate Nombre de entidad de seguridad de servicio (SPN) o contexto de seguridad del servidor de destino.
NTLM Nombre de entidad de seguridad de servicio (SPN) o contexto de seguridad del servidor de destino.
Schannel/SSL Cadena terminada en NULL que identifica de forma única el servidor de destino. Schannel usa este valor para comprobar el certificado de servidor. Schannel también usa este valor para buscar la sesión en la memoria caché de sesión al restablecer una conexión. La sesión almacenada en caché solo se usa si se cumplen todas las condiciones siguientes:
  • El nombre de destino es el mismo.
  • La entrada de caché no ha expirado.
  • El proceso de aplicación que llama a la función es el mismo.
  • La sesión de inicio de sesión es la misma.
  • El identificador de credenciales es el mismo.

fContextReq

Marcas de bits que indican solicitudes para el contexto.

Consulte InitializeSecurityContext: fContextReq para obtener una lista de valores de marca y sus significados.

Reserved1

Este parámetro está reservado y debe establecerse en cero.

TargetDataRep

Representación de datos, como el orden de bytes, en el destino. Este parámetro puede ser SECURITY_NATIVE_DREP o SECURITY_NETWORK_DREP.

pInput

Puntero a una estructura SecBufferDesc que contiene punteros a los búferes proporcionados como entrada al paquete.

Reserved2

Este parámetro está reservado y debe establecerse en cero.

phNewContext

Puntero a una estructura CtxtHandle .

pOutput

Puntero a una estructura SecBufferDesc que contiene punteros a la estructura SecBuffer que recibe los datos de salida.

pfContextAttr

Puntero a una variable para recibir un conjunto de marcas de bits que indican los atributos del contexto establecido. Para obtener una descripción de los distintos atributos, vea Requisitos de contexto.

ptsExpiry

Opcional. Puntero a una estructura TimeStamp que recibe la hora de expiración del contexto.

Valor devuelto

Devuelve SEC_E_OK si la solicitud asincrónica para establecer un contexto de seguridad se puso en cola correctamente para su ejecución; de lo contrario, devuelve el error generado al intentar ponerla en cola. Para recuperar el estado de la operación, use SspiGetAsyncCallStatus.

Si se aceptó el contexto de seguridad recibido del servidor, SspiGetAsyncCallStatus devuelve SEC_E_OK o uno de los códigos SSPI de la tabla siguiente. De lo contrario, puede devolver SEC_I_ASYNC_CALL_PENDING si la llamada sigue en curso o cualquiera de los siguientes códigos de error irrecuperables en la segunda tabla siguiente.

Código devuelto
Descripción
SEC_I_COMPLETE_AND_CONTINUE
0x00090314L
El cliente debe llamar a CompleteAuthToken y pasar el token de salida al servidor. A continuación, el cliente espera un token devuelto y lo pasa, en otra llamada, a SspiInitializeSecurityContextAsyncA.
SEC_I_COMPLETE_NEEDED
0x00090313L
El cliente debe terminar de compilar el mensaje desde el servidor antes de llamar a CompleteAuthToken.
SEC_I_CONTINUE_NEEDED
0x00090312L
El cliente debe enviar el token de salida al servidor y esperar un token de devolución. A continuación, el token devuelto se pasa en otra llamada a SspiInitializeSecurityContextAsyncA. El token de salida puede estar vacío.
SEC_I_INCOMPLETE_CREDENTIALS Se usa con Schannel. El servidor ha solicitado la autenticación de cliente y las credenciales proporcionadas no incluyen un certificado o el certificado no lo emitió una entidad de certificación de confianza para el servidor.
SEC_E_INCOMPLETE_MESSAGE
0x80090318L
Los datos de todo el mensaje no se leyeron de la conexión. Cuando se devuelve este valor, el búfer pInput contiene una estructura SecBuffer con un miembro BufferType de SECBUFFER_MISSING. El miembro cbBuffer de SecBuffer contiene un valor que indica el número de bytes adicionales que la función debe leer del cliente antes de que esta función se realice correctamente. Aunque este número no siempre es preciso, su uso puede ayudar a mejorar el rendimiento evitando varias llamadas a esta función.
SEC_E_OK
0x00000000L
Se aceptó el contexto de seguridad recibido del cliente. Si la función generó un token de salida, el token debe enviarse al servidor.

Códigos de error irrecuperables

Código devuelto
Descripción
SEC_E_INSUFFICIENT_MEMORY
0x80090300L
No hay suficiente memoria disponible para completar la acción solicitada.
SEC_E_INTERNAL_ERROR
0x80090304L
Error que no se asignación a un código de error de SSPI.
SEC_E_INVALID_HANDLE
0x80100003L
El identificador pasado a la función no es válido.
SEC_E_INVALID_TOKEN
0x80090308L
El error se debe a un token de entrada con formato incorrecto, como un token dañado en tránsito, un token de tamaño incorrecto o un token pasado al paquete de seguridad incorrecto. Pasar un token al paquete incorrecto puede ocurrir si el cliente y el servidor no negociaron el paquete de seguridad adecuado.
SEC_E_LOGON_DENIED
0x8009030CL
Error en el inicio de sesión.
SEC_E_NO_AUTHENTICATING_AUTHORITY
0x80090311L
No se pudo establecer contacto con ninguna autoridad para la autenticación. El nombre de dominio de la entidad de autenticación podría ser incorrecto, el dominio podría no ser accesible o podría haber habido un error en la relación de confianza.
SEC_E_NO_CREDENTIALS
0x8009030EL
No hay credenciales disponibles en el paquete de seguridad.
SEC_E_TARGET_UNKNOWN No se reconoció el destino.
SEC_E_UNSUPPORTED_FUNCTION
0x80090302L
Se especificó una marca de atributo de contexto que no es válida (ISC_REQ_DELEGATE o ISC_REQ_PROMPT_FOR_CREDS) en el parámetro fContextReq.
SEC_E_WRONG_PRINCIPAL La entidad de seguridad que recibió la solicitud de autenticación no es la misma que la que se pasa al parámetro pszTargetName. Esto indica un error en la autenticación mutua.

Comentarios

Consulte InitializeSecurityContext para obtener comentarios completos.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 10, versión 1607 [solo controladores en modo kernel]
Servidor mínimo compatible Windows Server 2016 [solo controladores en modo kernel]
Encabezado sspi.h

Consulte también

SspiAcceptSecurityContextAsync

SspiAcquireCredentialsHandleAsync