mirror of https://github.com/tongzx/nt5src
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.
177 lines
4.9 KiB
177 lines
4.9 KiB
//+-------------------------------------------------------------------------
|
|
//
|
|
// 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
|
|
|