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 - 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
|