1

ActiveDirectoryを管理するためのWebサイトに取り組んでいます。ユーザーがパスワードを変更する権限を持っているかどうかを確認したい。したがって、「ntSecurityDescriptor」プロパティ値を見つけてから、それをIADsSecurityDescriptorにキャストする必要があります。

DirectorySearcherクラスを使用する場合、プロパティ値はSystem._ComObject型であり、IADsSecurityDescriptorに簡単にキャストできます。しかし、LdapConnectionとSearchResponseを使用すると、タイプのプロパティ値を取得します。

byte[] array which is unale to cast to IADsSecityDescriptor.

エラーが発生します

Unable to cast System.Byte[] to IADsSecurityDescriptor

SearchResponseに問題がありますか、それともこれを達成するために何らかのキャスト手法を使用しましたか?DirectoryEntryクラスを使用するのに問題があるため、LdapConnctionクラスしか使用できません。

4

2 に答える 2

1

ついに私の質問の答えを見つけました。このクラスは、byte[]を有効なセキュリティ記述子comobjectに変換します。

ActiveDs.ADsSecurityUtility secUtility = new ActiveDs.ADsSecurityUtility();
ActiveDs.IADsSecurityDescriptor sd = (IADsSecurityDescriptor)secUtility.ConvertSecurityDescriptor((byte[])attribute[0], (int)ADS_SD_FORMAT_ENUM.ADS_SD_FORMAT_RAW, (int)ADS_SD_FORMAT_ENUM.ADS_SD_FORMAT_IID);
于 2012-11-24T06:38:43.017 に答える
0

DirectoryEntryメソッドを使用するように努力する必要があると思います。LdapConnectionを使用してADオブジェクトを操作しようとすると非常に困難になります

Ldapの方法を続行したい場合は、簡単に検索した後、ネイティブ(この単語はすべてを意味します)の自動化機能を試してみます。そこには、次のような興味深いものがあるようです。

ConvertStringSecurityDescriptorToSecurityDescriptor

http://msdn.microsoft.com/en-us/library/windows/desktop/aa376401%28v=vs.85%29.aspx

 C# syntax

[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("Advapi32.dll", CharSet=CharSet.Unicode, SetLastError=true)]
internal static extern bool ConvertStringSecurityDescriptorToSecurityDescriptor(string StringSecurityDescriptor, uint StringSDRevision, ref IntPtr SecurityDescriptor, IntPtr SecurityDescriptorSize);
于 2012-11-20T09:34:48.140 に答える