none
プリンタドライバ : "DDK sample Port" での "COM1:"使用 RRS feed

  • 質問

  • はじめまして。海外版のWDKで質問を投げているのですが、どなたからもコメント頂けず困っています。どなたか助けて頂ければ幸いです。

    Windows7上で、プリンタドライバのポートモニタの開発をしようとしています。WDKのサンプルで以下を参照しています。"WinDDK\7600.16385.1\src\print\monitors\localmon と localui” コンパイルとインストールは成功しました。インストールされた"DDK sample Port"で"COM1:" を使用したいのですが、"Port Name" ダイアログで "COM1:" を追加しようとするとエラーとなってしまいます。すでに"COM1:" がOSによって準備されている(既存)なので、エラーとなっているのだと思いますが、WDKサンプルのlocalmonのソースをみるとあたかも"COM1:"が使用できる様な記述の様にみてとれます。

    この"DDK sample Port"そのままでは"COM1:"を使用はできないのでしょうか?(大幅な改造が必要ですか?)

    • 移動 Mike Wang (MSCS) 2012年10月2日 12:48 (移動元:Windows デバイスドライバー開発)
    2011年8月10日 2:38

回答

  • WDK Dcoument および MSDN の下記サイトに、次のような説明があります。

    ------------------------------------------------------------
    Sample Port Monitor
    http://msdn.microsoft.com/en-us/library/ff562048(v=vs.85).aspx

    ....
    Beginning with Windows 2000, all of the functions that LOCALMON exports were incorporated into Localspl.dll, the Local Print Provider.
    ....
    ------------------------------------------------------------

    これは、WDK サンプルとして提供されている localmon.dll と同等の機能が、Local Print Provider である localspl.dll に実装されていることを意味しているのだと思います。
    下記レジストリを確認すると、Local Port 用の Monitor として localspl.dll が設定されていることが確認できると思います。

    ------------------------------------------------------------
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Local Port]
    "Driver"="localspl.dll"
    ------------------------------------------------------------

    つまり、localmon.dll のインストール後にこの Port Monitor 経由で "COM1:" プリンタ ポートを作成しようとしても、既にデフォルトの Local Port Monitor である localspl.dll により "COM1:" は作成済みであるため、二重登録となりエラーになるのだと思います。

    もしかしたら、上記レジストリの "localspl.dll" の部分を "ddklocalmon.dll" (Sources ファイルで別のモジュール名に変更しているのであれば、その名前) に変更すれば、エラーを回避できるかも知れません。
    (レジストリの変更は危険を伴うので試していません。 もし試すのであれば、十分に気をつけて自己責任にてお願い致します。)

    なお、私の認識に誤りがありましたらご容赦ください。

    2011年8月10日 8:01

すべての返信

  • WDK Dcoument および MSDN の下記サイトに、次のような説明があります。

    ------------------------------------------------------------
    Sample Port Monitor
    http://msdn.microsoft.com/en-us/library/ff562048(v=vs.85).aspx

    ....
    Beginning with Windows 2000, all of the functions that LOCALMON exports were incorporated into Localspl.dll, the Local Print Provider.
    ....
    ------------------------------------------------------------

    これは、WDK サンプルとして提供されている localmon.dll と同等の機能が、Local Print Provider である localspl.dll に実装されていることを意味しているのだと思います。
    下記レジストリを確認すると、Local Port 用の Monitor として localspl.dll が設定されていることが確認できると思います。

    ------------------------------------------------------------
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Local Port]
    "Driver"="localspl.dll"
    ------------------------------------------------------------

    つまり、localmon.dll のインストール後にこの Port Monitor 経由で "COM1:" プリンタ ポートを作成しようとしても、既にデフォルトの Local Port Monitor である localspl.dll により "COM1:" は作成済みであるため、二重登録となりエラーになるのだと思います。

    もしかしたら、上記レジストリの "localspl.dll" の部分を "ddklocalmon.dll" (Sources ファイルで別のモジュール名に変更しているのであれば、その名前) に変更すれば、エラーを回避できるかも知れません。
    (レジストリの変更は危険を伴うので試していません。 もし試すのであれば、十分に気をつけて自己責任にてお願い致します。)

    なお、私の認識に誤りがありましたらご容赦ください。

    2011年8月10日 8:01
  • VRE様

    コメントありがとうございました。ご丁寧な説明を頂いた事に感謝しています。

    >Beginning with Windows 2000, all of the functions that LOCALMON exports were incorporated into Localspl.dll, the Local Print Provider.
      この記述は私も拝見していました。所有の実機で確認したところ以下となっていました。

                         Win2000      XP       7
    localmon.dll         有           無        無     
    localspl.dll           有           有        有

    >これは、WDK サンプルとして提供されている localmon.dll と同等の機能が、Local Print Provider である localspl.dll に実装されていることを意味しているのだと思います。
      その理解です。

    >下記レジストリを確認すると、Local Port 用の Monitor として localspl.dll が設定されていることが確認できると思います。

    >------------------------------------------------------------
    >[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Local Port]
    >"Driver"="localspl.dll"
    >------------------------------------------------------------

      確認しました。

    >つまり、localmon.dll のインストール後にこの Port Monitor 経由で "COM1:" プリンタ ポートを作成しようとしても、既にデフォルトの Local Port Monitor である localspl.dll に>より "COM1:" は作成済みであるため、二重登録となりエラーになるのだと思います。

      そう思います。

    >もしかしたら、上記レジストリの "localspl.dll" の部分を "ddklocalmon.dll" (Sources ファイルで別のモジュール名に変更しているのであれば、その名前) に変更すれば、エラーを回>避できるかも知れません。
    >(レジストリの変更は危険を伴うので試していません。 もし試すのであれば、十分に気をつけて自己責任にてお願い致します。)

     試してみましたが、やはり追加できませんでした。

     さきほど、以下情報をみつけました。

    http://blogs.msdn.com/b/ashwinn/archive/2006/02/21/localmon-vs-customportmonitor.aspx

     結論としては、「サンプルの localmon はあくまで参考にだけ使用できるものであり、ソースのカスタマイズやインストールには使用すべきではない 」という事の様です。

     >なお、私の認識に誤りがありましたらご容赦ください。

       いえいえ、コメント頂いてうれしかったです。ありがとうございました。

     

    本件、解決済とさせて頂きます。

    • 回答としてマーク Suzuki Kenichi 2011年8月10日 9:37
    • 回答としてマークされていない Suzuki Kenichi 2011年8月10日 9:39
    2011年8月10日 9:37