Windows 2000 User Management--Active Directory Practical Example

  

In practical applications, if we want to do a server-to-terminal control software, we often need to manage users. Of course, NT, W2K provides a complete user management mode, but Sometimes we don't want to start user management from the management tools, which is very troublesome to manage. We often hope that we can manage NT, W2K users from our software, so that some users who are not very skilled in the operating system. It is very necessary. Recently, someone asked me to write a terminal management software for it. I didn’t feel it was necessary at first, but after he said it was necessary, he used PB. He said that it seems difficult to do it. So I had to write a DLL for him, with adding users, deleting users, changing passwords, adding users to groups, deleting from groups, getting user lists, etc. Because the length is too long, it is not convenient for readers to read, so Some functions have been omitted, please contact me if necessary. [email protected]

The following functions mainly use NT, W2K Active Directory services some component interfaces, such as IADsContainer container, IADs, IADsUser interface.

1. Delete a user (from this machine)

BOOL __stdcall DeleteUser(char *username)
{
HRESULT hr;
IADsContainer *pContainer=NULL;
_bstr_t bstr;
DWORD ll_len=255;
char lbBuffer[255];
::GetComputerName(lbBuffer,&ll_len);
bstr="WinNT://"+_bstr_t (lbBuffer)+","+_bstr_t("computer");
//Initialize apartment thread
hr=CoInitialize(NULL);
hr= ADsGetObject(bstr,IID_IADsContainer,(void **)& ;pContainer);
pContainer->Delete(L"user",_bstr_t(username));
pContainer->Release();

CoUninitialize();
return FALSE ;
}

2, add a user

BOOL __stdcall AddUser(char *username,char *fullname,char *description)
{
HRESULT hr;
> IADsContainer * pContainer = NULL;
IADs * pADs = NULL;
IDispatch * pDisp = NULL;

_bstr_t bstr;
DWORD ll_len = 255;
char lbBuffer [255] ;
:: GetComputerName (lbBuffer, & ll_len);

bstr = "WinNT: //" + _bstr_t (lbBuffer) + "," + _bstr_t ( "computer");

//Initialize apartment thread
hr=CoInitialize(NULL);
hr= ADsGetObject(bstr,IID_IADsContainer,(void **)&pContainer);
hr=pContainer->Create(L"user", _bstr_t (username), & pDisp);

pContainer- & gt; Release ();
if (SUCCEEDED (hr!)) {return hr;}

hr = pDisp- >QueryInterface(IID_IADs, (void**) &pADs );
pDisp->Release();
if ( !SUCCEEDED(hr) ) { return 0;}
VARIANT var; br> VariantInit (& var);
var.vt = VT_BSTR;
var.bstrVal = _bstr_t (fullname);

pADs- & gt; Put (L "FullName", var);
VariantClear (& var);

var.vt = VT_BSTR;
var.bstrVal = _bstr_t (description);

pADs- & gt; Put (L "Description" ,var);
VariantClear(&var);

hr=pADs->SetInfo();
hr=pADs->Release();

CoUninitialize();
return FALSE;
}

3. Set user password

BOOL __stdcall SetUserPwd(char *username,char *pwd)
{
HRESULT hr;
IADsUser *pUser;
_bstr_t bstr;
DWORD ll_len=255;
char lbBuffer[255];
::GetComputerName(lbBuffer,&ll_len);

bstr = "WinNT: //" + _bstr_t (lbBuffer) + "/" + _bstr_t (username) + ", user";

file: //initialize apartment thread
hr = CoInitialize (NULL);
hr= ADsGetObject(bstr,IID_IADsUser,(void **)&pUser);
if (SUCCEEDED(hr))
{
hr=pUser->SetPassword( _bstr_t (pwd));

if (SUCCEEDED (hr))
{
CoUninitialize ();
return TRUE;
}
}
CoUninitialize () ;

return FALSE;
}



Copyright © Windows knowledge All Rights Reserved