IADsUserのPutEx関数を使って
ms-DS-User-Account-Control-Computedプロパティに
0x800000をセットしたいのですが
手順がわかりません。
教えて下さい。
Visual C++6.0です。
直接的な回答ではありません・・・
検索した結果
http://support.microsoft.com/kb/305144/ja
http://www.biz.kotaete-net.net/Default.aspx?pgid=14&qid=120486436869
http://en.csharp-online.net/User_Management_with_Active_Directory%E2%80%94Writing_User_Account_Properties
http://msdn.microsoft.com/en-us/library/ms677840(vs.85).aspx
http://codeidol.com/active-directory/actdir3/Users-and-Groups/Creating-a-Full-Featured-User-Account/
http://www.eggheadcafe.com/forumarchives/adsigeneral/Feb2006/post25780967.asp
この辺の記載されている内容からコーディングできないでしょうか。
参考まで・・・
読んだのですが、具体的なコーディングがわからなくて
こまっています。
どのようにフラグをセットすればよいのでしょうか?
少し遠回りして紹介したもので・・・
知ってほしかったんですがね〜
因みに、Win2000までのドメイン管理の場合はuserAccountControl
で管理され、Win2003以降は、ms-DS-User-Account-Control-Computed
で管理されていると言うことは、解っておられますよね?
http://msdn.microsoft.com/en-us/library/aa746416.aspx
http://support.microsoft.com/kb/255042/ja
userAccountControlを使ったサンプルが上記URLのものです。
ms-DS-User-Account-Control-Computedに変更したらどうなりますか?
※ 検索したらいくらでもヒットするんですが・・・
以上。
0x80000 って、UF_PASSWORD_EXPIRED ですか?
つまり、ユーザーのパスワードの有効期限が切れている状態にしたいということ?
ms-DS-User-Account-Control-Computed には、いくつかの永続化されない値が含まれる、と書いてありますね。
これは、他のデータを元にその都度計算されて生成されるフラグということでしょう。だから「Computed」。
なので、このフラグを直接設定するのではなく、他の設定によってパスワードの有効期限が切れている状態にすれば、取得する際にはこのフラグが取得できるのではないか、と思います。
具体的な方法の確かなところはわかりませんが…
例えば ms-DS-User-Password-Expired を True にしてみるとか。
ひょっとすると他にも、ms-DS-User-Password-Not-Required を Flase にするとか、ms-DS-User-Dont-Expire-Password を False にするとかが必要かもしれませんが。
んー…俺デマ言ったかな。
User-Account-Control って書き換えられるんですね。
http://msdn.microsoft.com/en-us/library/ms680832.aspx
に、
> Update Privilege:This value is set by the system.
ってあるから、読み取り専用なのかと思ったんだけど、書き換えてるサンプルが結構ありますね。
> 因みに、Win2000までのドメイン管理の場合はuserAccountControl
> で管理され、Win2003以降は、ms-DS-User-Account-Control-Computed
> で管理されていると言うことは、解っておられますよね?
正反対のことが書いてあるページもありますね。
> In a Windows Server 2003-based domain, LOCK_OUT and PASSWORD_EXPIRED have been replaced with a new attribute called ms-DS-User-Account-Control-Computed. For more information about this new attribute
http://support.microsoft.com/kb/305144/en-us
どっちが正しいのやら?
スイマセン。こちらの記入もれがあり、誤解させてしまいました。
Windows2003SP2環境で、Put("userAccountControl"〜)でセットすると
アカウントの有効化のみで
Put("userAccountControl"〜)でセットすると
アカウントも無効であるし、ほかのパスワードオプションの
チェックも付かない状態になります。
また本当にセットしたいのは、アカウントの有効化と
次回ログイン時にパスワード変更をセットしたいというのが
目標です。
やっぱり、PutExなのでしょうか?
いや・・・だから、Win2003 では、userAccountControlを
使わないんですが・・・
それに言語は違いますが、先のURL中のコードにそのもの
の設定コードありますが・・・
因みに、アカウントの有効化をしたいと言うことですが、で
はその以前に何故無効化状態なんですか?
アカウントのロックアウトで無効化されてしまっているのか
初期登録時に無効化で登録した?
アカウントロックアウトを戻す方法もURL中のコードにあ
りますが・・・
東方、2003 Server稼働していないので、未確認ですがWin2000
までは行っていたので、できると思いますが。
以上。
> Put("userAccountControl"〜)でセットすると
> Put("userAccountControl"〜)でセットすると
うん? どっちか書き間違えた?
現在の状態はアカウントが無効で、これをアカウント有効&次回ログイン時にパスワード変更必須、にしたいということでしょうか?
GUI から変更できるのなら、GUI から現在の状態と目的の状態にセットして、それぞれで Get してみるとか?
アカウントの有効/無効は UF_ACCOUNTDISABLE か UF_LOCKOUT ですかね。
UF_ACCOUNTDISABLE は IADsUser::AccountDisabled でもできそう。
> やっぱり、PutExなのでしょうか?
やってみたことないから確かなことはわからないけど、単純なビットフラグなので、Put でできないことはないと思うけどなぁ。
> 正反対のことが書いてあるページもありますね。
ごめん、正反対じゃなくて同じことだった。
あれぇ? どこかに反対のことが書いてあったような気が…
まぁいいや。
俺は手を引いた方が良さそうですかね。
邪魔しても悪いので、しばらく成り行きを見守ります。
>現在の状態はアカウントが無効で、これをアカウント有効&次回ログイン時にパスワード変更必須、にしたいということでしょうか?
→まさにコレがしたいのです。
まちがえてましたスイマセン。
>スイマセン。こちらの記入もれがあり、誤解させてしまいました。
>Windows2003SP2環境で、Put("userAccountControl"〜)でセットすると
>アカウントの有効化のみで
>Put("ms-DS-User-Account-Control-Computed"〜)でセットすると
>アカウントも無効であるし、ほかのパスワードオプションの
>チェックも付かない状態になります
Windows2003SP2環境で,"userAccountControl"が効いていることと
Put("ms-DS-User-Account-Control-Computed"〜)であると
設定フラグがセットできていなくて困っています。
どちらもPUT後のHRESULTは正常値をもどしています。
もう少し、リンクを読んで挑戦してみますっ!
ツイート | ![]() |