SpbRequestGetTransferParameters 함수(spbcx.h)
SpbRequestGetTransferParameters 메서드는 I/O 전송 시퀀스개별 전송에 대한 전송 매개 변수를 검색합니다.
통사론
void SpbRequestGetTransferParameters(
[in] SPBREQUEST SpbRequest,
[in] ULONG Index,
[out, optional] SPB_TRANSFER_DESCRIPTOR *TransferDescriptor,
[out, optional] PMDL *TransferBuffer
);
매개 변수
[in] SpbRequest
SPBREQUEST는 전송 매개 변수를 검색할 I/O 요청에 대한 핸들을. 이 매개 변수는 IOCTL_SPB_EXECUTE_SEQUENCE 요청에 대한 핸들이어야 합니다.
[in] Index
I/O 전송 시퀀스의 전송 인덱스입니다. 자세한 내용은 다음 설명 섹션을 참조하세요.
[out, optional] TransferDescriptor
메서드가 전송 매개 변수를 작성하는 호출자가 할당한 SPB_TRANSFER_DESCRIPTOR 구조체에 대한 포인터입니다. TransferDescriptor 매개 변수는 선택 사항이며 호출자에게 전송 매개 변수가 필요하지 않은 경우 NULL로 지정할 수 있습니다. 자세한 내용은 설명 섹션을 참조하세요.
[out, optional] TransferBuffer
메서드가 전송 버퍼의 실제 메모리를 설명하는 MDL(또는 MDL 체인)에 대한 포인터를 쓰는 위치에 대한 포인터입니다. 호출자는 이 MDL의 내용을 수정해서는 안 됩니다. 이 매개 변수는 선택 사항이며 MDL이 필요하지 않은 경우 NULL로 설정할 수 있습니다. 자세한 내용은 다음 설명 섹션을 참조하세요.
반환 값
없음
발언
I/O 전송 시퀀스를 요청하기 위해 SPB 컨트롤러 드라이버의 클라이언트(주변 드라이버)는 시퀀스의 전송 목록을 포함하는 IOCTL_SPB_EXECUTE_SEQUENCE 요청을 보냅니다. 컨트롤러 드라이버는 SpbRequestGetTransferParameters 호출하여 시퀀스의 특정 전송에 대한 정보를 가져올 수 있습니다.
Index 매개 변수는 시퀀스의 특정 전송을 식별하는 인덱스입니다. N이 시퀀스의 전송 수인 경우 유효한 인덱스는 0에서 N-1까지입니다. 시퀀스의 전송 수를 확인하려면 SpbRequestGetParameters 메서드를 호출합니다. 이 메서드는 요청 매개 변수를 포함하는 SPB_TRANSFER_DESCRIPTOR 구조를 검색합니다. 이 구조체의 TransferCount 멤버는 시퀀스의 전송 수를 지정합니다.
TransferDescriptor NULL이 아닌 경우 호출자는 SpbRequestGetTransferParameters호출하기 전에 SPB_TRANSFER_DESCRIPTOR_INIT 함수를 호출하여 구조를 초기화해야 합니다. 구조체를 초기화한 후에는 다시 초기화하지 않고도 필요에 따라 여러 번 다시 사용할 수 있습니다.
TransferBufferSpbRequestGetTransferParameters 전송 버퍼의 실제 페이지 레이아웃을 설명하는 MDL에 대한 포인터를 쓰는 선택적 포인터입니다. 전송 버퍼는 단일 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 |
참고 항목
- IOCTL_SPB_EXECUTE_SEQUENCE
- SPBREQUEST
- SPB_TRANSFER_DESCRIPTOR
- SPB_TRANSFER_DESCRIPTOR_INIT
- spbRequestGetParameters