다음을 통해 공유


IOCTL_SERIAL_PURGE IOCTL(ntddser.h)

IOCTL_SERIAL_PURGE 요청은 지정된 요청을 취소하고 지정된 버퍼에서 데이터를 삭제합니다. 제거 요청을 사용하여 모든 읽기 요청 및 쓰기 요청을 취소하고 수신 버퍼 및 전송 버퍼에서 모든 데이터를 삭제할 수 있습니다.

제거 요청이 완료되었다고 해서 제거 요청에 의해 취소된 요청이 완료되었음을 의미하지는 않습니다. 클라이언트는 클라이언트가 해당 IRP를 해제하거나 다시 사용하기 전에 제거된 요청이 완료되었는지 확인해야 합니다.

주 코드

IRP_MJ_DEVICE_CONTROL

입력 버퍼

ASSOCIATedIrp.SystemBuffer 멤버는 제거 마스크를 입력하는 데 사용되는 클라이언트 할당 ULONG을 가리킵니다. 클라이언트는 제거 마스크를 다음 제거 플래그 중 하나 이상의 비트 OR로 설정합니다.

SERIAL_PURGE_RXABORT

    모든 읽기(IRP_MJ_READ) 요청을 제거합니다.

SERIAL_PURGE_RXCLEAR

    수신 버퍼가 있는 경우 제거합니다.

SERIAL_PURGE_TXABORT

    모든 쓰기(IRP_MJ_WRITE) 요청을 제거합니다.

SERIAL_PURGE_TXCLEAR

    전송 버퍼가 있는 경우 제거합니다.

입력 버퍼 길이

Parameters.DeviceIoControl.InputBufferLength 멤버는 ULONG의 크기(바이트)로 설정됩니다.

출력 버퍼

없음

출력 버퍼 길이

없음

상태 블록

요청이 성공하면 정보 멤버가 ULONG의 크기(바이트)로 설정됩니다. 그렇지 않으면 정보 멤버가 0으로 설정됩니다.

Status 멤버는 직렬 디바이스 제어 요청에 대한 일반 상태 값 중 하나로 설정됩니다. STATUS_INVALID_PARAMETER 상태 제거 마스크가 잘못되었음을 나타냅니다.

설명

Serial.sys 및 SerCx를 사용하면 IOCTL_SERIAL_PURGE 요청이 하나 이상의 SERIAL_PURGE_XXX 플래그의 조합을 지정할 수 있습니다. 그러나 SerCx2는 더 제한적입니다.

SerCx2를 사용하려면 수신 버퍼가 제거된 경우 모든 읽기 요청을 제거해야 합니다. 따라서 SERIAL_PURGE_RXCLEAR 플래그가 IOCTL_SERIAL_PURGE 요청에 설정된 경우 SerCx2 I/O 요청 큐에 읽기 요청이 없어야 하거나 SERIAL_PURGE_RXABORT 플래그를 설정해야 합니다. 그렇지 않으면 STATUS_INVALID_DEVICE_STATE 상태 코드와 함께 IOCTL_SERIAL_PURGE 요청이 실패합니다.

마찬가지로 SerCx2에서는 전송 버퍼가 제거될 경우 모든 쓰기 요청을 제거해야 합니다. 따라서 SERIAL_PURGE_TXCLEAR 플래그가 IOCTL_SERIAL_PURGE 요청에 설정된 경우 SerCx2 I/O 요청 큐에 쓰기 요청이 없어야 하거나 SERIAL_PURGE_TXABORT 플래그를 설정해야 합니다. 그렇지 않으면 STATUS_INVALID_DEVICE_STATE 상태 코드와 함께 IOCTL_SERIAL_PURGE 요청이 실패합니다.

SerCx2, SerCx 및 Serial.sys 대한 자세한 내용은 직렬 컨트롤러 드라이버 개요를 참조하세요.

요구 사항

요구 사항
헤더 ntddser.h(Ntddser.h 포함)