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:
|
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
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de