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

言论

语言监视器 和端口监视器服务器 DLL 需要定义 ReadPort 函数,并将函数的地址包含在 MONITOR2 结构中。

作为函数的 hPort 参数接收的句柄是监视器提供的 OpenPortOpenPortEx 函数提供的端口句柄。

通常,语言监视器的 ReadPort 函数调用关联的端口监视器的 ReadPort 函数,并将获取的缓冲区内容返回到调用方。

此外,语言监视器可能会创建一个单独的线程,该线程调用端口监视器的 ReadPort 函数来检查未经请求的状态信息。 如果此类读取作成功,则状态信息应通过调用 SetPort(Microsoft Windows SDK 文档中所述)返回到后台处理程序。

通常,端口监视器服务器 DLL 的 ReadPort 函数调用 ReadFile(Windows SDK 文档中所述)从内核模式端口驱动程序获取数据。 该函数只向调用方返回数据。

尽管语言监视器和端口监视器都必须定义 ReadPort 函数并将其地址放置在MONITOR2结构中,但语言监视器的 ReadPort 函数实际上从未由后台处理程序或应用程序调用。 该函数仅用于语言监视器本身的内部使用。

例如,pjlmon.dll(示例语言监视器)创建一个单独的线程,该线程调用自己的 ReadPort 来监视未经请求的打印机状态信息,ReadPort 函数调用端口监视器的 ReadPort 函数。 当端口监视器将数据返回到语言监视器时,语言监视器将分析收到的数据和调用 SetPort(Windows SDK 文档中所述)以将状态信息发送到后台处理程序。

函数应通过将数字放置在 指向的位置来返回成功读取的字节数。 调用方通过检查 ReadPort's 返回值而不是返回的字节计数来确定写入作的成功或失败。 因此,返回的字节计数为零并不表示失败的读取,除非函数返回 FALSE

某种系统实现或监视器实现的超时机制必须确保 ReadPort 函数在合理的时间内返回,以避免停止后台处理程序。

语言监视器可以在 StartDocPort/EndDocPort 对之外调用端口监视器的 ReadPort 例程。 (此类调用可能由线程检查是否有未经请求的状态生成。但是,某些端口监视器可能会失败这样的调用,因此必须编写语言监视器来处理此故障。

要求

要求 价值
目标平台 桌面
标头 winsplp.h (包括 Winsplp.h)
NtosKrnl.exe

另请参阅

GetPrinterDataFromPort

StartDocPort

OpenPortEx

OpenPort

EndDocPort