Buffer aggiuntivi restituiti da Schannel
Le informazioni devono essere inviate tra il client e il server mentre viene stabilito un contesto di sicurezza e successivamente perché i messaggi sicuri vengono scambiati usando le funzionalità di crittografia e decrittografia fornite da Schannel. Le funzioni seguenti vengono usate per eseguire queste attività:
Schannel ha un set ben definito di comportamenti per informazioni incomplete o in eccesso incluse nei buffer di input a queste funzioni. Le informazioni vengono scambiate tra il client e il server nel modo seguente:
- La parte locale interagisce con Schannel chiamando una funzione SSPI e passando informazioni. In genere, le informazioni sono state ricevute dalla parte remota.
- La funzione restituisce un codice di stato e buffer di output contenenti informazioni.
- A seconda del codice di stato, i buffer di output vengono inviati alla parte remota tramite un meccanismo di comunicazione.
- La parte remota legge le informazioni inviate dalla parte locale.
- Il ciclo si ripete, con le parti locali e remote interscambiate. La parte remota chiama una funzione SSPI e passa le informazioni letti nel passaggio precedente.
Tutto funziona come previsto quando il buffer di input della funzione SSPI contiene esattamente le informazioni necessarie. Tuttavia, a causa della natura orientata al flusso di alcuni protocolli di comunicazione, questo potrebbe non essere il caso; un blocco di informazioni ricevute da una parte remota può contenere meno dati di quanto richiesto o più dati che possono essere elaborati da Schannel in una singola chiamata a funzione.
Se il buffer di input contiene informazioni troppo piccole, le funzioni restituiscono SEC_E_INCOMPLETE_MESSAGE. Il chiamante deve ottenere dati aggiuntivi dalla parte remota e chiamare di nuovo la funzione.
Quando i buffer di input contengono troppe informazioni, Schannel non considera questo come errore. La funzione elabora la quantità di input possibile e restituisce il codice di stato per tale attività di elaborazione. Schannel indica inoltre la presenza di informazioni non elaborate nei buffer di input restituendo un buffer di output di tipo SECBUFFER_EXTRA. Il test dei buffer di output per questo tipo di buffer è l'unico modo per rilevare questa situazione. Il campo cbBuffer della struttura del buffer aggiuntivo indica quanti byte di input non sono stati elaborati.
Nota
Il campo pvBuffer del buffer aggiuntivo non contiene una copia dei dati in eccesso.
Se si riceve un buffer aggiuntivo da una funzione SSPI, è necessario rimuovere le informazioni già elaborate dal buffer di input e chiamare nuovamente la funzione. Schannel può, e spesso, restituire solo il buffer aggiuntivo e niente altro nei buffer di output.