Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
RxCeSend envia uma TSDU (unidade de dados do serviço de transporte) ao longo da conexão especificada em um circuito virtual.
Sintaxe
NTSTATUS RxCeSend(
[in] IN PRXCE_VC pVc,
[in] IN ULONG SendOptions,
[in] IN PMDL pMdl,
[in] IN ULONG SendLength,
[in] IN PVOID pCompletionContext
);
Parâmetros
[in] pVc
Um ponteiro para o circuito virtual ao longo do qual o TSDU deve ser enviado.
[in] SendOptions
As opções desejadas para transmitir os dados nesta operação de envio pelo transporte. Observe que essa é apenas uma solicitação enviada para o transporte. O transporte só pode dar suporte a um número limitado das opções especificadas e ignorar opções sem suporte. O parâmetro SendOptions consiste em um conjunto de bits definido em rxce.h. O parâmetro SendOptions pode ser uma combinação dos seguintes bits:
RXCE_SEND_EXPEDITED
Os dados determinados devem ser enviados antes de qualquer solicitação de envio normal que o transporte esteja mantendo na fila para transmissão nesta conexão ponto a ponto de extremidade. Se o transporte não der suporte a transferências aceleradas, ele poderá ignorar esse sinalizador. Observe que RXCE_SEND_EXPEDITED é equivalente ao sinalizador de TDI_SEND_EXPEDITED TDI.
RXCE_SEND_NO_RESPONSE_EXPECTED
O chamador está dando uma dica para o transporte subjacente que não espera uma resposta para esse envio de seu par de nós remotos. Esse sinalizador deve desabilitar o retorno da confirmação de TSDU pelo transporte de nó remoto. Observe que RXCE_SEND_NO_RESPONSE_EXPECTED é equivalente ao sinalizador de TDI_SEND_NO_RESPONSE_EXPECTED.
RXCE_SEND_NON_BLOCKING
Se o transporte subjacente atualmente não tiver espaço de buffer interno disponível para os dados fornecidos, ele deverá apenas concluir o IRP com STATUS_DEVICE_NOT_READY. Se o transporte tiver algum espaço de buffer disponível, ele deverá copiar o máximo de dados possível do buffer fornecido pelo cliente, definir o membro IoStatus.Information para o número de bytes copiados e concluir o IRP com STATUS_SUCCESS.
Esse sinalizador é irrelevante para transportes que não são enviados internamente pelo buffer. Observe que RXCE_SEND_NON_BLOCKING é equivalente ao sinalizador de TDI_SEND_NON_BLOCKING.
RXCE_SEND_PARTIAL
Significa se um RX_MEM_DESC(MDL) deve ser enviado em sua totalidade ou se apenas partes dele precisarem ser enviadas. Essa opção solicita que o transporte permita que a operação de envio transmita parte dos dados se o transporte e o MDL permitirem esse comportamento.
RXCE_SEND_SYNCHRONOUS
Significa se a operação de envio deve transmitir os dados de forma síncrona. Quando essa opção é definida, a solicitação é enviada para o transporte subjacente e o controle não retorna ao chamador até que a solicitação seja concluída. Observe que o parâmetro pCompletionContext é ignorado quando esse bit é definido.
[in] pMdl
Um ponteiro para o buffer a ser enviado.
[in] SendLength
O comprimento dos dados a serem enviados.
[in] pCompletionContext
O contexto passado de volta para o chamador durante SendCompletion para operações assíncronas. Não que esse parâmetro seja ignorado se o SendOptions parâmetro solicitar uma operação de envio síncrona.
Valor de retorno
RxCeSend retorna STATUS_SUCCESS com êxito ou um dos seguintes códigos de erro sobre falha:
| Código de retorno | Descrição |
|---|---|
|
Um circuito ou conexão virtual inválido ou desconectado foi especificado |
|
Falha na alocação de memória de pool nãopagada necessária para essa rotina. |
|
Um comprimento inválido foi passado no parâmetro SendLength de com base no sendoptions especificado. |
Observações
A rotina RxCeSend alocará o IRP, criará a solicitação de envio para o driver de transporte subjacente e enviará a solicitação à TDI. No caso de operações de envio síncronas, essa rotina também será o IRP gratuito e os recursos alocados quando a rotina for concluída.
As opções assíncronas e síncronas indicadas no parâmetro SendOptions usado em RxCeSend distinguir entre duas situações. No caso assíncrono, o controle retorna ao chamador depois que a solicitação é enviada com êxito para o transporte subjacente. Os resultados de qualquer solicitação determinada são comunicados novamente usando a rotina de retorno de chamada SendCompletion. O parâmetro pCompletionContext em RxCeSend é passado novamente na rotina de retorno de chamada para ajudar o chamador a desambiguar as solicitações.
No caso síncrono, a solicitação é enviada para o transporte subjacente e o controle não retorna ao chamador até que a solicitação seja concluída. Observe que, no caso síncrono, o parâmetro pCompletionContext é ignorado e o status retornado corresponde ao status de conclusão das operações.
O benefício das opções assíncronas e síncronas depende do transporte subjacente. Em um ambiente de circuito virtual (TCP, por exemplo), uma opção síncrona implica que o controle não retorna até que os dados cheguem ao servidor. Por outro lado, para transportes orientados a datagram (UDP, por exemplo), há muito pouca diferença entre as duas opções.
Requisitos
| Requisito | Valor |
|---|---|
| da Plataforma de Destino | Área de trabalho |
| cabeçalho | rxce.h (include Rxce.h, Tdi.h) |
| IRQL | <= APC_LEVEL |