Funzione SspiInitializeSecurityContextAsyncW (sspi.h)

La funzione SspiInitializeSecurityContextAsyncW avvia il contesto di sicurezza in uscita lato client da un handle di credenziali. La funzione viene usata per creare un contesto di sicurezza tra l'applicazione client e un peer remoto. SspiInitializeSecurityContextAsyncW restituisce un token che il client deve passare al peer remoto, che a sua volta invia all'implementazione della sicurezza locale tramite la chiamata SspiAcceptSecurityContextAsync .

Nota

Questa funzione funge da controparte asincrona dellafunzione InitializeSecurityContext.

Sintassi

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

Parametri

AsyncContext

Contesto di chiamata asincrona.

phCredential

Handle per le credenziali restituite da AcquireCredentialsHandle. Questo handle viene usato per compilare il contesto di sicurezza.

phContext

Puntatore a una struttura CtxtHandle esistente.

pszTargetName

Puntatore a una stringa con terminazione Null che indica la destinazione del contesto. Il contenuto della stringa è specifico del pacchetto di sicurezza , come descritto nella tabella seguente. L'elenco non è completo. È possibile aggiungere altri provider di servizi di sicurezza di sistema e provider di servizi di sicurezza di terze parti a un sistema.

Provider di servizi condivisi in uso Significato
Digest Stringa con terminazione Null che identifica in modo univoco l'URI della risorsa richiesta. La stringa deve essere composta da caratteri consentiti in un URI e deve essere rappresentata dal set di codice ASCII US. La codifica percentuale può essere usata per rappresentare caratteri esterni al set di codice ASCII degli Stati Uniti.
Kerberos o Negotiate Nome dell'entità servizio (SPN) o contesto di sicurezza del server di destinazione.
NTLM Nome dell'entità servizio (SPN) o contesto di sicurezza del server di destinazione.
Schannel/SSL Stringa con terminazione Null che identifica in modo univoco il server di destinazione. Schannel usa questo valore per verificare il certificato del server. Schannel usa anche questo valore per individuare la sessione nella cache della sessione durante la riascritzione di una connessione. La sessione memorizzata nella cache viene usata solo se vengono soddisfatte tutte le condizioni seguenti:
  • Il nome della destinazione è lo stesso.
  • La voce della cache non è scaduta.
  • Il processo dell'applicazione che chiama la funzione è lo stesso.
  • La sessione di accesso è la stessa.
  • L'handle delle credenziali è lo stesso.

fContextReq

Flag di bit che indicano le richieste per il contesto.

Per un elenco di valori di flag e relativi significati, vedere InitializeSecurityContext: fContextReq .

Reserved1

Questo parametro è riservato e deve essere impostato su zero.

TargetDataRep

Rappresentazione dei dati, ad esempio l'ordinamento dei byte, nella destinazione. Questo parametro può essere SECURITY_NATIVE_DREP o SECURITY_NETWORK_DREP.

pInput

Puntatore a una struttura SecBufferDesc che contiene puntatori ai buffer forniti come input per il pacchetto.

Reserved2

Questo parametro è riservato e deve essere impostato su zero.

phNewContext

Puntatore a una struttura CtxtHandle .

pOutput

Puntatore a una struttura SecBufferDesc contenente puntatori alla struttura SecBuffer che riceve i dati di output.

pfContextAttr

Puntatore a una variabile per ricevere un set di flag di bit che indicano gli attributi del contesto stabilito. Per una descrizione dei vari attributi, vedere Requisiti di contesto.

ptsExpiry

Facoltativo. Puntatore a una struttura TimeStamp che riceve l'ora di scadenza del contesto.

Valore restituito

Restituisce SEC_E_OK se la richiesta asincrona per stabilire un contesto di sicurezza è stata accodata correttamente per l'esecuzione. In caso contrario, restituisce l'errore generato tentando di accodarlo. Per recuperare lo stato dell'operazione, usare SspiGetAsyncCallStatus.

Se il contesto di sicurezza ricevuto dal server è stato accettato, SspiGetAsyncCallStatus restituisce SEC_E_OK o uno dei codici SSPI nella tabella seguente. In caso contrario, può restituire SEC_I_ASYNC_CALL_PENDING se la chiamata è ancora in corso o uno dei codici di errore irreversibili seguenti nella seconda tabella seguente.

Codice restituito
Descrizione
SEC_I_COMPLETE_AND_CONTINUE
0x00090314L
Il client deve chiamare CompleteAuthToken e passare il token di output al server. Il client attende quindi un token restituito e lo passa, in un'altra chiamata, a SspiInitializeSecurityContextAsyncA.
SEC_I_COMPLETE_NEEDED
0x00090313L
Il client deve completare la compilazione del messaggio dal server prima di chiamare CompleteAuthToken.
SEC_I_CONTINUE_NEEDED
0x00090312L
Il client deve inviare il token di output al server e attendere un token restituito. Il token restituito viene quindi passato in un'altra chiamata a SspiInitializeSecurityContextAsyncA. Il token di output può essere vuoto.
SEC_I_INCOMPLETE_CREDENTIALS Usare con Schannel. Il server ha richiesto l'autenticazione client e le credenziali fornite non includono un certificato o il certificato non è stato emesso da un'autorità di certificazione attendibile dal server.
SEC_E_INCOMPLETE_MESSAGE
0x80090318L
I dati per l'intero messaggio non sono stati letti dalla rete. Quando viene restituito questo valore, il buffer pInput contiene una struttura SecBuffer con un membro BufferType di SECBUFFER_MISSING. Il membro cbBuffer di SecBuffer contiene un valore che indica il numero di byte aggiuntivi che la funzione deve leggere dal client prima che la funzione abbia esito positivo. Anche se questo numero non è sempre accurato, l'uso può contribuire a migliorare le prestazioni evitando più chiamate a questa funzione.
SEC_E_OK
0x0000000L
Il contesto di sicurezza ricevuto dal client è stato accettato. Se la funzione ha generato un token di output, il token deve essere inviato al server.

Codici di errore irreversibili

Codice restituito
Descrizione
SEC_E_INSUFFICIENT_MEMORY
0x80090300L
Memoria insufficiente per completare l'azione richiesta.
SEC_E_INTERNAL_ERROR
0x80090304L
Si è verificato un errore che non è stato mappato a un codice di errore SSPI.
SEC_E_INVALID_HANDLE
0x80100003L
L'handle passato alla funzione non è valido.
SEC_E_INVALID_TOKEN
0x80090308L
L'errore è dovuto a un token di input in formato non valido, ad esempio un token danneggiato in transito, un token di dimensioni non corrette o un token passato nel pacchetto di sicurezza errato. Il passaggio di un token al pacchetto errato può verificarsi se il client e il server non hanno negoziato il pacchetto di sicurezza appropriato.
SEC_E_LOGON_DENIED
0x8009030CL
Accesso non riuscito.
SEC_E_NO_AUTHENTICATING_AUTHORITY
0x80090311L
Non è stato possibile contattare alcuna autorità per l'autenticazione. Il nome di dominio della parte di autenticazione potrebbe essere errato, il dominio potrebbe non essere raggiungibile o potrebbe essersi verificato un errore di relazione di trust.
SEC_E_NO_CREDENTIALS
0x8009030EL
Nel pacchetto di sicurezza non sono disponibili credenziali.
SEC_E_TARGET_UNKNOWN La destinazione non è stata riconosciuta.
SEC_E_UNSUPPORTED_FUNCTION
0x80090302L
Nel parametro fContextReq è stato specificato un flag di attributo di contesto non valido (ISC_REQ_DELEGATE o ISC_REQ_PROMPT_FOR_CREDS).
SEC_E_WRONG_PRINCIPAL L'entità che ha ricevuto la richiesta di autenticazione non corrisponde a quella passata nel parametro pszTargetName. Questo indica un errore nell'autenticazione reciproca.

Commenti

Per informazioni complete, vedere InitializeSecurityContext .

Requisiti

Requisito Valore
Client minimo supportato Windows 10 versione 1607 [solo driver in modalità kernel]
Server minimo supportato Windows Server 2016 [solo driver in modalità kernel]
Intestazione sspi.h

Vedi anche

SspiAcceptSecurityContextAsync

SspiAcquireCredentialsHandleAsync