다음을 통해 공유


EVT_SERCX2_CUSTOM_TRANSMIT_TRANSACTION_START 콜백 함수(sercx.h)

EvtSerCx2CustomTransmitTransactionStart 이벤트 콜백 함수는 SerCx2(직렬 프레임워크 확장) 버전 2에서 호출되어 사용자 지정 전송 트랜잭션을 시작합니다.

구문

EVT_SERCX2_CUSTOM_TRANSMIT_TRANSACTION_START EvtSercx2CustomTransmitTransactionStart;

void EvtSercx2CustomTransmitTransactionStart(
  [in] SERCX2CUSTOMTRANSMITTRANSACTION CustomTransmitTransaction,
  [in] WDFREQUEST Request,
  [in] PMDL Mdl,
  [in] ULONG Offset,
  [in] ULONG Length
)
{...}

매개 변수

[in] CustomTransmitTransaction

사용자 지정 전송 트랜잭션 개체에 대한 SERCX2CUSTOMTRANSMITTRANSACTION 핸들입니다. 이전에 SerCx2CustomTransmitTransactionCreate 메서드를 호출하여 이 개체를 만든 직렬 컨트롤러 드라이버입니다.

[in] Request

사용자 지정 전송 트랜잭션과 연결된 프레임워크 요청 개체에 대한 핸들입니다. 드라이버는 이 요청을 완료할 책임이 있습니다. 이 요청은 클라이언트에서 보낸 IRP_MJ_WRITE 요청이 아니므로 직렬 컨트롤러 드라이버는 이 요청을 사용하여 쓰기 버퍼에 액세스하려고 시도해서는 안 됩니다. 이 요청은 주로 취소, 완료 및 큐 전달(필요한 경우)에 사용됩니다. 클라이언트의 쓰기 요청에 대한 쓰기 버퍼에 액세스하려면 Mdl, OffsetLength 매개 변수를 사용합니다.

[in] Mdl

사용자 지정 전송 트랜잭션에 대한 쓰기 버퍼에 걸쳐 있는 메모리 페이지를 설명하는 MDL 에 대한 포인터입니다. DMA 전송에 대한 분산/수집 목록은 OffsetLength 매개 변수로 지정된 이 메모리의 영역을 사용합니다. MDL 체인에 대한 자세한 내용은 MDL 사용을 참조하세요.

[in] Offset

데이터 전송의 시작 오프셋입니다. 이 매개 변수는 MDL에서 설명하는 버퍼 영역의 시작부터의 바이트 오프셋입니다. MDL이 버퍼 공간의 총 N바이트 수를 지정하는 경우 Offset 의 가능한 값은 0에서 N-1까지의 범위에 있습니다.

[in] Length

데이터 전송의 크기(바이트)입니다. MDL이 버퍼 공간의 총 N바이트 수를 지정하는 경우 Length 의 가능한 값은 1에서 N-오프셋까지의 범위에 있습니다.

반환 값

없음

설명

직렬 컨트롤러 드라이버는 사용자 지정 전송 트랜잭션 개체를 만드는 경우 이 함수를 구현해야 합니다. 구현된 경우 드라이버는 이 개체를 만드는 SerCx2CustomTransmitTransactionCreate 호출에 함수를 등록합니다.

SerCx2가 EvtSerCx2CustomTransmitTransactionStart 함수를 호출한 후 직렬 컨트롤러 드라이버는 쓰기 요청의 버퍼에서 직렬 컨트롤러 하드웨어의 전송 FIFO로 데이터를 이동하는 사용자 지정 데이터 전송 메커니즘을 프로그래밍하여 트랜잭션을 시작합니다. EvtSerCx2CustomTransmitTransactionStart 함수가 반환되기 전에 요청을 즉시 완료할 수 없는 경우 드라이버는 WdfRequestMarkCancelableEx와 같은 메서드를 호출하여 요청을 취소 가능으로 표시해야 합니다.

트랜잭션이 완료되고 드라이버가 보류 중인 쓰기 요청을 완료한 후 드라이버가 이 함수를 구현하는 경우 SerCx2는 EvtSerCx2CustomTransmitTransactionCleanup 이벤트 콜백 함수를 호출합니다.

직렬 컨트롤러 드라이버가 EvtSerCx2CustomTransmitTransactionInitialize 이벤트 콜백 함수를 구현하는 경우 SerCx2는 EvtSerCx2CustomTransmitTransactionStart 함수를 호출하기 전에 이 함수를 호출합니다. EvtSerCx2CustomTransmitTransactionStart 호출 직전과 EvtSerCx2CustomTransmitTransactionInitialize 호출이 반환된 후 SerCx2는 쓰기 요청 시간이 초과되었는지 여부를 감지하는 타이머를 시작합니다. 자세한 내용은 SERIAL_TIMEOUTS 총 시간 제한에 대한 설명을 참조하세요.

직렬 컨트롤러 드라이버는 전송 FIFO의 마지막 바이트가 직렬로 연결된 주변 장치로 전송된 후에만 보류 중인 쓰기 요청을 완료해야 합니다. 전송 FIFO에 기록된 데이터가 상당한 지연 없이 전송된다는 보장은 없으며, 이러한 보장이 있다고 가정하는 직렬 컨트롤러 드라이버가 주변 드라이버에 안정성 문제를 일으킬 수 있습니다.

사용자 지정 데이터 전송 메커니즘이 버스 master DMA 디바이스인 경우 EvtSerCx2CustomTransmitTransactionStart 함수는 WdfDmaTransactionInitializeUsingOffset과 같은 메서드를 호출하여 Mdl, OffsetLength 매개 변수에 설명된 쓰기 버퍼를 사용하는 DMA 트랜잭션을 시작할 수 있습니다.

Mdl, OffsetLength 매개 변수에 대한 자세한 내용은 EvtSerCx2CustomTransmitTransactionInitialize의 비고를 참조하세요.

Request 매개 변수로 식별된 요청 개체에 프라이빗 컨텍스트에 대한 스토리지가 포함된 경우 직렬 컨트롤러 드라이버가 컨텍스트에 처음 액세스할 때 이 스토리지가 초기화되지 않을 수 있습니다. 첫 번째 액세스에서 드라이버는 일반적으로 컨텍스트를 0으로 채운 다음 필요한 경우 0이 아닌 초기 값이 필요한 컨텍스트의 필드를 명시적으로 설정해야 합니다.

자세한 내용은 SerCx2 Custom-Transmit 트랜잭션을 참조하세요.

예제

EvtSerCx2CustomTransmitTransactionStart 콜백 함수를 정의하려면 먼저 정의하는 콜백 함수의 형식을 식별하는 함수 선언을 제공해야 합니다. Windows는 드라이버에 대한 콜백 함수 형식 집합을 제공합니다. 콜백 함수 형식을 사용하여 함수를 선언하면 드라이버에 대한 코드 분석, SDV( 정적 드라이버 검증 도구 ) 및 기타 확인 도구에서 오류를 찾는 데 도움이 되며 Windows 운영 체제용 드라이버를 작성하기 위한 요구 사항입니다.

예를 들어 라는 MyCustomTransmitTransactionStartEvtSerCx2CustomTransmitTransactionStart 콜백 함수를 정의하려면 이 코드 예제와 같이 EVT_SERCX2_CUSTOM_TRANSMIT_TRANSACTION_START 함수 형식을 사용합니다.

EVT_SERCX2_CUSTOM_TRANSMIT_TRANSACTION_START  MyCustomTransmitTransactionStart;

그런 다음 다음과 같이 콜백 함수를 구현합니다.

_Use_decl_annotations_
VOID
  MyCustomTransmitTransactionStart(
    SERCX2CUSTOMTRANSMITTRANSACTION  CustomTransmitTransaction,
    WDFREQUEST  Request,
    PMDL  Mdl,
    ULONG  Offset,
    ULONG  Length
    )
  {...}

EVT_SERCX2_CUSTOM_TRANSMIT_TRANSACTION_START 함수 형식은 Sercx.h 헤더 파일에 정의되어 있습니다. 코드 분석 도구를 실행할 때 오류를 보다 정확하게 식별하려면 함수 정의에 Use_decl_annotations 주석을 추가해야 합니다. Use_decl_annotations 주석은 헤더 파일의 EVT_SERCX2_CUSTOM_TRANSMIT_TRANSACTION_START 함수 형식에 적용되는 주석이 사용되도록 합니다. 함수 선언에 대한 요구 사항에 대한 자세한 내용은 KMDF 드라이버에 함수 역할 형식을 사용하여 함수 선언을 참조하세요. Use_decl_annotations 대한 자세한 내용은 함수 동작에 주석을 추가를 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8.1 사용하여 사용할 수 있습니다.
대상 플랫폼 데스크톱
머리글 sercx.h
IRQL IRQL <= DISPATCH_LEVEL 호출합니다.

추가 정보

EvtSerCx2CustomTransmitTransactionCleanup

EvtSerCx2CustomTransmitTransactionInitialize

IRP_MJ_WRITE

Mdl

SERCX2CUSTOMTRANSMITTRANSACTION

SERIAL_TIMEOUTS

SerCx2CustomTransmitTransactionCreate

WdfDmaTransactionInitializeUsingOffset

WdfRequestMarkCancelableEx