Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// EnumVar.cpp: implementation of the CEnumVar class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include <COMDEF.h>
#include "EnumTest.h"
#include "EnumVar.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CEnumVar::CEnumVar(IEnumVARIANT * pEnum) { m_pEnum = pEnum; m_pEnum->AddRef(); }
CEnumVar::~CEnumVar() { m_pEnum->Release(); }
BOOL CEnumVar::Next(long flag, SAttrInfo * pAttr) { // This function enumerates through and gets name strings for the Values
ULONG ulFetched=0; IADs * pADs=NULL; _variant_t var; BSTR bstrName; if ( !m_pEnum ) { return FALSE; }
HRESULT hr = m_pEnum->Next(1, &var, &ulFetched);
if ( ulFetched == 0 || FAILED(hr) ) return FALSE;
if ( var.vt == VT_BSTR ) { // We have a bstring so lets just return that as names
wcscpy(pAttr->sName, var.bstrVal); wcscpy(pAttr->sSamName, var.bstrVal); } else { if ( flag == NULL ) return FALSE; // We have a Dispatch Pointer
IDispatch * pDisp = V_DISPATCH(&var); // We ask for a IAds pointer
hr = pDisp->QueryInterface( IID_IADs, (void**)&pADs); // and Ask IAds pointer to give us the name of the container.
// Now fill up information that they need.
// Common Name
if ( flag | F_Name ) { hr = pADs->get_Name(&bstrName); if ( FAILED(hr) ) return FALSE; wcscpy( pAttr->sName, bstrName); }
// SAM Account Name
if ( flag | F_SamName ) { hr = pADs->Get(L"sAMAccountName", &var); if ( FAILED(hr) ) return FALSE; wcscpy( pAttr->sSamName, var.bstrVal); }
// Class name of the object.
if ( flag | F_Class ) { hr = pADs->get_Class(&bstrName); if ( FAILED(hr) ) return FALSE; wcscpy( pAttr->sClass, bstrName); }
// Group Type
/* if ( flag | F_GroupType )
{ hr = pADs->Get(L"groupType", &var); if ( FAILED(hr) ) { var.vt = VT_I4; var.lVal = -1; } pAttr->groupType = var.lVal; } */ } return TRUE; }
|