ドメインユーザのプロパティ画面の「アカウント」タブで設定できる項目に対応する属性を調べてみました。
※クリックすると新しいウィンドウで拡大図が表示されます。
ログオン時間
ログオン先
項目 | 属性 |
ユーザー ログオン名 | userPrincipalName |
ユーザー ログオン名(Windows 2000 以前) | sAMAccountName |
ログオン時間 | logonHours |
ログオン先 | userWorkstations |
アカウント オプション | userAccountControl |
アカウントの期限 | accountExpires |
ユーザー ログオン名の属性「userPrincipalName」はユーザー ログオン名のテキストボックスとコンボボックスの値を連結した値で、メールアドレスと同じ形式になります。
この名前(UPN)でログオンすることもできます。その場合、ログオン名にドメイン名が含まれるので、ログオン先のドメインを選択するコンボボックスは無効になります。
ログオン時間の属性「logonHours」の値は日曜日~土曜日までを1時間区切りで、1時間1ビットでログオンできるかどうかを(24×7=168ビット=)21バイトで表してるようです。
日本時間が+9時間だからか日曜9:00始まりのようで、日曜9:00からの24時間分が頭3バイトのようです。
日曜9:00からの24時間だけをログオン拒否にした状態だと次のようになりました。(BitConverter.ToString メソッドの結果)
00-00-00-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF
ログオン許可の時間を変えてやってみました。
09:00~10:00 01-00-00-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF 01=00000001
09:00~11:00 03-00-00-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF 03=00000011
09:00~12:00 07-00-00-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF 07=00000111
09:00~13:00 0F-00-00-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF 0F=00001111
09:00~14:00 1F-00-00-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF 1F=00011111
09:00~15:00 3F-00-00-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF 3F=00111111
09:00~16:00 7F-00-00-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF 7F=01111111
09:00~17:00 FF-00-00-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF FF=11111111
09:00~18:00 FF-01-00-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF
09:00~02:00 FF-FF-01-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF
10:00~18:00 FE-01-00-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF FE=11111110
11:00~18:00 FC-01-00-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF FC=11111100
どうやら先頭の1バイトが日曜9:00~17:00までの8時間を表していて、1ビット目が9:00~10:00の1時間、2ビット目が10:00~11:00の1時間を表しているようです。
アカウントのロック解除とアカウント オプションの各チェックボックスの値は、属性「userAccountControl」の値に各チェックボックスの項目を表す値(ADS_USER_FLAG 列挙体の値)の論理積で求めます。
項目 | ADS_USER_FLAG 列挙値 | IADsUser プロパティ |
アカウントがロックされているかどうか | ADS_UF_LOCKOUT | IsAccountLocked |
ユーザーは次回ログオン時にパスワードの変更が必要 | - | - |
ユーザーはパスワードを変更できない | ADS_UF_PASSWD_CANT_CHANGE | - |
パスワードを無期限にする | ADS_UF_DONT_EXPIRE_PASSWD | - |
暗号化を元に戻せる状態でパスワードを保存する | ADS_UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED | - |
アカウントは無効 | ADS_UF_ACCOUNTDISABLE | AccountDisabled |
対話型ログオンにはスマート カードが必要 | ADS_UF_SMARTCARD_REQUIRED | - |
アカウントは重要なので委任できない | ADS_UF_NOT_DELEGATED | - |
このアカウントに DES 暗号化を使う | ADS_UF_USE_DES_KEY_ONLY | - |
Kerberos 事前認証を必要としない | ADS_UF_DONT_REQUIRE_PREAUTH | - |
「ユーザーは次回ログオン時にパスワードの変更が必要」については、属性「pwdLastSet」の値を LargeInteger 型または IADsLargeInteger 型にキャストして、その値が 0(HighPart プロパティと LowPart プロパティの値がどっちも 0)かどうかで判断します。
つまりこのチェックボックスの Checked プロパティの値 = 属性「pwdLastSet」の値が 0 かどうか ということになります。
チェックを入れたい場合は属性「pwdLastSet」の値に 0 をセットします。チェックをはずしたい場合は -1 をセットします。
ちなみに変更を保存するには DirectoryEntry.CommitChanges メソッドか IADs.SetInfo メソッドを呼び出します。
「ユーザーはパスワードを変更できない」については取得できないようです。取得するにはなんか色々やらないといけないみたいなので、判ったらその時また書きます。
IADsUser のプロパティがある項目はこっちを使う方が楽かなぁと思います。