113 lines
2.7 KiB
C++
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;
|
|
}
|