다음을 통해 공유


버퍼링된 데이터 처리

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

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

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

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

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