다음을 통해 공유


RxCeSend 함수(rxce.h)

RxCeSend 는 가상 회로에서 지정된 연결을 따라 TSDU(전송 서비스 데이터 단위)를 보냅니다.

구문

NTSTATUS RxCeSend(
  [in] IN PRXCE_VC pVc,
  [in] IN ULONG    SendOptions,
  [in] IN PMDL     pMdl,
  [in] IN ULONG    SendLength,
  [in] IN PVOID    pCompletionContext
);

매개 변수

[in] pVc

TSDU를 보낼 가상 회로에 대한 포인터입니다.

[in] SendOptions

전송을 통해 이 전송 작업에서 데이터를 전송하는 데 필요한 옵션입니다. 전송에 전송된 요청일 뿐입니다. 전송은 지정된 옵션의 제한된 수만 지원하고 지원되지 않는 옵션을 무시할 수 있습니다. SendOptions 매개 변수는 rxce.h에 정의된 비트 집합으로 구성됩니다. SendOptions 매개 변수는 다음 비트의 조합일 수 있습니다.

RXCE_SEND_EXPEDITED

지정된 데이터는 전송이 현재 이 엔드포인트 간 연결에서 전송 대기 중인 일반 전송 요청보다 먼저 전송되어야 합니다. 전송이 신속한 전송을 지원하지 않는 경우 이 플래그를 무시할 수 있습니다. RXCE_SEND_EXPEDITED TDI TDI_SEND_EXPEDITED 플래그와 동일합니다.

RXCE_SEND_NO_RESPONSE_EXPECTED

호출자는 원격 노드 피어에서 이 전송에 대한 응답을 기대하지 않는다는 힌트를 기본 전송에 제공합니다. 이 플래그는 원격 노드 전송에 의한 TSDU 승인의 피기백을 사용하지 않도록 설정해야 합니다. RXCE_SEND_NO_RESPONSE_EXPECTED TDI_SEND_NO_RESPONSE_EXPECTED 플래그와 동일합니다.

RXCE_SEND_NON_BLOCKING

기본 전송에 현재 지정된 데이터에 사용할 수 있는 내부 버퍼 공간이 없는 경우 STATUS_DEVICE_NOT_READY 사용하여 IRP를 완료해야 합니다. 전송에 사용 가능한 버퍼 공간이 있는 경우 클라이언트 제공 버퍼에서 가능한 한 많은 데이터를 복사하고, IoStatus.Information 멤버를 복사한 바이트 수로 설정하고, STATUS_SUCCESS 사용하여 IRP를 완료해야 합니다.

이 플래그는 내부적으로 전송을 버퍼링하지 않는 전송과 관련이 없습니다. RXCE_SEND_NON_BLOCKING TDI_SEND_NON_BLOCKING 플래그와 동일합니다.

RXCE_SEND_PARTIAL

MDL(RX_MEM_DESC)을 전체로 보내거나 일부만 보내야 하는지를 나타냅니다. 이 옵션은 전송 및 MDL이 이 동작을 허용하는 경우 전송에서 전송 작업이 데이터의 일부를 전송하도록 허용하도록 요청합니다.

RXCE_SEND_SYNCHRONOUS

보내기 작업이 데이터를 동기적으로 전송하는 것인지를 의미합니다. 이 옵션을 설정하면 요청이 기본 전송에 제출되고 요청이 완료될 때까지 컨트롤이 호출자에게 반환되지 않습니다. 이 비트가 설정되면 pCompletionContext 매개 변수가 무시됩니다.

[in] pMdl

보낼 버퍼에 대한 포인터입니다.

[in] SendLength

보낼 데이터의 길이입니다.

[in] pCompletionContext

비동기 작업을 위해 SendCompletion 중에 호출자에게 다시 전달된 컨텍스트입니다. SendOptions 매개 변수가 동기 전송 작업을 요청하는 경우 이 매개 변수는 무시되지 않습니다.

반환 값

RxCeSend 는 성공 시 STATUS_SUCCESS 반환하거나 실패 시 다음 오류 코드 중 하나를 반환합니다.

반환 코드 설명
STATUS_CONNECTION_DISCONNECTED
잘못되었거나 연결이 끊긴 가상 회로 또는 연결이 지정되었습니다.
STATUS_INSUFFICIENT_RESOURCES
이 루틴에 필요한 비페이지 풀 메모리 할당에 실패했습니다.
STATUS_INVALID_PARAMETER
지정된 SendOptions에 따라 SendLength 매개 변수에 잘못된 길이가 전달되었습니다.

설명

RxCeSend 루틴은 IRP를 할당하고, 기본 전송 드라이버에 대한 보내기 요청을 빌드하고, 요청을 TDI에 제출합니다. 동기 송신 작업의 경우 이 루틴은 루틴이 완료될 때 할당된 무료 IRP 및 리소스도 제공합니다.

RxCeSend에 사용되는 SendOptions 매개 변수에 표시된 비동기 및 동기 옵션은 두 가지 상황을 구분합니다. 비동기 경우 요청이 기본 전송에 성공적으로 제출되면 컨트롤이 호출자에게 반환됩니다. 지정된 요청에 대한 결과는 SendCompletion 콜백 루틴을 사용하여 다시 전달됩니다. RxCeSendpCompletionContext 매개 변수는 콜백 루틴에 다시 전달되어 호출자가 요청을 명확하게 할 수 있도록 지원합니다.

동기의 경우 요청이 기본 전송에 제출되고 요청이 완료될 때까지 컨트롤이 호출자에게 반환되지 않습니다. 동기의 경우 pCompletionContext 매개 변수는 무시되고 반환되는 상태 작업의 완료 상태 해당합니다.

비동기 및 동기 옵션의 이점은 기본 전송에 따라 달라집니다. 예를 들어 TCP(가상 회로 환경)에서 동기 옵션은 데이터가 서버에 도달할 때까지 컨트롤이 반환되지 않음을 의미합니다. 반면에 데이터그램 지향 전송(예: UDP)의 경우 두 옵션 간에는 거의 차이가 없습니다.

요구 사항

요구 사항
대상 플랫폼 데스크톱
머리글 rxce.h(Rxce.h, Tdi.h 포함)
IRQL <= APC_LEVEL

추가 정보

Mdl

RxCeSendDatagram