Share via


PFN_WSK_SEND_TO 콜백 함수(wsk.h)

WskSendTo 함수는 데이터그램 데이터를 원격 전송 주소로 보냅니다.

구문

PFN_WSK_SEND_TO PfnWskSendTo;

NTSTATUS PfnWskSendTo(
  [in]           PWSK_SOCKET Socket,
  [in]           PWSK_BUF Buffer,
                 ULONG Flags,
  [in, optional] PSOCKADDR RemoteAddress,
  [in]           ULONG ControlInfoLength,
  [in, optional] PCMSGHDR ControlInfo,
  [in, out]      PIRP Irp
)
{...}

매개 변수

[in] Socket

데이터그램을 보낼 데이터그램 소켓의 소켓 개체를 지정하는 WSK_SOCKET 구조체에 대한 포인터입니다.

[in] Buffer

소켓을 통해 전송되는 데이터그램을 포함하는 데이터 버퍼를 설명하는 초기화된 WSK_BUF 구조체에 대한 포인터입니다.

Flags

이 매개 변수는 시스템 사용을 위해 예약되어 있습니다. WSK 애플리케이션은 이 매개 변수를 0으로 설정해야 합니다.

[in, optional] RemoteAddress

데이터그램을 보낼 원격 전송 주소를 지정하는 구조체에 대한 포인터입니다. 이 포인터는 WSK 애플리케이션이 소켓을 만들 때 지정한 주소 패밀리에 해당하는 특정 SOCKADDR 구조체 형식에 대한 포인터여야 합니다.

WSK 애플리케이션이 데이터그램 소켓에 대해 고정 원격 전송 주소 또는 고정 대상 전송 주소를 설정한 경우 이 포인터는 선택 사항이며 NULL일 수 있습니다. NULL이면 데이터그램이 고정 원격 전송 주소 또는 고정 대상 전송 주소로 전송됩니다. NULL이 아닌 경우 데이터그램이 지정된 원격 전송 주소로 전송됩니다.

데이터그램 소켓에 대한 고정 원격 전송 주소를 설정하는 방법에 대한 자세한 내용은 SIO_WSK_SET_REMOTE_ADDRESS.

데이터그램 소켓의 고정 대상 전송 주소를 설정하는 방법에 대한 자세한 내용은 SIO_WSK_SET_SENDTO_ADDRESS.

[in] ControlInfoLength

ControlInfo 매개 변수가 가리키는 버퍼의 데이터 바이트 수입니다. 데이터그램과 연결된 컨트롤 정보가 없는 경우 ControlInfoLength 매개 변수는 0이어야 합니다.

[in, optional] ControlInfo

전송되는 데이터그램과 연결된 제어 정보가 포함된 버퍼에 대한 포인터입니다. 컨트롤 정보 데이터는 하나 이상의 컨트롤 데이터 개체로 구성되며 각 개체는 CMSGHDR 구조로 시작됩니다. 데이터그램과 연결된 컨트롤 정보가 없는 경우 이 매개 변수는 NULL이어야 합니다.

[in, out] Irp

WSK 하위 시스템이 비동기적으로 보내기 작업을 완료하는 데 사용하는 호출자 할당 IRP에 대한 포인터입니다. WSK 함수와 함께 IRP를 사용하는 방법에 대한 자세한 내용은 Winsock 커널 함수에서 IRP 사용을 참조하세요.

반환 값

WskSendTo 는 다음 NTSTATUS 코드 중 하나를 반환합니다.

반환 코드 설명
STATUS_SUCCESS
데이터그램이 소켓을 통해 성공적으로 전송되었습니다. IRP는 성공 상태 완료됩니다. IRP의 IoStatus.Information 필드에는 전송된 바이트 수가 포함됩니다.
STATUS_PENDING
WSK 하위 시스템은 소켓을 통해 데이터그램을 즉시 보낼 수 없습니다. WSK 하위 시스템은 소켓을 통해 데이터그램을 보낸 후 IRP를 완료합니다. 보내기 작업의 상태 IRP의 IoStatus.Status 필드에 반환됩니다. 작업이 성공하면 IRP의 IoStatus.Information 필드에 전송된 바이트 수가 포함됩니다.
STATUS_FILE_FORCED_CLOSED
소켓이 더 이상 작동하지 않습니다. IRP는 실패 상태 완료됩니다. WSK 애플리케이션은 WskCloseSocket 함수를 호출하여 가능한 한 빨리 소켓을 닫아야 합니다.
기타 상태 코드
오류가 발생했습니다. IRP는 실패 상태 완료됩니다.

설명

WskSendTo 함수가 STATUS_PENDING 반환하는 경우 Buffer 매개 변수가 가리키는 WSK_BUF 구조에 설명된 MDL 체인은 IRP가 완료될 때까지 메모리에 잠겨 있어야 합니다. 또한 ControlInfo 매개 변수가 가리키는 버퍼도 IRP가 완료될 때까지 유효한 상태를 유지해야 합니다. WSK 애플리케이션이 ExAllocateXxx 함수 중 하나를 사용하여 MDL 체인 또는 제어 정보 버퍼를 할당한 경우 IRP가 완료될 때까지 해당 ExFreeXxx 함수로 메모리를 해제할 수 없습니다. WSK 애플리케이션이 스택에 MDL 체인 또는 제어 정보 버퍼를 할당한 경우 IRP가 완료될 때까지 WskSendTo 함수를 호출하는 함수에서 반환할 수 없습니다.

WSK 하위 시스템은 소켓을 통해 데이터그램을 보낼 때 데이터의 버퍼링을 수행하지 않습니다. 따라서 WskSendTo 함수에 대한 호출은 모든 데이터가 실제로 전송될 때까지 WSK 하위 시스템에 의해 완료되지 않습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista 이상 버전의 Windows 운영 체제에서 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 wsk.h(Wsk.h 포함)
IRQL <= DISPATCH_LEVEL

추가 정보

CMSGHDR

SOCKADDR

WSK_BUF

WSK_PROVIDER_DATAGRAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskControlSocket

WskReceiveFrom

WskReceiveFromEvent