Share via


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

전송 매개 변수를 검색할 I/O 요청에 대한 SPBREQUEST 핸들입니다. 이 매개 변수는 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(&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);
}

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8 시작해서 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 spbcx.h
라이브러리 Spbcxstubs.lib
IRQL <= DISPATCH_LEVEL

추가 정보