Condividi tramite


Uso di SecBufferDesc e SecBuffer

La comunicazione spesso comporta grandi quantità di dati o dati di lunghezza sconosciuta. L'invio e la ricezione di dati vengono eseguiti in modo simile o identico in entrambi questi casi. Per gestire la lunghezza sconosciuta e quantità potenzialmente elevate di dati, la comunicazione SSPI viene eseguita usando due strutture, SecBufferDesc e SecBuffer.

Una struttura SecBufferDesc è un contenitore per un array di strutture SecBuffer. Una struttura SecBufferDesc dispone dei membri seguenti:

  • Numero di versione
  • Numero di elementi SecBuffer
  • Indirizzo della matrice di strutture di SecBuffer

Una struttura secBuffer contiene i tre membri seguenti:

  • Numero di byte nel buffer
  • Tipo di informazioni contenute nell'elemento di dati
  • I byte stessi

Un intero messaggio SSPI è spesso costituito da una matrice di strutture SecBuffer.

Di seguito sono definiti i tipi di dati del buffer seguenti.

Tipo di buffer Significato
SECBUFFER_EMPTY (Buffer vuoto) Non definito, sostituito dalla funzionedel pacchetto di sicurezza
SECBUFFER_DATA Dati dei pacchetti
SECBUFFER_TOKEN Token di sicurezza
SECBUFFER_PKG_PARAMS Parametri specifici del pacchetto
SECBUFFER_MISSING Indicatore dati mancante
SECBUFFER_EXTRA Dati aggiuntivi
SECBUFFER_STREAM Dati del flusso di sicurezza
SECBUFFER_STREAM_TRAILER Trailer della trasmissione di sicurezza
SECBUFFER_STREAM_HEADER Intestazione del flusso di sicurezza

 

I tipi di buffer precedenti possono essere combinati usando un'operazione diOR bit per bit con uno dei tipi di buffer seguenti.

Tipo di buffer Significato
SECBUFFER_ATTRMASK Mascherare gli attributi di sicurezza separando i flag di attributo dal tipo di buffer.
SECBUFFER_READONLY Il buffer è di sola lettura

 

Prima di ogni chiamata a un'API SSPI che richiede un parametro di SecBufferDesc, uno o più elementi SecBuffer matrice vengono dichiarati e inizializzati. Ad esempio, possono essere presenti due buffer di sicurezza: uno contenente i dati dei messaggi di input e l'altro per il token di sicurezza opaco di output restituito dal pacchetto di sicurezza. L'ordine dei buffer di sicurezza nel descrittore del buffer di sicurezza non è importante, ma ogni buffer deve essere contrassegnato con il tipo appropriato. Un tag di sola lettura può essere usato con qualsiasi buffer di input che non deve essere modificato dal pacchetto di sicurezza .

Le dimensioni del buffer di output che si prevede contengano il token di sicurezza sono importanti. Un'applicazione può trovare le dimensioni massime del token per un pacchetto di sicurezza durante l'installazione iniziale. La chiamata a EnumerateSecurityPackages restituisce una matrice di puntatori alle informazioni del pacchetto di sicurezza. La struttura delle informazioni del pacchetto di sicurezza contiene le dimensioni massime del token per ogni pacchetto. Nell'esempio le informazioni si trovano nel membro cbMaxToken della strutturasecPkgInfo. Le stesse informazioni possono essere ottenute in un secondo momento usando QuerySecurityPackageInfo.

L'applicazione inizializza i puntatori e le dimensioni del buffer nella descrizione del buffer per indicare dove sono disponibili i dati del messaggio e altre informazioni.

Per informazioni dettagliate, vedere SecBuffer e SecBufferDesc codice di esempio .