SecBufferDesc 및 SecBuffer 사용
통신에는 잠재적으로 많은 양의 데이터 또는 알 수 없는 길이의 데이터가 포함되는 경우가 많습니다. 데이터 전송 및 수신은 두 경우 모두 유사하거나 동일한 방식으로 수행됩니다. 알 수 없는 길이와 잠재적으로 많은 양의 데이터를 처리하기 위해 SSPI 통신은 SecBufferDesc 및 SecBuffer라는 두 가지 구조를 사용하여 수행됩니다.
SecBufferDesc 구조체는 SecBuffer 구조체 배열에 대한 컨테이너입니다. SecBufferDesc 구조체에는 다음 멤버가 있습니다.
SecBuffer 구조체에는 다음 세 멤버가 포함됩니다.
- 버퍼의 바이트 수
- 데이터 항목에 포함된 정보 유형
- 바이트 자체
전체 SSPI 메시지는 종종 SecBuffer 구조의 배열로 구성됩니다.
다음 버퍼 데이터 형식은 다음과 같이 정의됩니다.
버퍼 유형 | 의미 |
---|---|
SECBUFFER_EMPTY | 정의되지 않음, 보안 패키지 함수로 대체 |
SECBUFFER_DATA | 패킷 데이터 |
SECBUFFER_TOKEN | 보안 토큰 |
SECBUFFER_PKG_PARAMS | 패키지별 매개 변수 |
SECBUFFER_MISSING | 누락된 데이터 표시기 |
SECBUFFER_EXTRA | 추가 데이터 |
SECBUFFER_STREAM | 보안 스트림 데이터 |
SECBUFFER_STREAM_TRAILER | 보안 스트림 트레일러 |
SECBUFFER_STREAM_HEADER | 보안 스트림 헤더 |
위의 버퍼 형식은 다음 버퍼 형식 중 하나와 비트 OR 연산을 사용하여 결합할 수 있습니다.
버퍼 유형 | 의미 |
---|---|
SECBUFFER_ATTRMASK | 버퍼 형식에서 특성 플래그를 분리하여 보안 특성을 마스킹합니다. |
SECBUFFER_READONLY | 버퍼가 읽기 전용입니다. |
SecBufferDesc 매개 변수가 필요한 SSPI API를 호출하기 전에 하나 이상의 SecBuffer 배열 요소가 선언되고 초기화됩니다. 예를 들어 두 개의 보안 버퍼가 있을 수 있습니다. 하나는 입력 메시지 데이터를 포함하고 다른 하나는 보안 패키지에서 반환하는 출력 불투명 보안 토큰에 대한 것입니다. 보안 버퍼 설명자의 보안 버퍼 순서는 중요하지 않지만 각 버퍼는 적절한 형식으로 태그를 지정해야 합니다. 읽기 전용 태그는 보안 패키지에서 수정해서는 안 되는 입력 버퍼와 함께 사용할 수 있습니다.
보안 토큰을 포함할 것으로 예상되는 출력 버퍼의 크기가 중요합니다. 애플리케이션은 초기 설정 중에 보안 패키지의 최대 토큰 크기를 찾을 수 있습니다. EnumerateSecurityPackages 호출은 보안 패키지 정보에 대한 포인터 배열을 반환합니다. 보안 패키지 정보 구조에는 각 패키지의 최대 토큰 크기가 포함됩니다. 예제에서 정보는 SecPkgInfo 구조체의 cbMaxToken 멤버에 있습니다. 나중에 QuerySecurityPackageInfo를 사용하여 동일한 정보를 얻을 수 있습니다.
애플리케이션은 버퍼 설명에서 버퍼 포인터 및 크기를 초기화하여 메시지 데이터 및 기타 정보를 찾을 수 있는 위치를 나타냅니다.
자세한 내용은 SecBuffer 및 SecBufferDesc 예제 코드를 참조하세요.