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 ReadFile(如 Windows SDK 檔中所述),以從內核模式埠驅動程式取得數據。 函式只會將數據傳回給呼叫端。
即使語言監視器和埠監視器都必須定義 ReadPort
函式,並將其位址放在MONITOR2結構中,但語言監視器的 ReadPort
函式絕不會由多任務緩衝處理器或應用程式實際呼叫。 函式僅供語言監視器本身的內部使用。
例如,pjlmon.dll,範例語言監視器,會建立個別線程,呼叫自己的 ReadPort
來監看未經請求的印表機狀態資訊,而 ReadPort
函式會呼叫埠監視器的 ReadPort
函式。 當埠監視器將數據傳回語言監視器時,語言監視器會剖析已接收的數據,並呼叫 SetPort (如 Windows SDK 檔所述)將狀態資訊傳送至多任務緩衝處理器。
函式應該傳回成功讀取的位元元組數,方法是將數位放在 所指向的位置。 呼叫端會藉由檢查 ReadPort's
傳回值來判斷寫入作業的成功或失敗,而不是傳回的位元組計數。 因此,除非函式傳回 FALSE,否則傳回的位元組計數不代表失敗的讀取。
某種系統實作或監視實作的逾時機制必須確保 ReadPort
函式會在合理的時間內傳回,以避免停止多任務緩衝處理程式。
語言監視器可以接受呼叫埠監視器的 ReadPort
例程,而 StartDocPort/EndDocPort 組之外。 (這類呼叫可能是由線程檢查是否有未經請求的狀態所產生。不過,某些埠監視器可能會失敗這類呼叫,因此必須寫入語言監視器來處理此失敗。
要求
要求 | 價值 |
---|---|
目標平臺 | 桌面 |
標頭 | winsplp.h (包括 Winsplp.h) |
連結庫 | NtosKrnl.exe |