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.
|
|
//---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1995
//
// File: cenumvar.cxx
//
// Contents: Windows NT 3.5 Enumerator Code
//
// CNWCOMPATNamespaceEnum::Create
// CNWCOMPATNamespaceEnum::CNWCOMPATNamespaceEnum
// CNWCOMPATNamespaceEnum::~CNWCOMPATNamespaceEnum
// CNWCOMPATNamespaceEnum::QueryInterface
// CNWCOMPATNamespaceEnum::AddRef
// CNWCOMPATNamespaceEnum::Release
// CNWCOMPATNamespaceEnum::Next
// CNWCOMPATNamespaceEnum::Skip
// CNWCOMPATNamespaceEnum::Clone
//
// History:
//----------------------------------------------------------------------------
#include "NWCOMPAT.hxx"
#pragma hdrstop
//+---------------------------------------------------------------------------
//
// Function: CNWCOMPATNamespaceEnum::Create
//
// Synopsis:
//
// Arguments: [pCollection]
// [ppEnumVariant]
//
// Returns: HRESULT
//
// Modifies:
//
// History: 01-30-95 krishnag Created.
//
//----------------------------------------------------------------------------
HRESULT CNWCOMPATNamespaceEnum::Create( CNWCOMPATNamespaceEnum FAR* FAR* ppenumvariant ) { HRESULT hr = S_OK; CNWCOMPATNamespaceEnum FAR* penumvariant = NULL;
penumvariant = new CNWCOMPATNamespaceEnum();
if (penumvariant == NULL){ hr = E_OUTOFMEMORY; BAIL_ON_FAILURE(hr); }
hr = NWApiGetAnyBinderyHandle( &penumvariant->_hConn );
*ppenumvariant = penumvariant;
RRETURN(hr);
error:
if (penumvariant) { delete penumvariant; }
RRETURN_EXP_IF_ERR(hr); }
//+---------------------------------------------------------------------------
//
// Function: CNWCOMPATNamespaceEnum::CNWCOMPATNamespaceEnum
//
// Synopsis:
//
//
// Arguments:
//
//
// Returns:
//
// Modifies:
//
// History: 01-30-95 krishnag Created.
//
//----------------------------------------------------------------------------
CNWCOMPATNamespaceEnum::CNWCOMPATNamespaceEnum() { _dwResumeObjectID = 0xffffffff; _hConn = NULL; }
//+---------------------------------------------------------------------------
//
// Function: CNWCOMPATNamespaceEnum::~CNWCOMPATNamespaceEnum
//
// Synopsis:
//
//
// Arguments:
//
// Returns:
//
// Modifies:
//
// History: 01-30-95 krishnag Created.
//
//----------------------------------------------------------------------------
CNWCOMPATNamespaceEnum::~CNWCOMPATNamespaceEnum() { if (_hConn) { NWApiReleaseBinderyHandle(_hConn); } }
//+---------------------------------------------------------------------------
//
// Function: CNWCOMPATNamespaceEnum::Next
//
// Synopsis: Returns cElements number of requested ADs objects in the
// array supplied in pvar.
//
// Arguments: [cElements] -- The number of elements requested by client
// [pvar] -- ptr to array of VARIANTs to for return objects
// [pcElementFetched] -- if non-NULL, then number of elements
// -- actually returned is placed here
//
// Returns: HRESULT -- S_OK if number of elements requested are returned
// -- S_FALSE if number of elements is < requested
//
// Modifies:
//
// History:
//
//----------------------------------------------------------------------------
STDMETHODIMP CNWCOMPATNamespaceEnum::Next( ULONG cElements, VARIANT FAR* pvar, ULONG FAR* pcElementFetched ) { ULONG cElementFetched = 0; HRESULT hr = S_OK;
hr = EnumComputers( cElements, pvar, &cElementFetched );
if (pcElementFetched) { *pcElementFetched = cElementFetched; } RRETURN_EXP_IF_ERR(hr); }
//----------------------------------------------------------------------------
//
// Function: CNWCOMPATNamespaceEnum::EnumComputers
//
// Synopsis:
//
//----------------------------------------------------------------------------
HRESULT CNWCOMPATNamespaceEnum::EnumComputers( ULONG cElements, VARIANT FAR* pvar, ULONG FAR* pcElementFetched ) { HRESULT hr = S_OK; IDispatch *pDispatch = NULL; DWORD i = 0;
while (i < cElements) {
hr = GetComputerObject(&pDispatch); if (hr == S_FALSE) { break; }
VariantInit(&pvar[i]); pvar[i].vt = VT_DISPATCH; pvar[i].pdispVal = pDispatch; (*pcElementFetched)++; i++; } return(hr); }
//----------------------------------------------------------------------------
//
// Function: CNWCOMPATNamespaceEnum::GetComputerObject
//
// Synopsis:
//
//----------------------------------------------------------------------------
HRESULT CNWCOMPATNamespaceEnum::GetComputerObject( IDispatch ** ppDispatch ) { LPWSTR pszObjectName = NULL; HRESULT hr = S_OK;
*ppDispatch = NULL;
hr = NWApiObjectEnum( _hConn, OT_FILE_SERVER, &pszObjectName, &_dwResumeObjectID ); BAIL_ON_FAILURE(hr);
//
// Now send back the current object
//
hr = CNWCOMPATComputer::CreateComputer( bstrProviderPrefix, pszObjectName, ADS_OBJECT_BOUND, IID_IDispatch, (void **)ppDispatch ); BAIL_ON_FAILURE(hr);
error: if (pszObjectName) { FreeADsStr(pszObjectName); }
RRETURN_ENUM_STATUS(hr); }
|