ReadPort 함수(winsplp.h)

포트 모니터의 함수는 ReadPort 프린터 포트에서 데이터를 읽습니다.

구문

BOOL ReadPort(
  _In_  HANDLE  hPort,
  _Out_ LPBYTE  pBuffer,
        DWORD   cbBuffer,
  _Out_ LPDWORD pcbRead
);

매개 변수

[in] hPort

호출자가 제공한 포트 핸들입니다.

[out] pBuffer

포트에서 읽은 데이터를 수신하는 버퍼에 대한 호출자 제공 포인터입니다.

cbBuffer

호출자가 제공한 pBuffer 크기(바이트)입니다.

[out] pcbRead

포트에서 성공적으로 읽은 바이트 수를 수신할 위치에 대한 호출자 제공 포인터입니다.

반환 값

작업이 성공하면 함수는 TRUE를 반환해야 합니다. 그렇지 않으면 FALSE를 반환해야 합니다.

설명

함수를 정의 ReadPort 하고 함수의 주소를 MONITOR2 구조에 포함하려면 언어 모니터 및 포트 모니터 서버 DLL이 필요합니다.

함수의 hPort 인수로 받은 핸들은 모니터의 OpenPort 또는 OpenPortEx 함수가 제공한 포트 핸들입니다.

일반적으로 언어 모니터의 ReadPort 함수는 연결된 포트 모니터의 ReadPort 함수를 호출하고 가져온 버퍼 콘텐츠를 호출자에게 반환합니다.

또한 언어 모니터는 포트 모니터의 ReadPort 함수를 호출하여 원치 않는 상태 정보를 확인하는 별도의 스레드를 만들 수 있습니다. 이러한 읽기 작업이 성공하면 SetPort(Microsoft Windows SDK 설명서에 설명됨)를 호출하여 상태 정보를 스풀러에 반환해야 합니다.

일반적으로 포트 모니터 서버 DLL의 ReadPort 함수는 ReadFile(Windows SDK 설명서에 설명됨)을 호출하여 커널 모드 포트 드라이버에서 데이터를 가져옵니다. 함수는 호출자에게 데이터를 반환합니다.

언어 모니터와 포트 모니터 모두 함수를 정의 ReadPort 하고 해당 주소를 MONITOR2 구조에 배치해야 하지만, 언어 모니터의 ReadPort 함수는 스풀러 또는 애플리케이션에서 실제로 호출되지 않습니다. 이 함수는 언어 모니터 자체를 내부적으로 사용하기 위한 것입니다.

예를 들어 pjlmon.dll 샘플 언어 모니터는 원치 않는 프린터 상태 정보를 감시하기 위해 자체 ReadPort 스레드를 호출하는 별도의 스레드를 만들고 함수는 ReadPort 포트 모니터의 ReadPort 함수를 호출합니다. 포트 모니터가 데이터를 언어 모니터로 반환하면 언어 모니터는 수신된 데이터를 구문 분석하고 SetPort(Windows SDK 설명서에 설명됨)를 호출하여 상태 정보를 스풀러로 보냅니다.

함수는 pcbRead가 가리키는 위치에 숫자를 배치하여 성공적으로 읽은 바이트 수를 반환해야 합니다. 호출자는 반환된 바이트 수가 아닌 반환 값을 확인하여 ReadPort's 쓰기 작업의 성공 또는 실패를 결정합니다. 따라서 반환된 바이트 수 0은 함수가 FALSE를 반환하지 않는 한 실패한 읽기를 나타내지 않습니다.

시스템 구현 또는 모니터 구현 시간 제한 메커니즘의 일종은 스풀러가 중단되지 않도록 적절한 시간 내에 함수가 반환되도록 해야 ReadPort 합니다.

언어 모니터가 StartDocPortEndDocPort/ 쌍 외부에서 포트 모니터의 ReadPort 루틴을 호출하는 것이 허용됩니다. (이러한 호출은 원치 않는 상태를 확인하는 스레드에 의해 생성될 수 있습니다.) 그러나 일부 포트 모니터는 이러한 호출에 실패할 수 있으므로 이 오류를 처리하려면 언어 모니터를 작성해야 합니다.

요구 사항

   
대상 플랫폼 데스크톱
헤더 winsplp.h(Winsplp.h 포함)
라이브러리 NtosKrnl.exe

참고 항목

GetPrinterDataFromPort

StartDocPort

OpenPortEx

OpenPort

EndDocPort