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 함수를 호출하여 구조를 초기화해야 합니다. 구조체를 초기화한 후에는 다시 초기화하지 않고 필요한 만큼 재사용할 수 있습니다.
TransferBuffer 는 SpbRequestGetTransferParameters 가 전송 버퍼의 실제 페이지 레이아웃을 설명하는 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 |
추가 정보
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기