Função SpbRequestGetTransferParameters (spbcx.h)
O método SpbRequestGetTransferParameters recupera os parâmetros de transferência para uma transferência individual em uma sequência de transferência de E/S.
Sintaxe
void SpbRequestGetTransferParameters(
[in] SPBREQUEST SpbRequest,
[in] ULONG Index,
[out, optional] SPB_TRANSFER_DESCRIPTOR *TransferDescriptor,
[out, optional] PMDL *TransferBuffer
);
Parâmetros
[in] SpbRequest
Um identificador SPBREQUEST para a solicitação de E/S da qual recuperar os parâmetros de transferência. Esse parâmetro deve ser um identificador para uma solicitação de IOCTL_SPB_EXECUTE_SEQUENCE .
[in] Index
O índice de uma transferência na sequência de transferência de E/S. Para obter mais informações, consulte a seção Comentários a seguir.
[out, optional] TransferDescriptor
Um ponteiro para uma estrutura de SPB_TRANSFER_DESCRIPTOR alocada pelo chamador na qual o método grava os parâmetros de transferência. O parâmetro TransferDescriptor é opcional e pode ser especificado como NULL se o chamador não exigir os parâmetros de transferência. Para obter mais informações, consulte a seção Comentários.
[out, optional] TransferBuffer
Um ponteiro para um local no qual o método grava um ponteiro em um MDL (ou uma cadeia de MDL) que descreve a memória física no buffer de transferência. O chamador não deve modificar o conteúdo desse MDL. Esse parâmetro é opcional e pode ser definido como NULL se o MDL não for necessário. Para obter mais informações, consulte a seção Comentários a seguir.
Retornar valor
Nenhum
Comentários
Para solicitar uma sequência de transferência de E/S, um cliente (driver periférico) do driver do controlador SPB envia uma solicitação IOCTL_SPB_EXECUTE_SEQUENCE que contém uma lista das transferências na sequência. O driver do controlador pode chamar SpbRequestGetTransferParameters para obter informações sobre uma transferência específica na sequência.
O parâmetro Index é um índice que identifica uma transferência específica na sequência. Se N for o número de transferências na sequência, os índices válidos variam de 0 a N-1. Para determinar o número de transferências na sequência, chame o método SpbRequestGetParameters . Esse método recupera uma estrutura SPB_TRANSFER_DESCRIPTOR que contém os parâmetros de solicitação. O membro TransferCount dessa estrutura especifica o número de transferências na sequência.
Se TransferDescriptor não for NULL, o chamador deverá chamar a função SPB_TRANSFER_DESCRIPTOR_INIT para inicializar a estrutura antes de chamar SpbRequestGetTransferParameters. Depois que a estrutura é inicializada, ela pode ser reutilizada quantas vezes forem necessárias sem ser reinicializada.
TransferBuffer é um ponteiro opcional no qual SpbRequestGetTransferParameters grava um ponteiro em um MDL que descreve o layout de página física para o buffer de transferência. O buffer de transferência pode ser descrito por um único MDL ou por uma cadeia de MDL. Um buffer simples, que consiste em um bloco contíguo de memória virtual, é descrito por um único MDL. Se um buffer de transferência for formatado como uma lista de coleta de dispersão, cada bloco contíguo de memória virtual no buffer será descrito por um MDL em uma cadeia de MDL. Para obter mais informações sobre MDLs, consulte Usando MDLs.
Exemplos
//
// Note that this snippet shows a transfer completing synchronously. This
// is a horrible thing for a driver to do, but demonstrates the DDI nicely.
//
WDF_REQUEST_PARAMETERS parameters;
WDF_TRANSFER_DESCRIPTOR transfer;
WDF_REQUEST_PARAMETERS_INIT(¶meters);
WDF_TRANSFER_DESCRIPTOR_INIT(&transfer);
SpbRequestGetParameters(request, ¶meters);
for (ULONG i = 0; i < parameters.SequenceCount; i += 1)
{
WDFMEMORY buffer;
SpbRequestGetTransferParameters(request, i, &transfer, &buffer);
MyDriverPerformTransfer(deviceContext,
request,
transfer,
buffer);
}
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Disponível a partir do Windows 8. |
Plataforma de Destino | Universal |
Cabeçalho | spbcx.h |
Biblioteca | Spbcxstubs.lib |
IRQL | <= DISPATCH_LEVEL |