2017-11-02 17 views
0

私はSID値のコレクションを持っており、それらが特定のグループに含まれているかどうかを表示する必要があります。私がトークンハンドルを持っていれば、私はCheckTokenMembershipでそれを行うことができます。 WindowsのSIDからトークンハンドルを取得するにはどうすればよいですか?特定のグループのメンバーシップのSIDのコレクションを確認してください

+1

'LookupAccountSid'を介して* SID *をユーザ名に変換し、' NetUserGetGroups'または 'NetUserGetLocalGroups'を呼び出す必要があります – RbMm

答えて

1
  1. 使用LookupAccountSidは、このアカウントがメンバーであるすべてのグループを取得するためにSID
  2. 使用NetUserGetGroupsのアカウントを取得します。
    EDIT注意事項eryksun:ターゲットグループのSIDを最初に確認してください。それがSidTypeGroupの場合は、NetUserGetGroupsを呼び出します。 SidTypeAliasの場合は、NetUserGetLocalGroups(別名「BUILTIN \ Administrators」などの別名)を呼び出します。
  3. LookupAccountNameを使用して、グループのSIDを取得します。
  4. アカウントSID(手順1)がSIDコレクションのメンバであるかどうかを確認します(手順3)。 EqualSid機能を使用してください。

適切な古いコードは古いwin32.mvps.orgページです。残念ながら、そのページはなくなってしまった。しかし、ウェイバックマシンは助けます。ここに古いへのリンクfksec samples

あなたは使いやすいsidクラスがあります。また、sid::MemberOfおよびsid::Membersの機能を提供します。コードは私のスタイルではありませんが、動作します。

+1

2番目のステップは、先にターゲットグループのSIDとタイプを取得する必要があります。 'SidTypeGroup'の場合は' NetUserGetGroups'を呼び出します。 'SidTypeAlias'の場合は、' NetUserGetLocalGroups'( "BUILTIN \ Administrators"のような別名)を呼び出します。次に、各グループのSIDを取得し、それをターゲットグループSIDと比較します。 – eryksun

+0

あなたは正しいです!私の答えを変更しました。コメントありがとう! – xMRi

関連する問題