問題タブ [local-security-authority]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows - ユーザーアカウントがWindowsの特定のグループのメンバーであるかどうかをプログラムで把握するにはどうすればよいですか?
グループ名とユーザーアカウントを指定して、指定されたユーザーが特定のグループに属しているかどうかを知りたいです。ユーザーはローカルユーザーまたはドメインユーザーであり、グループはローカルグループまたはドメイングループであり、グループは他のグループ内にネストすることもできます。要するに、私はbool IsUserMemberOf(User, Group)
検索を行うために適切なWin32APIを内部的に呼び出すような関数を探しています。上記のクエリを実行するプロセスには、ローカルグループとADグループをクエリするために必要な権限が必要だと思います。エンタープライズ管理者アカウントでプロセスを実行すると、フォレスト内のDCにクエリを実行する必要がありますが、ドメインの一部ではないマシンでは機能しない可能性があります。ADだけでなくLSAにもクエリを実行できるように、このクエリプロセスを実行する必要があるアカウントに関するアイデアはありますか?
c++ - LSAセッションがWindowsXPでアクティブであるかどうかを判断する方法
現在マシンにログインしているユーザーのリストを取得しようとしています。
Windows 7では、LsaEnumerateLogonSessionsを呼び出してから、WTSConnectStateを使用してWTSQuerySessionInformationを呼び出すことができます。
しかし、XPでは、各LSAセッションのTSセッションフィールドは0であり(リモートデスクトップセッションでない限り)、常にWTSActiveのWTSConnectStateがあり、マシンから既にログアウトしているすべてのユーザーを一覧表示することになります。セッションがリモートデスクトップセッションの場合、WTSQuerySessionInformationは失敗します。
c# - LsaQueryInformationPolicy() を呼び出すと Access Denied エラーが発生します。私は管理者です。
LsaQueryInformationPolicy()
ローカル ホストで試しても、ドメイン内の他のマシンで試しても、このエラーが返されます。私が使用するフラグはありますLsaOpenPolicy()
が、成功しませんでしたPOLICY_LOOKUP_NAMES | POLICY_VIEW_LOCAL_INFORMATION
。POLICY_LOOKUP_NAMES | POLICY_VIEW_LOCAL_INFORMATION | READ_CONTROL
私がログインしているユーザーは、私のマシンと他のすべてのマシンのローカル管理者です。
の 2 番目のパラメーターには、LsaQueryInformationPolicy()
を使用しますPolicyAuditEventsInformation
。
LsaEnumerateAccountRights()
同じポリシー ハンドルを使用して、同じホストに対して正常に使用できます。
c++ - カスタム Windows 認証パッケージの実装
Windows 7 用の MSV1_0 のカスタム認証サブパッケージを作成しています。Windows SDK の msvsubauth サンプルを使用しましたが、直面しているいくつかの問題に関して 2 つの質問があります。
ルーチンが呼び出され、レジストリの Auth0 プロパティがパッケージに設定され、ファイルを作成する Msv1_0SubAuthenticationRoutine の最後に簡単なコードが追加されていることを確認しようとしている場合:
パスワードを入力すると、Windowsから「パラメーターが正しくありません」というエラーメッセージが表示されるため、パッケージが呼び出されるようです。これは良い兆候です。しかし、なぜそのエラーが発生するのですか? 別の .exe ファイルからまったく同じコードを実行すると、完全に実行され、テスト テキスト ファイルが作成されます。権限を確認し、「全員」に「フル コントロール」を設定しました。何か案は?SDK は、LSA が認証パッケージ内のコードに対して作成している分離の種類について正確に言及していません。
2 番目の問題は、AP のテストです。現在、すべての変更でライブラリを再構築し、それをテスト VM にコピーしてから、System32 フォルダーにコピーして再起動します。それを行う簡単な方法はありますか?
少し早いですがお礼を!
winapi - WIN32-最後にログインしたユーザー
システムにログインするための最後のユーザー名を確実に決定する方法はありますか?LsaEnumerateLogonSessions()とLsaGetLogonSessionData()を見てきましたが、Vista以降では昇格が必要です(これは避けたいと思っています)。WMIにも同じ問題があります(おそらく、舞台裏でLsaを呼び出しているだけです)。
HKLMの「SOFTWARE\Microsoft \ Windows \ CurrentVersion \ Authentication \ LogonUI \ LastLoggedOnUser」も確認しましたが、テストでは信頼性が低く、更新されません。
私は実際には、ユーザーの高速切り替えやTSログオンではなく、コンソールログオンにのみ興味があります。
私はさまざまな記事を読みましたが、まだ良い解決策を思い付いていません。
c++ - OpenTokenByLogonId関数を呼び出す方法は?
私は本当にOpenTokenByLogonId()関数を呼び出す方法を見つけようとしていますが、かなり行き詰まっています。さらに、私はそれの例をどこにも見つけることができません!
MSDNから、OpenTokenByLoginID()へのポインターは、SpInitialize()関数から受け取ったLSA_SECPKG_FUNCTION_TABLE関数テーブルにあります。
私がやりたいことに応じて、いくつかのDLLに実装されたSpLsaModeInitialize()関数から受け取ったSpInitialize()関数へのポインター。
そこで、windows \ system32 \でSpLsaModeInitialize()エクスポートを探したところ、いくつかのDLLが見つかりました。それらの中から、Kerberos.dllを使用することを選択しました。名前だけで他のDLLよりもこのDLLを選択したと言わなければなりません-違いが何であるかはよくわかりません(これらは認証方法が異なると思いますが、よくわかりません)。
だから、私はSpLsaModeInitialize()へのポインタを手に入れました:
関数を呼び出しました:
これで、pck_tbl->Initializeを使用してSpInitializeを呼び出すことができます。
しかし(そしてここに問題があります)私は関数のパラメーターへの道を見つけることができません!
SECPKG_PARAMETERSはもちろんのこと、packageIDを見つけるにはどうすればよいですか?私はいたるところを見てきましたが、何かが欠けているか見落としていると思います...
ご協力いただきありがとうございます!!!
windows - 対話型ログオンのために LsaLogonUser を正しく呼び出すにはどうすればよいですか?
LsaLogonUser を使用して対話型ログオン セッションを作成しようとしていますが、常にSTATUS_INVALID_INFO_CLASS
(0xc0000003) が返されます。私がオンラインで検索して見つけたものから、KERB_INTERACTIVE_LOGON
構造のメモリ レイアウトは扱いにくいですが、私はそれを正しく行ったと確信しています。
MSV1_0_INTERACTIVE_LOGON
また、認証構造とパッケージ名として、 Kerberos の代わりに MSV1.0 を使用しようとしましたが、 (0xc00000a7)MSV1_0_PACKAGE_NAME
で失敗します。STATUS_BAD_VALIDATION_CLASS
ここで私が間違っていることを誰かに教えてもらえますか? エラー処理のほとんどを削除したコードを次に示します。明らかに、これは製品品質ではありません。私はちょうど実用的なサンプルを取得しようとしています。
c++ - std::wstringをLSA_UNICODE_STRINGに変換するにはどうすればよいですか
今日、私はユーザーに「サービスとしてログオン」特権を付与する単純なC++プログラムを作成することができました。LPCWSTR
これの一部には、aと。の間の変換が含まれていましたLSA_UNICODE_STRING
。そのためのコードは次のとおりです。
この関数で小さなエラーが発生したとき、の呼び出しLsaLookupNames2()
はコード87(hex 0x57)「パラメーターが正しくありません」で失敗しました。を使用するC++アプリでこの呼び出しを行おうとしていますstd::wstring
が、失敗します。私の現在の機能は次のとおりです。
私は何が間違っているのですか?
windows - ユーザーのフィルタリングされたトークンでスレッドになりすます
私は一種のカスタム企業セットアップであるアプリを書いています。このアプリは多くのタスクを実行しますが、その中には昇格が必要なものもあります。
アプリの起動時に UAC がユーザーに昇格を要求するように、マニフェストを含めました。
WNetAddConnection
これらのタスクの 1 つは、一部のネットワーク ドライブ ( ) をリモート サーバーにマッピングすることです。これらのマッピングは永続的である必要があります。これまでのところ、アプリを閉じると、アプリがマップしたばかりのドライブがユーザーに表示されないことを除いて、問題はありません。
いくつかの調査 ( https://serverfault.com/a/185885/147818 ) の後、ユーザーがログインすると、セッションが 2 つのトークンを受け取ることを理解しました。昇格が必要なときにプロセスを実行します。
私の質問: アプリのタスクが終了したときに、ユーザーがエクスプローラーでネットワーク ドライブを確認できるように、現在のユーザーがフィルター処理されたトークンを取得するスレッドをアプリが起動する可能性はありますか?
このトークンでスレッドになりすますことは可能ですか?
私はこれらの可能な回避策を認識しています:
- 昇格を必要とする特定のタスクのみが COM オブジェクトにカプセル化されるように、アプリを再設計します。
- 設定を使用してレジストリを微調整します
EnableLinkedConnections
(ユーザーのセッションの再起動が必要です)
しかし、いくつかの理由により、これらのソリューションはどれもオプションではありません。
どんな助けでも大歓迎です
c++ - C++ を使用してローカル セキュリティ ポリシーで監査オブジェクト アクセスを設定できない
次のコードを使用して、ローカル セキュリティ ポリシーで成功、失敗の監査オブジェクト アクセスを有効にしています。
上記のコードは、スタンドアロンのexeを作成してテストすると完全に機能します。しかし、上記のコードをメイン プロジェクトに統合するとすぐに、ppPAUDInfo->MaximumAuditEventCount
9 になるはずの 6 桁のカウントが表示されます。アクセスしようとすると、メイン プロジェクトのプロセスが終了しますppPAUDInfo->EventAuditingOptions[index]
。