ADSI LDAP プロバイダーでのユーザー作成
ADSI LDAP プロバイダーで作成できるのは、グローバル ユーザー アカウントのみです。 ローカル アカウントは、SAM データベースにあり、WinNT プロバイダーを使用して作成する必要があります。 WinNT プロバイダーでのユーザー オブジェクトの作成についての詳細は、「WinNT ユーザー オブジェクト」を参照してください。
ユーザー オブジェクトの作成
ユーザー オブジェクトがあるコンテナーにバインドし、コンテナーの IADsContainer または IDirectoryObject インターフェイスを取得します。
ユーザー オブジェクトを作成するには、IADsContainer.Create メソッドまたは IDirectoryObject::CreateDSObject メソッドを使用します。
ユーザー オブジェクトの作成に必要な最小属性は、使用されるディレクトリ サービスによって異なります。 Active Directory ユーザー作成の詳細については、「ユーザーの作成」を参照してください。
IADsContainer インターフェイスを使用する場合、IADs.SetInfo メソッドが呼び出されるまで、新しいオブジェクトは実際には作成されません。
IDirectoryObject インターフェイスを使用すると、CreateDSObject メソッドが呼び出されたときに新しいオブジェクトが作成されます。 objectClass を含む最小属性は、CreateDSObject メソッドに渡される ADS_ATTR_INFO 配列で指定する必要があります。
例 1
次のコード例では、既定の属性を持つユーザー アカウントを作成します。
Dim ou As IADs
Dim usr as IADsUser
On Error GoTo Cleanup
Set ou = GetObject("LDAP://OU=Finance,DC=Fabrikam,DC=COM")
Set usr = ou.Create("user", "cn=Jeff Smith")
usr.Put "samAccountName", "jeffsmith"
usr.SetInfo
Cleanup:
If (Err.Number <> 0) Then
MsgBox ("An error has occurred. " & Err.Number)
End If
Set ou = Nothing
Set usr = Nothing
例 2
次のコード例では、既定の属性を持つユーザー アカウントを作成します。 簡潔にするため、エラーチェックは省略しています。
#include <activeds.h>
int main()
{
HRESULT hr = CoInitialize(NULL);
IADsContainer *pCont;
IADsUser *pUser;
LPWSTR adsPath = L"LDAP://serv1/CN=Users,dc=Fabrikam,dc=com";
LPWSTR usrPass = NULL;
LPWSTR usrName = NULL;
// Add code to securely get the user name and password or leave
// as NULL to use the current security context.
hr = ADsOpenObject(adsPath,
usrName,
usrPass,
ADS_SECURE_AUTHENTICATION,
IID_IADsContainer,
(void**)&pCont);
IDispatch *pDisp;
hr = pCont->Create(CComBSTR("user"), CComBSTR("cn=Jeff Smith"), &pDisp);
pCont->Release();
hr = pDisp->QueryInterface(IID_IADsUser,(void**)&pUser);
pDisp->Release();
VARIANT var;
VariantInit(&var);
V_BSTR(&var) = L"jeffsmith";
V_VT(&var)=VT_BSTR;
hr = pUser->Put(CComBSTR("samAccountName"), var);
hr = pUser->SetInfo();
VariantClear(&var);
pUser->Release();
CoUninitialize();
return 0;
}