none
サービスプログラムからセッションを作成する方法について RRS feed

  • 質問

  • Windows OSのログオン待ちでない任意のタイミングで、サービスプログラムから、
    セッションの作成をすることはできますでしょうか?
      ※ここで言う"セッション"とは、Windows OSのユーザログインの単位で
        作成されるものを指します。

    Credential Provider を使用して実現できないものかと考えましたが、
    Credential Provider DLLのロード元となる logonui.exe は常に起動している
    わけではないので、不可能なように思えます。
    LogonUserというWin32関数も試しましたが、認証ができるだけで、セッションの
    作成という動作にはなりませんでした。

    OSはWindows Server 2012 R2を想定しています。
    よい方法がありましたら教えてください。

    2015年8月13日 7:28

すべての返信

  • 質問文には「セッションの作成」としか書かれていませんが、セッションを作成したい理由は何でしょうか? 別のアプローチで解決する可能性もあります。

    とりあえず、CreateProcessAsUserCreateProcessWithLogonWで求めるものが実現できるかは試されましたでしょうか?

    2015年8月13日 7:52
  • ご回答をいただきありがとうございます。

    開発中のリモート操作ツール※にて、接続時に新たにセッションを起してそのセッショ
    ン上でリモート操作を行なうような機能の追加を考えており、その実現性を検討しています。
    やりたいことは、まさにOSのリモートデスクトップがやっているようなことです。
    ※リモート操作ツールとは、例えばpcAnywhereやLAPLINKのような製品を指します。

    CreateProcessAsUser、CreateProcessWithLogonW という関数ですが、これらはプロセス
    を作成する関数ですのでどのような使い方をしてもそれ自体がセッションを作成すると
    いう動作にはならないのではないかと思っています。

    何かセッション作成のための特別なコマンドがあって、それを上記の関数で実行する
    必要があるのであれば試してみたいと思っています。

    よろしくお願いいたします。

    2015年8月13日 8:44
  • Remote Desktop Protocol Provider APIの記述を見る限り、
    ・Providerとして登録しておいて、
    ・sessionが欲しいときにOnConnectを発行すれば
    ・sessionはできる
    という感じに見えます。

    jzkey

    2015年8月13日 12:21
  • Remote Desktop Protocol Provider API について調べてみることにします。

    ありがとうございます。

    2015年8月13日 23:57
  • Remote Desktop Protocol Provider API について調べてみましたが
    よくわかりません。
    結局、この方法でセッションを作成するためには、サーバ側で
    OS標準のターミナルサーバサービスと同等のものを自前で作成
    して動かしておく必要があるということになるのでしょうか?
    2015年8月14日 7:37
  • ターミナルサービス、現リモートデスクトップサービスにRDP以外の手順で接続するためのやり方、という認識です。
    何せほかにsessionを作れるAPIとかは無いもので。


    jzkey

    2015年8月14日 13:28