Compartir a través de


Función SpbRequestGetTransferParameters (spbcx.h)

El método SpbRequestGetTransferParameters recupera los parámetros de transferencia de una transferencia individual en una secuencia de transferencia de E/S.

Sintaxis

void SpbRequestGetTransferParameters(
  [in]            SPBREQUEST              SpbRequest,
  [in]            ULONG                   Index,
  [out, optional] SPB_TRANSFER_DESCRIPTOR *TransferDescriptor,
  [out, optional] PMDL                    *TransferBuffer
);

Parámetros

[in] SpbRequest

Identificador SPBREQUEST de la solicitud de E/S desde la que recuperar los parámetros de transferencia. Este parámetro debe ser un identificador para una solicitud de IOCTL_SPB_EXECUTE_SEQUENCE .

[in] Index

Índice de una transferencia en la secuencia de transferencia de E/S. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

[out, optional] TransferDescriptor

Puntero a una estructura de SPB_TRANSFER_DESCRIPTOR asignada por el autor de la llamada en la que el método escribe los parámetros de transferencia. El parámetro TransferDescriptor es opcional y se puede especificar como NULL si el autor de la llamada no requiere los parámetros de transferencia. Para más información, vea la sección Comentarios.

[out, optional] TransferBuffer

Puntero a una ubicación en la que el método escribe un puntero en una MDL (o una cadena MDL) que describe la memoria física en el búfer de transferencia. El autor de la llamada no debe modificar el contenido de este MDL. Este parámetro es opcional y se puede establecer en NULL si no se necesita MDL. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

Valor devuelto

None

Observaciones

Para solicitar una secuencia de transferencia de E/S, un cliente (controlador periférico) del controlador SPB envía una solicitud de IOCTL_SPB_EXECUTE_SEQUENCE que contiene una lista de las transferencias en la secuencia. El controlador del controlador puede llamar a SpbRequestGetTransferParameters para obtener información sobre una transferencia determinada en la secuencia.

El parámetro Index es un índice que identifica una transferencia determinada en la secuencia. Si N es el número de transferencias en la secuencia, los índices válidos oscilan entre 0 y N-1. Para determinar el número de transferencias en la secuencia, llame al método SpbRequestGetParameters . Este método recupera una estructura SPB_TRANSFER_DESCRIPTOR que contiene los parámetros de solicitud. El miembro TransferCount de esta estructura especifica el número de transferencias en la secuencia.

Si TransferDescriptor no es NULL, el autor de la llamada debe llamar a la función SPB_TRANSFER_DESCRIPTOR_INIT para inicializar la estructura antes de llamar a SpbRequestGetTransferParameters. Una vez inicializada la estructura, se puede reutilizar tantas veces como sea necesario sin reinicializarse.

TransferBuffer es un puntero opcional en el que SpbRequestGetTransferParameters escribe un puntero en una MDL que describe el diseño de página físico del búfer de transferencia. El búfer de transferencia se puede describir mediante una sola MDL o una cadena MDL. Un búfer simple, que consta de un bloque contiguo de memoria virtual, se describe mediante una sola MDL. Si un búfer de transferencia tiene el formato de una lista de recopilación de dispersión, cada bloque contiguo de memoria virtual en el búfer se describe mediante una MDL en una cadena MDL. Para obtener más información sobre las MDL, consulte Uso de MDL.

Ejemplos

//
// 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(&parameters);
WDF_TRANSFER_DESCRIPTOR_INIT(&transfer);

SpbRequestGetParameters(request, &parameters);

for (ULONG i = 0; i < parameters.SequenceCount; i += 1)
{
    WDFMEMORY buffer;

    SpbRequestGetTransferParameters(request, i, &transfer, &buffer);

    MyDriverPerformTransfer(deviceContext, 
                            request,
                            transfer,
                            buffer);
}

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows 8.
Plataforma de destino Universal
Encabezado spbcx.h
Library Spbcxstubs.lib
IRQL <= DISPATCH_LEVEL

Consulte también