다음을 통해 공유


버퍼링된 데이터 처리

여러 네트워크 공급자 함수는 함수가 변수 크기의 데이터 구조를 배치하는 버퍼의 주소와 크기를 사용합니다.

각 경우에 사용되는 메커니즘은 동일합니다. 호출자는 버퍼를 할당하고 해당 주소를 함수에 전달합니다. 또한 버퍼의 크기를 바이트 단위로 지정하는 DWORD 주소를 전달합니다.

그런 다음, 함수는 요청된 데이터 구조를 버퍼에 최대한 많이 복사합니다. 모든 데이터가 버퍼에 맞으면 함수는 WN_SUCCESS 반환합니다. 데이터가 버퍼에 맞지 않으면 데이터가 불완전하게 남아 있을 수 있으며 함수는 WN_MORE_DATA 오류를 설정합니다. 두 경우 모두 버퍼의 크기를 나타내는 DWORD 데이터 구조에 실제로 필요한 바이트 수로 설정됩니다. 이렇게 하면 전달된 버퍼가 너무 작고 함수가 실패한 경우 호출자는 필요한 크기의 새 버퍼를 할당하고 함수를 다시 호출할 수 있습니다.

반환되는 데이터 구조에 가변 길이 문자열이 포함된 경우 개별 데이터 구조에는 일반적으로 이러한 문자열에 대한 포인터가 포함됩니다. 문자열 자체도 버퍼 내에 배치해야 합니다. 그러나 버퍼의 끝에 배치하는 것이 중요합니다. 그렇지 않으면 Nth 구조체에 대한 인덱싱을 불가능하게 만듭니다. 즉, 모든 구조체는 버퍼의 시작 부분에 연속적으로 위치합니다. 문자열 또는 가변 길이 데이터에 대한 포인터는 버퍼에 대한 오프셋이 아니라 실제 포인터여야 합니다.

버퍼를 사용하여 문자열로만 구성된 데이터를 전달하고 반환하는 경우 버퍼 크기를 지정하는 DWORD 바이트 수가 아니라 이러한 문자열에 맞는 총 문자 수로 설정해야 합니다.