2025-11-28 00:35:46 +09:00

113 lines
2.7 KiB
C++

// Create.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stdio.h"
#include "activeds.h"
HRESULT CreateUserIADsContainer(void)
{
HRESULT hr;
IADsContainer *pCont = NULL;
IDispatch *pDisp=NULL;
IADsUser *pIADsUser=NULL;
///////////////////////////////////////////////////
// Create a user using IADsContainer::Create
////////////////////////////////////////////////////
hr = ADsGetObject( L"WinNT://seyitb-dev", IID_IADsContainer, (void**) &pCont );
if (FAILED(hr) )
return hr;
hr = pCont->Create(L"user", L"AliceW", &pDisp );
pCont->Release();
if(FAILED(hr) )
return hr;
hr = pDisp->QueryInterface( IID_IADsUser, (void**) &pIADsUser );
if (FAILED(hr))
return hr;
//do NOT hard code your password into the source code in production code
//take user input instead
pIADsUser->SetPassword(L"MysEcret1");
hr = pIADsUser->SetInfo(); // Commit
if(SUCCEEDED(hr))
wprintf(L"User created successfully\n");
pIADsUser->Release();
return hr;
}
HRESULT CreateUserIDirectoryObject(void)
{
///////////////////////////////////////////////////////////
// Use IDirectoryObject to create an object
////////////////////////////////////////////////////////////
HRESULT hr;
IDispatch *pDisp=NULL;
IDirectoryObject *pDirObject=NULL;
ADSVALUE sAMValue;
ADSVALUE uPNValue;
ADSVALUE classValue;
ADS_ATTR_INFO attrInfo[] =
{
{ L"objectClass", ADS_ATTR_UPDATE,
ADSTYPE_CASE_IGNORE_STRING, &classValue, 1 },
{L"sAMAccountName", ADS_ATTR_UPDATE,
ADSTYPE_CASE_IGNORE_STRING, &sAMValue, 1},
{L"userPrincipalName", ADS_ATTR_UPDATE,
ADSTYPE_CASE_IGNORE_STRING, &uPNValue, 1},
};
DWORD dwAttrs = sizeof(attrInfo)/sizeof(ADS_ATTR_INFO);
classValue.dwType = ADSTYPE_CASE_IGNORE_STRING;
classValue.CaseIgnoreString = L"user";
sAMValue.dwType=ADSTYPE_CASE_IGNORE_STRING;
sAMValue.CaseIgnoreString = L"mikes";
uPNValue.dwType=ADSTYPE_CASE_IGNORE_STRING;
uPNValue.CaseIgnoreString = L"mikes@fabrikam.com";
// Create this user in an organizational unit
hr = ADsGetObject(L"LDAP://OU=MyOU,DC=fabrikam,DC=com",
IID_IDirectoryObject, (void**) &pDirObject );
if ( SUCCEEDED(hr) )
{
hr = pDirObject->CreateDSObject( L"CN=Mike Smith", attrInfo,
dwAttrs, &pDisp );
if ( SUCCEEDED(hr) )
{
pDisp->Release();
}
pDirObject->Release();
}
return hr;
}
int main(int argc, char* argv[])
{
HRESULT hr;
CoInitialize(NULL);
// Create a local user account
hr = CreateUserIADsContainer();
wprintf(L"Result: 0x%x\n", hr);
// Create a domain user account in Active Directory
// hr = CreateUserIDirectoryObject();
// wprintf(L"Result: 0x%x\n", hr);
CoUninitialize();
return 0;
}