How To Hide/Unhide Distribution Group Membership (306799)



The information in this article applies to:

  • Microsoft Collaboration Data Objects for Exchange Management (CDOEXM)
  • Microsoft Exchange 2000 Server

This article was previously published under Q306799

SUMMARY

You can hide and unhide Windows 2000 distribution group membership programmatically by using CDOEXM and the IDistributionList::HideDLMembership method. The only supported methods of hiding and unhiding group membership are by using CDOEXM, the Users and Computers snap-in, or the Active Directory Connector (ADC).

MORE INFORMATION

The sample provided in this section demonstrates how to use the IDistributionList::HideDLMembership method to hide the distribution group membership list. You must run this code authenticated in the same domain that the Exchange 2000 server is in.

Calling IDistributionList::HideDLMembership from outside the domain is not supported.

Calling IDistributionList::HideDLMembership from any scripting language is not supported unless the call is wrapped in a COM object. For more information, see below.

Although use of IDistributionList::HideDLMembership to hide membership will set reportToOriginator, oofReplyToOriginator, and reportToOwner properties to False, unhiding the membership will not modify these properties. If you want to change these, you must set them yourself.

Microsoft Visual Basic Sample

Private Sub Command1_Click()
    Dim objDistList As CDOEXM.IDistributionList
    Dim objAD As IADsGroup
    'NOTE: using OpenDSObject here is unsupported
    Set objAD = GetObject("LDAP://CN=MyDL,CN=Users,DC=MyDomain")
    Set objDistList = objAD
    objDistList.HideDLMembership = True
    objAD.SetInfo
    Set objAD = Nothing
    Set objDistList = Nothing
End Sub

				

Microsoft Visual C++ Sample

 #include "stdio.h"
 #include "activeds.h"

   // Importing the libraries required to use CDOEXM
 #import <C:\Program Files\Exchsrvr\BIN\cdoexm.dll> no_namespace raw_interfaces_only exclude("IDataSource2")

   int main(void)
   {
   	// Declare variables
   	HRESULT hr;
   	LPWSTR strDLLDAPPath;
   	IADsUser *pDLobj = NULL;
   	IDistributionList *pDL = NULL;
	BOOL Setit = -1;

   	//Set the LDAP path
   	strDLLDAPPath =           L"LDAP://MyServer/CN=test4dl,CN=Users,DC=MyDomain,DC=com";

   	//Initialize COM
   	hr = CoInitialize(NULL);
   	if (FAILED(hr)) {
   		wprintf(L"Failed to CoInitialize: 0x%x\n", hr);
   		return hr;
   	}

   	//Bind to the existing DL using ADSI
   	hr = ADsGetObject(strDLLDAPPath, IID_IADs, (void**)&pDLobj);
   	if (FAILED(hr)) {
   		wprintf(L"Failed to get IADs: 0x%x\n", hr);
   		pDLobj->Release();
   		CoUninitialize();
   		return hr;
   	}

   	//Query for the IDistributionList Interface using the IADs object
   	hr = pDLobj->QueryInterface(__uuidof(IDistributionList), (void**)&pDL);
   	if (!SUCCEEDED(hr)) 
   	{
   		wprintf(L"QueryInterface of IDistributionList failed!\n");
   		pDLobj->Release();
   		pDL->Release();
   		CoUninitialize();
   		return hr;
   	}

   	//Set the hideDLMembership attribute
   	hr = pDL->put_HideDLMembership(Setit);
   	if (!SUCCEEDED(hr)) 
   	{
   		wprintf(L"put_HideDLMembership failed!\n");
   		pDLobj->Release();
   		pDL->Release();
   		CoUninitialize();
   		return hr;
   	}

   	//Apply changes made to the cache back to the Active Directory
   	hr = pDLobj->SetInfo();
   	if (!SUCCEEDED(hr)) 
   	{
   		wprintf(L"SetInfo failed!\n");
   		pDLobj->Release();
   		pDL->Release();
   		CoUninitialize();
   		return hr;
   	}

   	//Cleanup and uninitialize COM
   	pDLobj->Release();
   	pDL->Release();
   	pDLobj = NULL;
   	pDL = NULL;
   	CoUninitialize();
   	return 0;
   }

				
This behavior is by design.This has been bugged and resolved as By Design.

REFERENCES

For additional information about programmatically starting the Recipient Update Service (RUS), click the following article number to view the article in the Microsoft Knowledge Base:

306866 How To Programmatically Start the RUS

For additional information about using the ADSI and CDOEXM interfaces, click the following article number to view the article in the Microsoft Knowledge Base:

306867 PRB: Calling ADSI and CDOEXM Methods from Scripting Languages

For additional information, click the article numbers below to view the articles in the Microsoft Knowledge Base:

253827 XADM: How Exchange Hides Group Membership in Active Directory

287137 XADM: Recipient Update Service Stops Responding with Event 8022

299250 XADM: When You Reveal the Membership of a Previously Hidden Group, the Group Stays Hidden


Modification Type:MinorLast Reviewed:7/1/2004
Keywords:kbDSWADSI2003Swept kbDSWADSI2003Swept kbhowto KB306799