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
函数来检查未经请求的状态信息。 如果此类读取操作成功,应通过调用 Microsoft Windows SDK 文档) 中所述的 SetPort (将状态信息返回到后台处理程序。
通常,端口监视器服务器 DLL 的ReadPort
函数调用 Windows SDK 文档) 中所述的 ReadFile (,以从内核模式端口驱动程序获取数据。 函数只是将数据返回给调用方。
尽管语言监视器和端口监视器都必须定义 ReadPort
函数并将其地址置于MONITOR2结构中,但后台处理程序或应用程序从未实际调用语言监视器的 ReadPort
函数。 函数仅用于语言监视器本身的内部使用。
例如,pjlmon.dll,示例语言监视器创建一个单独的线程,该线程调用自己的ReadPort
线程来watch未经请求的打印机状态信息,函数ReadPort
调用端口监视器的 ReadPort
函数。 当端口监视器将数据返回到语言监视器时,语言监视器将分析收到的数据,并调用 Windows SDK 文档) 中所述的 SetPort (,以将状态信息发送到后台处理程序。
函数应通过将数字放置在 由读指向的位置来返回成功读取的字节数。 调用方通过检查 ReadPort's
返回值(而不是返回的字节计数)来确定写入操作的成功或失败。 因此,返回的字节计数为零并不表示读取失败,除非函数返回 FALSE。
某种系统实现或监视实现的超时机制必须确保 ReadPort
函数将在合理的时间内返回,以避免后台处理程序停止。
语言监视器可以在 StartDocPort EndDocPort/ 对之外调用端口监视器的ReadPort
例程。 (此类调用可能是由线程检查未经请求的状态生成的。) 但是,某些端口监视器可能会使此类调用失败,因此必须编写语言监视器来处理此失败。
要求
要求 | 值 |
---|---|
目标平台 | 桌面 |
标头 | winsplp.h (包括 Winsplp.h) |
Library | NtosKrnl.exe |