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 dei dati vengono eseguiti in modo simile o identico in entrambi questi casi. Per gestire la lunghezza sconosciuta e potenzialmente grandi quantità di dati, la comunicazione SSPI viene eseguita usando due strutture, SecBufferDesc e SecBuffer.

Una struttura SecBufferDesc è un contenitore per una matrice di strutture SecBuffer . Una struttura SecBufferDesc ha i membri seguenti:

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

Una struttura SecBuffer contiene i tre membri seguenti:

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

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

I tipi di dati buffer seguenti sono definiti come segue.

Tipo di buffer Significato
SECBUFFER_EMPTY Non definito, sostituito dalla funzione del 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 del flusso di sicurezza
SECBUFFER_STREAM_HEADER Intestazione del flusso di sicurezza

 

I tipi di buffer precedenti possono essere combinati usando un'operazione OR 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 SecBufferDesc , uno o più elementi della matrice SecBuffer vengono dichiarati e inizializzati. Ad esempio, possono essere presenti due buffer di sicurezza: uno che contiene i dati del messaggio 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.

La dimensione del buffer di output che dovrebbe contenere il token di sicurezza è importante. 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 struttura SecPkgInfo . 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 trovare i dati del messaggio e altre informazioni.

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