EVT_SERCX2_CUSTOM_RECEIVE_TRANSACTION_START 콜백 함수(sercx.h)
EvtSerCx2CustomReceiveTransactionStart 이벤트 콜백 함수는 SerCx2(직렬 프레임워크 확장) 버전 2에서 호출되어 사용자 지정 수신 트랜잭션을 시작합니다.
통사론
EVT_SERCX2_CUSTOM_RECEIVE_TRANSACTION_START EvtSercx2CustomReceiveTransactionStart;
void EvtSercx2CustomReceiveTransactionStart(
[in] SERCX2CUSTOMRECEIVETRANSACTION CustomReceiveTransaction,
[in] WDFREQUEST Request,
[in] PMDL Mdl,
[in] ULONG Offset,
[in] ULONG Length
)
{...}
매개 변수
[in] CustomReceiveTransaction
사용자 지정 수신 트랜잭션 개체에 대한 SERCX2CUSTOMRECEIVETRANSACTION 핸들입니다. 이전에 SerCx2CustomReceiveTransactionCreate 메서드를 호출한 직렬 컨트롤러 드라이버는 이 개체를 만듭니다.
[in] Request
사용자 지정 수신 트랜잭션과 연결된 프레임워크 요청 개체에 대한 핸들입니다. 드라이버는 이 요청을 완료할 책임이 있습니다. 이 요청은 클라이언트에서 보낸 IRP_MJ_READ 요청이 아니므로 직렬 컨트롤러 드라이버는 이 요청을 사용하여 읽기 버퍼에 액세스하려고 시도해서는 안 됩니다. 이 요청은 주로 취소, 완료 및 큐 전달(필요한 경우)에 사용됩니다. 클라이언트의 읽기 요청에 대한 읽기 버퍼에 액세스하려면 Mdl, Offset및 Length 매개 변수를 사용합니다.
[in] Mdl
사용자 지정 수신 트랜잭션에 대한 읽기 버퍼로 확장되는 메모리 페이지를 설명하는 MDL 대한 포인터입니다. 데이터 전송에 대한 분산/수집 목록은 Offset 및 Length 매개 변수로 지정된 이 메모리의 영역을 사용합니다.
[in] Offset
데이터 전송의 시작 오프셋입니다. 이 매개 변수는 MDL에서 설명하는 버퍼 영역의 시작 부분부터의 바이트 오프셋입니다. MDL에서 버퍼 공간의 총 N바이트를 지정하는 경우 Offset 가능한 값은 0에서 N-1까지의 범위에 있습니다.
[in] Length
데이터 전송의 크기(바이트)입니다. MDL이 총 N바이트의 버퍼 공간을 지정하는 경우 Length 가능한 값은 1에서 N까지의 범위오프셋있습니다.
반환 값
없음
발언
직렬 컨트롤러 드라이버는 사용자 지정 수신 트랜잭션 개체를 만드는 경우 이 함수를 구현해야 합니다. 드라이버는 이 개체를 만드는 SerCx2CustomReceiveTransactionCreate 호출에 함수를 등록합니다.
SerCx2가 EvtSerCx2CustomReceiveTransactionStart 함수를 호출한 후 직렬 컨트롤러 드라이버는 직렬 컨트롤러 하드웨어의 수신 FIFO에서 읽기 요청의 버퍼로 데이터를 이동하는 사용자 지정 데이터 전송 메커니즘을 프로그래밍하여 트랜잭션을 시작합니다. 요청을 즉시 완료할 수 없다면 EvtSerCx2CustomReceiveTransactionStart 함수가 반환되기 전에 드라이버는 WdfRequestMarkCancelableEx 같은 메서드를 호출하여 요청을 취소 가능으로 표시해야 합니다.
EvtSerCx2CustomReceiveTransactionStart 함수가 트랜잭션을 시작한 후 SerCx2는 주기적으로 EvtSerCx2CustomReceiveTransactionQueryProgress 이벤트 콜백 함수를 호출하여 이 트랜잭션을 수행하는 직렬 컨트롤러 드라이버의 진행률을 모니터링합니다. 트랜잭션이 완료되고 드라이버가 보류 중인 읽기 요청을 완료한 후 드라이버가 이 함수를 구현하는 경우 SerCx2는 EvtSerCx2CustomReceiveTransactionCleanup 이벤트 콜백 함수를 호출합니다.
직렬 컨트롤러 드라이버가 EvtSerCx2CustomReceiveTransactionInitialize 이벤트 콜백 함수를 구현하는 경우 SerCx2는 EvtSerCx2CustomReceiveTransactionStart 함수를 호출하기 전에 이 함수를 호출합니다. EvtSerCx2CustomReceiveTransactionStart가 호출되기 직전과 EvtSerCx2CustomReceiveTransactionInitialize 호출이 반환된 후 SerCx2는 읽기 요청 시간이 초과되었는지 여부를 감지하는 타이머를 시작합니다. 자세한 내용은 SERIAL_TIMEOUTS총 시간 제한에 대한 설명을 참조하세요.
사용자 지정 데이터 전송 메커니즘이 버스 마스터 DMA 디바이스인 경우 EvtSerCx2CustomReceiveTransactionStart 함수는 WdfDmaTransactionInitializeUsingOffset 같은 메서드를 호출하여 Mdl설명한 읽기 버퍼, 오프셋및 길이 매개 변수를 사용하는 DMA 트랜잭션을 시작할 수 있습니다.
Request 매개 변수로 식별된 요청 개체에 프라이빗 컨텍스트에 대한 스토리지가 포함된 경우 직렬 컨트롤러 드라이버가 컨텍스트에 처음 액세스할 때 이 스토리지가 초기화되지 않을 수 있습니다. 첫 번째 액세스에서 드라이버는 일반적으로 컨텍스트를 0으로 채운 다음 필요한 경우 0이 아닌 초기 값이 필요한 컨텍스트의 필드를 명시적으로 설정해야 합니다.
자세한 내용은 SerCx2 Custom-Receive 트랜잭션참조하세요.
예제
EvtSerCx2CustomReceiveTransactionStart 콜백 함수를 정의하려면 먼저 정의하는 콜백 함수의 형식을 식별하는 함수 선언을 제공해야 합니다. Windows는 드라이버에 대한 콜백 함수 형식 집합을 제공합니다. 콜백 함수 형식을 사용하여 함수를 선언하면 드라이버,
예를 들어 MyCustomReceiveTransactionStart
명명된 EvtSerCx2CustomReceiveTransactionStart 콜백 함수를 정의하려면 다음 코드 예제와 같이 EVT_SERCX2_CUSTOM_RECEIVE_TRANSACTION_START 함수 형식을 사용합니다.
EVT_SERCX2_CUSTOM_RECEIVE_TRANSACTION_START MyCustomReceiveTransactionStart;
그런 다음 다음과 같이 콜백 함수를 구현합니다.
_Use_decl_annotations_
VOID
MyCustomReceiveTransactionStart(
SERCX2CUSTOMRECEIVETRANSACTION CustomReceiveTransaction,
WDFREQUEST Request,
PMDL Mdl,
ULONG Offset,
ULONG Length
)
{...}
EVT_SERCX2_CUSTOM_RECEIVE_TRANSACTION_START 함수 형식은 Sercx.h 헤더 파일에 정의됩니다. 코드 분석 도구를 실행할 때 오류를 보다 정확하게 식별하려면 함수 정의에 Use_decl_annotations 주석을 추가해야 합니다.
Use_decl_annotations 주석은 헤더 파일의 EVT_SERCX2_CUSTOM_RECEIVE_TRANSACTION_START 함수 형식에 적용되는 주석이 사용되는지 확인합니다. 함수 선언 요구 사항에 대한 자세한 내용은 KMDF 드라이버함수 역할 형식을 사용하여 함수 선언을 참조하세요.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 8.1 시작해서 사용할 수 있습니다. |
대상 플랫폼 | 바탕 화면 |
헤더 | sercx.h |
IRQL |
IRQL <= DISPATCH_LEVEL 호출합니다. |
참고 항목
MDL
SERCX2CUSTOMRECEIVETRANSACTION
SerCx2CustomReceiveTransactionCreate