Функция SpbRequestGetTransferParameters (spbcx.h)
Метод SpbRequestGetTransferParameters извлекает параметры передачи для отдельной передачи в последовательности передачи ввода-вывода.
Синтаксис
void SpbRequestGetTransferParameters(
[in] SPBREQUEST SpbRequest,
[in] ULONG Index,
[out, optional] SPB_TRANSFER_DESCRIPTOR *TransferDescriptor,
[out, optional] PMDL *TransferBuffer
);
Параметры
[in] SpbRequest
Дескриптор SPBREQUEST для запроса ввода-вывода, из которого извлекаются параметры передачи. Этот параметр должен быть дескриптором для запроса IOCTL_SPB_EXECUTE_SEQUENCE .
[in] Index
Индекс передачи в последовательности передачи ввода-вывода. Дополнительные сведения см. в разделе "Примечания".
[out, optional] TransferDescriptor
Указатель на структуру, выделенную вызывающим объектом SPB_TRANSFER_DESCRIPTOR , в которую метод записывает параметры передачи. Параметр TransferDescriptor является необязательным и может быть указан как NULL, если вызывающий объект не требует параметры передачи. Дополнительные сведения см. в разделе Примечания.
[out, optional] TransferBuffer
Указатель на расположение, в которое метод записывает указатель на MDL (или цепочку MDL), описывающую физическую память в буфере передачи. Вызывающий объект не должен изменять содержимое этого MDL. Этот параметр является необязательным и может иметь значение NULL, если MDL не требуется. Дополнительные сведения см. в разделе "Примечания".
Возвращаемое значение
None
Remarks
Чтобы запросить последовательность передачи ввода-вывода, клиент (драйвер периферийного устройства) драйвера контроллера SPB отправляет IOCTL_SPB_EXECUTE_SEQUENCE запрос, содержащий список передач в последовательности. Драйвер контроллера может вызывать SpbRequestGetTransferParameters , чтобы получить сведения о конкретной передаче в последовательности.
Параметр Index — это индекс, который идентифицирует конкретную передачу в последовательности. Если N — это число передач в последовательности, допустимые индексы варьируются от 0 до N–1. Чтобы определить количество передач в последовательности, вызовите метод SpbRequestGetParameters . Этот метод извлекает SPB_TRANSFER_DESCRIPTOR структуру, содержащую параметры запроса. Элемент TransferCount этой структуры указывает количество передач в последовательности.
Если свойство TransferDescriptor не равно NULL, вызывающий объект должен вызвать функцию SPB_TRANSFER_DESCRIPTOR_INIT для инициализации структуры перед вызовом SpbRequestGetTransferParameters. После инициализации структуры ее можно повторно использовать столько раз, сколько потребуется, без повторной инициализации.
TransferBuffer — это необязательный указатель, в который SpbRequestGetTransferParameters записывает указатель на MDL, описывающий физический макет страницы для буфера передачи. Буфер передачи может быть описан одним MDL или цепочкой MDL. Простой буфер, состоящий из непрерывного блока виртуальной памяти, описывается одним MDL. Если буфер передачи отформатирован как список точечного сбора, каждый смежный блок виртуальной памяти в буфере описывается MDL в цепочке MDL. Дополнительные сведения о списках MDL см. в разделе Использование многомерных выражений.
Примеры
//
// 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);
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно начиная с Windows 8. |
Целевая платформа | Универсальное |
Верхняя часть | spbcx.h |
Библиотека | Spbcxstubs.lib |
IRQL | <= DISPATCH_LEVEL |