IADsGroup::IsMember 方法 (iads.h)

IADsGroup::IsMember 方法确定目录服务对象是否是该组的直接成员。 此方法不验证任何嵌套组中的成员身份。

语法

HRESULT IsMember(
        BSTR         bstrMember,
  [out] VARIANT_BOOL *bMember
);

参数

bstrMember

包含用于验证成员身份的目录服务对象的 ADsPath。 此 ADsPath 必须使用用于绑定到组的同一 ADSI 提供程序。 例如,如果组是使用 LDAP 提供程序绑定到的,则此 ADsPath 还必须使用 LDAP 提供程序。

[out] bMember

指向 VARIANT_BOOL 值的指针 ,如果对象 是组的直接成员或VARIANT_FALSE,则该值接收 VARIANT_TRUE

返回值

此方法支持标准返回值,包括 S_OK。 有关详细信息,请参阅 ADSI 错误代码

注解

尽管可以通过 WinNT 提供程序使用成员 SID 向组添加或删除安全主体,但如果成员通过 WinNT 提供程序属于组, 则 IADsGroup.IsMember 方法不支持使用 SID ADsPath 进行验证。

仅当组和对象位于同一域中时, IADsGroup::IsMember 方法才能正常工作。 如果对象与组位于不同的域中, 则 IADsGroup::IsMember 将始终返回 VARIANT_FALSE

示例

下面的代码示例将“jeffsmith”用户添加到“Fabrikam”域上的“Administrators”组,然后报告该用户现在是该组的成员。

Dim grp As IADsGroup
On Error GoTo Cleanup

Set grp = GetObject("WinNT://Microsoft/Administrators")
grp.Add ("WinNT://Fabrikam/jeffsmith")
Debug.Print grp.IsMember("WinNT://Fabrikam/jeffsmith ") ' Should be TRUE.

Cleanup:
    If (Err.Number<>0) Then
        MsgBox("An error has occurred. " & Err.Number)
    End If
    Set grp = Nothing

下面的代码示例验证用户是否属于组,然后再将其添加到组。

IADsGroup *pGroup = NULL;
HRESULT hr = S_OK;
LPWSTR adsPath = L"WinNT://Fabrikam/Administrators";
BSTR bstr = NULL;

hr = ADsGetObject(adsPath, IID_IADsGroup, (void**)&pGroup);

if(FAILED(hr))
{
    goto Cleanup;
}

hr = pGroup->get_Description(&bstr);
if(FAILED(hr))
{
    goto Cleanup;
}

printf("Description: %S\n",bstr);
SysFreeString(bstr);

VARIANT_BOOL inG=false;
hr = pGroup->IsMember(CComBSTR("WinNT://Microsoft/SecUser"), &inG);

if (inG ) 
{
    printf("already in the group.\n");
}
else 
{
    hr = pGroup->Add(CComBSTR("WinNT://Microsoft/SecUser"));
    if(FAILED(hr))
    {
        goto Cleanup;
    }

    printf("user added.\n");
}

Cleanup:
if(pGroup)
{
    pGroup->Release();
}
if(bstr)
{
    SysFreeString(bstr);
}

return hr;

要求

要求
最低受支持的客户端 Windows Vista
最低受支持的服务器 Windows Server 2008
目标平台 Windows
标头 iads.h
DLL Activeds.dll

另请参阅

ADSI 错误代码

IADsGroup

IADsGroup 属性方法

IADsMembers