次の方法で共有


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、要求されていないプリンターの状態情報をwatchする独自ReadPortのを呼び出す別のスレッドを作成しReadPort、関数はポート モニターのReadPort関数を呼び出します。 ポート モニターが言語モニターにデータを返すと、言語モニターは受信したデータを解析し、SetPort (Windows SDKドキュメントで説明) を呼び出してスプーラーに状態情報を送信します。

関数は 、pcbRead が指す位置に数値を配置することで、正常に読み取られたバイト数を返す必要があります。 呼び出し元は、返されたバイト数ではなく、戻り値をチェック ReadPort's して、書き込み操作の成功または失敗を判断します。 したがって、返されるバイト数が 0 の場合、関数が FALSE を返さない限り、失敗した読み取りは表されません。

何らかのシステム実装またはモニター実装のタイムアウト メカニズムでは、スプーラーが停止しないように、関数が妥当な時間内に返されるように ReadPort する必要があります。

言語モニターは、StartDocPort/EndDocPort ペアの外部でポート モニターのReadPortルーチンを呼び出すことができます。 (このような呼び出しは、未承諾の状態をチェックするスレッドによって生成される可能性があります)。ただし、一部のポート モニターではこのような呼び出しが失敗する可能性があるため、このエラーを処理するには言語モニターを記述する必要があります。

要件

要件
対象プラットフォーム デスクトップ
Header winsplp.h (Winsplp.h を含む)
Library NtosKrnl.exe

こちらもご覧ください

GetPrinterDataFromPort

StartDocPort

OpenPortEx

OpenPort

EndDocPort