2

ログインを実行するスクリプト バッチ ファイルまたは exe を作成しようとしています。基本的な操作を実行する必要があります-ネットワークにないWindows 7 PCにログインするだけです。バックグラウンドで実行されているjarファイルがあります。自分のWindows 7 PCにログインするためのパスワード付きのスクリプトを書きたいです。

私はすでにいくつかのユーティリティLogon.exeを調べました

上記のユーティリティが私の PC で機能していません。次のようなエラーが表示されます。

Windows Logon version 1.04
Copyright (c) 2003-2010 SoftTree Technologies, Inc.

Unable to install logon service (OpenSCManager failed).
Logon failed.

どこかで、ファイルを管理者として実行する必要があると言われています。

これは私のコードです:

Process process = new ProcessBuilder("C:\\Logon.exe","-p","welcome").start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
  System.out.println(line);
}

また、 LogonExpert を使用してAutoLogon を使用してみました

上記のツールは完全に機能しています。しかし、私の必要性は、必要なときにJavaのみを使用してログインすることです。

みんな助けてください...

4

3 に答える 3

5

あなたがやりたいことは実現可能ですが、Java を含まないルールに従わなければなりません。ここでは、ちょっとした歴史、現在の試みがうまくいかない理由、およびそれを修正する方法について説明します。

簡単ではありません。

ちょっとした歴史

まず、Windows Vista 以降、Windows が資格情報を取得する方法が根本的に変更されました。あなたが言及したlogon.exeユーティリティは古いアーキテクチャを使用しています。当時は、ログオン アーキテクチャをいじることはすべて Winlogon のプロセスで DLL として実行されていたため、ほぼ何でも好きなことを行うことができました。私が書いたこのようなカスタム GINA をすでにいくつか見つけているかもしれません。最近のバージョンの Windows では無視されます。

現在、Winlogon は LogonUI に資格情報の取得を要求します。LogonUI は、資格情報プロバイダーをホストするプロセスです。資格情報プロバイダーは、ログオン画面の「タイル」で表されます。LogonUI が資格情報を要求するように実装する COM インターフェイスがいくつかあります。

覚えておくべき重要事項は次のとおりです。

  1. ログオン プロセスと対話するには、COM インターフェイスを実装する必要があります。
  2. 表示する UI を決定するか、UI をまったく表示しないかを決定できます

COM インターフェイスを実装すると、Java はほぼ除外されます。

あなたが今直面している問題

ユーザーがログインするということは、そのユーザーのセキュリティ トークンを取得することを意味します。ただし、対話的にユーザーをログに記録するということは、Winlogon にドアを開けるように指示する必要があることを意味します。Winlogon がリッスンする唯一のプロセスは、LogonUI です。

つまり、セキュリティ トークンを作成できるコードがあったとしても、それを使用してデスクトップのロックを解除することはできません。

ちなみに、セキュリティ トークンを作成するための Windows API はLogonUserです。

修正方法

資格情報プロバイダーを作成する必要があります。Java でそれを行う方法については聞いたことがありません。これはプラットフォーム固有であり、移植性がありません。ドキュメンテーションはすべて C++ 用ですが、.Net でもできると聞きました。出発点として、プラットフォーム SDK の Credential Providers サンプルを使用することをお勧めします。

資格情報プロバイダーが初期化されると、Bluetooth デバイスが表示されるなど、何らかのイベントを待機するスレッドが生成されます。CP と通信できる限り、サービスの実行は機能します。

の実装で、LogonUI のイベント メカニズムへのポインタを保存する必要もありますICredentialProvider::Advise

ハードウェア検出スレッドが Bluetooth デバイスを検出したら、 を呼び出しますICredentialProviderEvents::CredentialsChanged。LogonUI に、すべての資格情報プロバイダーを再度調べるように指示します。呼び出されたら、自分がデフォルトの自動ログオン プロバイダであることを答える必要があります。

ふぅ!まだログオンしていません。

ICredentialProviderCredential::GetSerialization最後の手順は、そのユーザー用に保存したパスワードを取得し、が呼び出されたときに LogonUI に送信することです。

そこから LogonUI が取得します。Winlogon に認証パッケージを呼び出してユーザーをログインするように指示します。

This SO answerは同じことを言っていますが、少し簡潔です。このMSDM の記事は、私の回答よりも古いものです。


+ユーザーのパスワードの暗号化と管理は演習として残されています ;) しかし、 Data Protection APIを見てみたいと思うかもしれません。

于 2015-03-11T19:13:15.147 に答える
1

既存の自動ログオン機能を使用することもできます。

管理者としてログインし、これを実行 (WIN-R) します。

ユーザーパスワードを制御する2

[ユーザーがこのコンピューターを使用するには、ユーザー名とパスワードを入力する必要があります] のチェックを外します。

お使いの PC は引き続きリモート アクセスから保護されます。

于 2015-03-11T12:05:28.173 に答える
1

ixe013 の回答が対話型ログオンを実現するためのネイティブな方法を説明したので (このSO Q&Aも確認してください)、私は、あなたのフィードバックに基づいて既に正常に機能している logonExpert ツール、Borland Delphi で作成されたツール (PEiD で確認済み) を研究するのに時間がかかりました。

le.exe cmd ツールに気付いたかどうかはわかりませんが、これにより、logon.exe と同様の方法でオンデマンドで呼び出すことができます。(ヘルプ chm ファイルを読むと見つかります)。

私の答えは貴重な技術的ハイライトを追加していませんが、cmdツールオプションを見逃している可能性があると思いました。

免責事項: 私は logonexpert とはまったく関係がありません。

編集: MS SysinternalsSuite には、cmd (自動ログオン ユーザー ドメイン パスワード) から呼び出すことができる自動ログオン ツールが含まれていることがわかりました。

于 2015-03-11T19:57:33.200 に答える