ランゲージモニタがプリンタ ポートのオープンに失敗することがあります。

適用対象: Windows 8Windows 8.1Windows Driver Kit 8.1

現象


InitializePrintMonitor2() をサポートしていないランゲージモニタが、この初期化関数をサポートしているポートモニタに対して、OpenPort() もしくは OpenPortEx() でポートのオープンを要求しても失敗することがあります。

原因


Windows 2000 以降のポートモニタとランゲージモニタでは、InitializePrintMonitor2() で初期化を行うことを推奨しており、この関数以外の初期化は推奨していません。
Windows 8 以前では、InitializePrintMonitor2() で登録したコールバック関数と非推奨の初期化関数で登録したコールバック関数が、混在しているプリント キューにおいて、スプーラーサービスがコールバック関数のインターフェースの変換処理を行っていました。
しかしながら、Windows 8 以降、非推奨の初期化関数で登録したコールバック関数の変換処理を廃止しました。この変換処理の廃止に伴い 、非推奨の初期化関数で実装しているランゲージモニタでは、InitializePrintMonitor2() で初期化するポート モニタの利用ができなくなります。
 

解決方法


この問題を回避するためには、InitializePrintMonitor2() で初期化を行うランゲージ モニタに移行する必要があります。

詳細


この問題が発生するプリンタ ポートの例としては、Bluetooth ポートやターミナル サービスのリダイレクトポートがあります。
また、USB ポートは特例処理として、インターフェースの変換処理を行う場合があります。