これは2005年に投稿したエントリーで、以前のブログから引き継いだものです。
VBScriptでフォルダの参照権限を参照する。Vol.1
VBScriptでフォルダの参照権限を参照する。Vol.2
VBScriptで参照権限を変更するための残りの手順を解説です。基本的には今まで解説してきたことの延長にあるため、特に難しい部分はありません。プロパティへ代入する値さえ間違わなければ良いだけです。
例によって、参考文献はSubject:General Permission notes。
まずは、対象となるアカウントのSID参照から。
1. 対象アカウントのSIDを取得する。
例によってWMIを利用しますが、ここではクエリーを利用します。ユーザー・オブジェクトがコレクションになっているので注意です。
コードにすると、こんな感じ。ドメイン、test_domainに所属するユーザー、test_playerの場合です。
set myWMI = getObject("winmgmts:\\[domain controller]\root\cimv2") set myUsers = myWMI.execQuery("select * from win32_account where domain = 'test_domain' and name = 'test_player'") for each u in myUsers set myUser = u next msgbox myUser.sid
2. 新規Trusteeオブジェクトを作成し、適切なプロパティを設定する。
Trusteeオブジェクトは、win32_trusteeクラスからインスタンスを生成することによって作成します。こんな感じです。
set myTrusteeClass = myWMI.get("win32_trustee") set myTrustee = myTrusteeClass.spawnInstance_()
Trusteeオブジェクトに適切なプロパティを設定しなければなりませんが、文字列、バイナリーのSIDが必要です。先のmyUser.sidは文字列を返すだけなので、コレを利用してSIDオブジェクトを生成する必要が有ります。
set mySID = myWMI.get("win32_sid.sid = '" & myUser.sid & "'")
プロパティの設定は以下の通りです。
myTrustee.domain = mySID.ReferencedDomainName myTrustee.name = mySID.AccountName myTrustee.sid = mySID.BinaryRepresentation myTrustee.sidLength = mySID.sidLength myTrustee.sidString = mySID.sid
3. 新規ACEオブジェクトを作成し、適切なプロパティを設定する。
ACEオブジェクトもTrusteeオブジェクト同様、win32_aceオブジェクトからインスタンス生成して作成します。
set myAceClass = objWMI.get("win32_ace") set myAce = myAceClass.spawnInstance_()
次にプロパティ設定ですが、ここで参照権限として設定したい値を代入することになります。例えば、Full Control権限を割り当てる場合は、
myAce.AccessMask = 2032127 myAce.trustee = myTrustee myAce.AceType = 0 myAce.AceFlags = 3
です。
これらを設定してから、前エントリーの「4.ACEオブジェクトをDACLへ追加する。」を実行するわけです。かなり大変です。