4

この質問をしたユーザーがやろうとしていることと同様のことをしようとしています:

資格情報プロバイダー DLL からの HTTPS 要求

ユーザー プロファイルのコンポーネントに関しては、これを見つけまし

  • Windows が認識して読み込む最小プロファイルは何ですか?
  • プロファイルを作成して Windows に登録するにはどうすればよいですか?

私のターゲットは Windows 7 (Professional または Enterprise) です。私はどちらかというと Linux 派なので、Windows でのプログラミングに関しては無知なので、お手柔らかにお願いします。

PS Linux で開発を開始し、VM を使用せずに Windows でテストする方法はありますか?

これが私がやろうとしていることです

ラップトップをどこにでも持っていく必要がないように、頻繁に移動する人々が使用するプロファイル同期プログラムを作成しています。この質問は、ユーザーが新しいコンピューターにログインする場合に対処します。可能なアプリケーションは次のとおりです。

  • 頻繁にオフィス間を移動するビジネスマン
  • 毎日異なるコンピューターを使用する学生
  • 外国のネットカフェ利用者
  • 新しいコンピュータを入手したときにファイルをコピーするのが嫌いなホーム ユーザー

可能な限り最高のユーザー エクスペリエンスを提供したいと考えています。これは、ほぼ瞬時にプロファイルを作成できることを意味します。ローミング プロファイルは遅く、せいぜいバグがあります。Windowsにプロファイルを作成させることは、実際にはオプションではありません。カスタム認証を行う必要があり(これを理解しました)、サーバーから設定をコピーする必要があるためです。

私が必要としているのは、次の方法です。

  • ユーザーのログオン時に最低限必要なものだけを作成する
  • プロファイルが更新されている場合は、クラウドから設定を更新します
  • ユーザーがログオン画面から 30 秒以内に作業できるようにする (できればもっと速く)

これは私がやろうと思っていることです:

  • サーバーでユーザーを認証する
  • Windows サービスに連絡してプロファイルの作成/更新を処理する
  • Windows サービスは、プロファイルの作成中にベア設定をダウンロードします
  • 設定が適用されます
  • ユーザーがログインしています
4

2 に答える 2

7

まず最初に、ユーザー プロファイルに関するこちらをお読みになることをお勧めします。

ユーザー プロファイルの主な考え方は単純で、Windows NT の最初のバージョン (Windows NT 3.1 のことです) から変わっていません。ユーザー プロファイルは、ローカル コンピュータに存在するディレクトリ構造から構成されています。ユーザー プロファイルの 1 つのファイル (いわゆるハイブ) は、レジストリの現在のユーザー部分を表します。ユーザーが自分のユーザー プロファイルにフル アクセスできることが重要です。アクセス権はファイルシステムだけでなく、レジストリ内にも保存されます。したがって、ユーザーのプロファイルを作成するには、事前にユーザー アカウントを作成する必要があります。これは、レジストリ キーのファイルのセキュリティ記述子の一部に、ユーザーの SID (セキュリティ識別子) が含まれている必要があるためです。

新しいユーザー プロファイルが作成される場合、ユーザー プロファイルの「プロトタイプ」がテンプレートとして使用されます。レジストリ キーDefaultの下の値として、レジストリで見つけることができるテンプレートへのパス。GetDefaultUserProfileDirectoryHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileListを使用して同じ情報を取得できます。

プロファイルを作成するには、ユーザー アカウントでログインしてログイン トークンを取得し (パラメータにフラグを指定したLogonUserを参照)、 LoadUserProfileを使用して、ローカル ユーザー プロファイルが存在しない場合にローカル ユーザー プロファイルを作成する必要があります。ユーザーが中央プロファイルまたはローミング プロファイルを持っている場合、入力PROFILEINFO構造体に入力して、サーバー上にあるユーザーのローミング プロファイル パスを指すようにする必要があります。パスを取得するには、 4 に等しいNetUserGetInfoを使用できます。この方法は非常に古く、たとえばここで説明されています。LOGON32_LOGON_INTERACTIVEdwLogonTypelpProfilePathdwLevel

[LogonUser] からのログイン トークンは、ユーザーのファイルとレジストリ キーへのユーザー許可を付与するために必要なユーザー SID を取得するためだけに実際に必要なため、Microsoft は、Vista から、CreateUserProfileExを置き換える別の簡素化された非常に実用的な API CreateProfileを導入しました (これはのみ存在します)。 Windows XP の場合)。

前に説明したことはすべて、まれな状況でのみ実際に必要になります。ほとんどの場合、Windows サービスのユーザー アカウントを使用する場合のみです。標準的な状況では、ユーザー プロファイルは、コンピューターへの最初の対話型ユーザー ログイン時に自動的に作成されます。

新しいソフトウェアのインストール後など、コンピューター上のすべてのユーザーに対して何らかの変更を加える必要がある場合、ユーザー プロファイルを作成せずにさまざまな方法でこれを行うことができます。

ユーザー プロファイルを作成する必要がある理由をより正確に説明していただければ、同じ目標をアーカイブする別の方法を提案できると思います。

于 2011-04-07T19:40:15.260 に答える
1

I asked a very similar question on ServerFault, and I really liked the answer I got there. To paraphrase, these are the steps:

  • Create Windows service to create profiles
  • Create a custom ICredentialsProvider and authenticate user
  • Call the profile-create service
  • Tell Windows to continue logging on

It seems there is no direct way to override it, but this seems quite clever, and quite possibly the only solution.

Since nobody has commented or left an answer, I'll change my question a little.

于 2011-04-06T09:04:19.527 に答える