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 参数接收的句柄是监视器提供的 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 文档中所述)以将状态信息发送到后台处理程序。
函数应通过将数字放置在 指向的位置来返回成功读取的字节数。 调用方通过检查 ReadPort's
返回值而不是返回的字节计数来确定写入作的成功或失败。 因此,返回的字节计数为零并不表示失败的读取,除非函数返回 FALSE。
某种系统实现或监视器实现的超时机制必须确保 ReadPort
函数在合理的时间内返回,以避免停止后台处理程序。
语言监视器可以在 StartDocPort/EndDocPort 对之外调用端口监视器的 ReadPort
例程。 (此类调用可能由线程检查是否有未经请求的状态生成。但是,某些端口监视器可能会失败这样的调用,因此必须编写语言监视器来处理此故障。
要求
要求 | 价值 |
---|---|
目标平台 | 桌面 |
标头 | winsplp.h (包括 Winsplp.h) |
库 | NtosKrnl.exe |