windows-nt/Source/XPSP1/NT/inetsrv/query/h/objcur.hxx
2020-09-26 16:20:57 +08:00

178 lines
4.9 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1994.
//
// File: ObjCur.Hxx
//
// Contents: Object cursor + ancillary support for generic ViewTable
//
// Classes:
//
// History: 07-Sep-92 KyleP Created from portions of IDSMgr\NewQuery
//
//--------------------------------------------------------------------------
#pragma once
class CXpr;
class CCursor;
//+-------------------------------------------------------------------------
//
// Class: CRetriever
//
// Purpose: Accesses properties of an object (**not** necessarily
// through the official property mechanism.
//
// Interface:
//
// History: 07-Sep-92 KyleP Created
// 20 Jun 94 Alanw Added WorkId() method for large tables.
//
//--------------------------------------------------------------------------
enum GetValueResult
{
GVRSuccess, // Call successful
GVRNotEnoughSpace, // Out of space in output buffer.
GVRNotSupported, // Unsupported access mode
GVRNotAvailable, // Requested property not available
GVRSharingViolation // Sharing violation, no result
};
//+---------------------------------------------------------------------------
//----------------------------------------------------------------------------
class CRetriever
{
public:
virtual ~CRetriever();
virtual GetValueResult GetPropertyValue( PROPID pid,
PROPVARIANT * pbData,
ULONG * pcb ) = 0;
virtual WORKID WorkId() = 0;
virtual WORKID NextWorkId() = 0;
virtual WORKID SetWorkId(WORKID widNew) = 0;
static NTSTATUS NtStatusFromGVR( GetValueResult gvr );
virtual void Quiesce() = 0;
};
DECLARE_SMARTP( Retriever );
//+---------------------------------------------------------------------------
//
// Function: NtStatusFromGVR
//
// Synopsis: Returns an NtStatus for a given GVR value.
//
// Arguments: [gvr] - Input - the gvr to be transformed
//
// Returns: An NTSTATUS that corresponds to the gvr.
//
// History: 4-27-95 srikants Created
//
// Notes:
//
//----------------------------------------------------------------------------
inline NTSTATUS CRetriever::NtStatusFromGVR( GetValueResult gvr )
{
NTSTATUS status = STATUS_UNSUCCESSFUL;
switch (gvr )
{
case GVRSuccess:
status = STATUS_SUCCESS;
break;
case GVRNotEnoughSpace:
status = STATUS_NO_MEMORY;
break;
case GVRNotSupported:
status = STATUS_NOT_SUPPORTED;
break;
case GVRNotAvailable:
status = STATUS_NOT_FOUND;
break;
case GVRSharingViolation:
status = STATUS_SHARING_VIOLATION;
break;
}
return status;
}
//+-------------------------------------------------------------------------
//
// Class: CValueXpr
//
// Purpose: Used to fetch property values. May (potentially) be
// expressions more complex that just fetching simple
// value.
//
// History: 08-Sep-92 KyleP Created
//
//--------------------------------------------------------------------------
class CValueXpr
{
public:
virtual ~CValueXpr() {};
virtual GetValueResult GetValue( CRetriever & obj,
PROPVARIANT * p,
ULONG * pcb ) = 0;
};
inline CRetriever::~CRetriever()
{
}
#if defined( DOCGEN )
//+-------------------------------------------------------------------------
//
// Member: CRetriever::GetPropertyValue, public
//
// Synopsis: Retrieves a property value of the current object.
//
// Arguments: [propinfo] -- Static helper information used to retrieve
// a specific property.
// [pProperty] -- Points to buffer into which the SPropValue
// will be written. Any additional data (such
// as a string) is written directly after the
// SPropValue. Pointers in the SPropValue
// should be absolute, not based on the starting
// address of [pProperty].
// [pcb] -- Maximum size of data that can be written to
// [pProperty]. If there is not enough space
// then GVRNotEnoughSpace should be returned and
// *[pcb] contains the required size.
//
// Returns: Status code.
//
// History: 07-Sep-92 KyleP Created
//
//--------------------------------------------------------------------------
GetValueResult CRetriever::GetPropertyValue( void * propinfo,
SPropValue * pbData,
ULONG * pcb )
{
}
#endif // DOCGEN