InitializeSecurityContext и буферы
марта 1 2010 by admin in БезопасностьУ вас будет довольно смутное представление о том, как SSPI работает с буферами, пока вы не начнете вникать в подробности. После этого многое прояснится. Как я уже говорил, буферы используются в InitializeSecurityContext для входных и выходных блобов, предназначенных для взаимодействия с сервером. При первом вызове InitializeSecurityContext вы передаете NULL параметром plnput. Но, получив данные от сервера, вы должны построить буферы и передавать их этой функции.
Как при вводе, так и при выводе InitializeSecurityContext получает массив SecBuffer типа SECBUFFER_TOKEN. Этот тип указывает системе, что данный буфер является или входным, или выходным блобом для построения контекста.
Прежде чем обратиться к InitializeSecurity'Context, надо выделить память для буферов pbBlockReceived и pbBlockToSend. В качестве альтернативы можно иметь функцию, выделяющую блок для вашего выходного буфера.
После обращения к InitializeSecurityContext элемент cbBuffer выходного буфера содержит размер блоба, который будет послан серверу. Если этот размер ненулевой, вам следует послать серверу столько байт, сколько указано этим значением из буфера, на который указывает элементpvBuffer. Это «рукопожатие» в процессе аутентификации.
SSPI определяет несколько различных типов буферов. Я буду рассказывать о них в соответствующем контексте. Список типов буферов, определенных на данный момент, см. в документации Platform SDK.