EVT_SERCX_CONTROL 콜백 함수(sercx.h)
EvtSerCxControl 이벤트 콜백 함수는 SerCx(직렬 프레임워크 확장)에서 지원하는 I/O 제어 코드(IOCTL)가 있는 I/O 컨트롤 요청을 처리합니다.
통사론
EVT_SERCX_CONTROL EvtSercxControl;
NTSTATUS EvtSercxControl(
[in] WDFDEVICE Device,
[in] WDFREQUEST Request,
[in] size_t OutputBufferLength,
[in] size_t InputBufferLength,
[in] ULONG IoControlCode
)
{...}
매개 변수
[in] Device
직렬 컨트롤러를 나타내는 프레임워크 디바이스 개체에 대한 WDFDEVICE 핸들입니다.
[in] Request
I/O 컨트롤 요청을 나타내는 프레임워크 요청 개체에 대한 WDFREQUEST 핸들입니다.
[in] OutputBufferLength
Request 매개 변수로 지정된 I/O 컨트롤 요청에 대한 출력 버퍼의 길이(바이트)를 지정합니다.
[in] InputBufferLength
Request 매개 변수로 지정된 I/O 컨트롤 요청에 대한 입력 버퍼의 길이(바이트)를 지정합니다.
[in] IoControlCode
Request 매개 변수에 지정된 I/O 컨트롤 요청에서 IOCTL을 지정합니다.
반환 값
EvtSerCxControl 함수는 호출에 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 적절한 오류 상태 코드를 반환합니다. 자세한 내용은 다음 설명 섹션을 참조하세요.
발언
이 콜백 함수를 구현하려면 직렬 컨트롤러 드라이버가 필요합니다. SerCx는 이 함수를 호출하여 처리를 위해 I/O 컨트롤 요청을 컨트롤러 드라이버에 전달합니다. 이 함수가 반환되기 전에 요청된 작업을 수행하거나 오류 상태를 반환하여 요청을 완료해야 합니다. 특정 요청에 대한 지원을 구현하지 않는 드라이버는 이 요청에 대한 STATUS_NOT_IMPLEMENTED 오류 상태를 반환해야 합니다.
일반적으로 EvtSerCxControl 함수는 이 함수가 직렬 컨트롤러의 하드웨어 레지스터에서 설정을 변경하기 전에 컨트롤러 드라이버의 ISR과 동기화되어야 합니다.
EvtSerCxControl 함수의 반환 값은 이 함수가 I/O 컨트롤 요청의 상태 블록에 쓰는 상태 값과 일치해야 합니다. SerCx는 반환 값을 사용하여 컨트롤러 드라이버 및 직렬 컨트롤러 하드웨어의 상태를 추적합니다.
다음은 이 콜백 함수가 처리하도록 준비해야 하는 IOCTL 목록입니다.
IOCTL_SERIAL_CLEAR_STATSIOCTL_SERIAL_CLR_DTRIOCTL_SERIAL_CLR_RTSIOCTL_SERIAL_GET_BAUD_RATEIOCTL_SERIAL_GET_CHARSIOCTL_SERIAL_GET_COMMSTATUSIOCTL_SERIAL_GET_DTRRTSIOCTL_SERIAL_GET_HANDFLOWIOCTL_SERIAL_IMMEDIATE_CHARIOCTL_SERIAL_GET_LINE_CONTROLIOCTL_SERIAL_GET_MODEM_CONTROLIOCTL_SERIAL_GET_MODEMSTATUSIOCTL_SERIAL_GET_PROPERTIESIOCTL_SERIAL_GET_STATSIOCTL_SERIAL_LSRMST_INSERTIOCTL_SERIAL_SET_BAUD_RATEIOCTL_SERIAL_SET_BREAK_OFFIOCTL_SERIAL_SET_BREAK_ONIOCTL_SERIAL_SET_CHARSIOCTL_SERIAL_SET_DTRIOCTL_SERIAL_SET_FIFO_CONTROLIOCTL_SERIAL_SET_HANDFLOWIOCTL_SERIAL_SET_LINE_CONTROLIOCTL_SERIAL_SET_ MODEM_CONTROLIOCTL_SERIAL_SET_RTSIOCTL_SERIAL_SET_XOFFIOCTL_SERIAL_SET_XONIOCTL_SERIAL_XOFF_COUNTEREvtSerCxControl 콜백 함수를 등록하기 위해 컨트롤러 드라이버는 EvtDriverDeviceAdd 콜백 중에 SerCxInitialize 메서드를 호출합니다.
예제
이 콜백에 대한 함수 형식은 다음과 같이 Sercx.h에서 선언됩니다.
typedef NTSTATUS
EVT_SERCX_CONTROL(
__in WDFREQUEST Request,
__in size_t OutputBufferLength,
__in size_t InputBufferLength,
__in ULONG IoControlCode
);
EVT_SERCX_CONTROL MyEvtSerCxControl;
그런 다음 다음과 같이 콜백 함수를 구현합니다.
NTSTATUS
MyEvtSerCxControl(
__in WDFREQUEST Request,
__in size_t OutputBufferLength,
__in size_t InputBufferLength,
__in ULONG IoControlCode
)
{ ... }
함수 선언에 대한 SDV 요구 사항에 대한 자세한 내용은 KMDF 드라이버함수 역할 형식을 사용하여 함수 선언을 참조하세요.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 8부터 사용할 수 있습니다. |
대상 플랫폼 | 바탕 화면 |
헤더 | sercx.h |
IRQL |
IRQL <= DISPATCH_LEVEL 호출 |