2025-04-27 07:49:33 -04:00

94 lines
3.0 KiB
C++

/*++
Copyright (C) 1998-2001 Microsoft Corporation
Module Name:
UBSKPCKT.H
Abstract:
Unbound Sink Packet
History:
--*/
#ifndef __UBSINKPACKET_H__
#define __UBSINKPACKET_H__
#include "wbemdatapacket.h"
#include "wbemobjpacket.h"
#include "wbemclasstoidmap.h"
#include "wbemclasscache.h"
// Store the current packing value, then set our own value
#pragma pack( push )
#pragma pack( 1 )
// IWbemObjectSink::Indicate() Header. Changing this will
// cause the main version to change
typedef struct tagWBEM_DATAPACKET_UNBOUNDSINK_INDICATE
{
DWORD dwSizeOfHeader; // Size of the header struct. Data immediately follows header.
DWORD dwDataSize; // Size of Data following header.
DWORD dwLogicalConsumerSize; // Size of Logical Consumer Object
} WBEM_DATAPACKET_UNBOUNDSINK_INDICATE;
typedef WBEM_DATAPACKET_UNBOUNDSINK_INDICATE* PWBEM_DATAPACKET_UNBOUNDSINK_INDICATE;
// restore packing
#pragma pack( pop )
//
// Class: CWbemUnboundSinkIndicatePacket
//
// This class is designed to wrapper a data packet that describes an
// IWbemUnbopundObjectSink::IndicateToConsumer() operation. The data
// structure of this packet is described above. It makes use of
// CWbemObjectPacket, CWbemInstancePacket, CWbemClassPacket and
// CWbemClasslessInstancePacket to walk and analyze data for each of
// the IWbemClassObjects that are indicated into the Sink.
//
class CWbemUnboundSinkIndicatePacket : public CWbemDataPacket
{
protected:
PWBEM_DATAPACKET_UNBOUNDSINK_INDICATE m_pUnboundSinkIndicate;
public:
CWbemUnboundSinkIndicatePacket( LPBYTE pDataPacket = NULL, DWORD dwPacketLength = 0 );
~CWbemUnboundSinkIndicatePacket();
HRESULT CalculateLength( IWbemClassObject* pLogicalConsumer, LONG lObjectCount,
IWbemClassObject** apClassObjects, DWORD* pdwLength, CWbemClassToIdMap& classtoidmap, GUID* pguidClassIds, BOOL* pfSendFullObject );
HRESULT MarshalPacket( IWbemClassObject* pLogicalConsumer, LONG lObjectCount,
IWbemClassObject** apClassObjects, GUID* paguidClassIds, BOOL* pfSendFullObject );
HRESULT UnmarshalPacket( IWbemClassObject*& pLogicalConsumer, LONG& lObjectCount,
IWbemClassObject**& apClassObjects, CWbemClassCache& classcache );
// inline helper
HRESULT MarshalPacket( LPBYTE pData, DWORD dwPacketLength, IWbemClassObject* pLogicalConsumer,
LONG lObjectCount, IWbemClassObject** apClassObjects, GUID* paguidClassIds,
BOOL* pfSendFullObject );
// Change the underlying pointers
// Override of base class
void SetData( LPBYTE pDataPacket, DWORD dwPacketLength );
};
inline HRESULT CWbemUnboundSinkIndicatePacket::MarshalPacket( LPBYTE pData, DWORD dwPacketLength,
IWbemClassObject* pLogicalConsumer,
LONG lObjectCount,
IWbemClassObject** apClassObjects,
GUID* paguidClassIds, BOOL* pfSendFullObject )
{
SetData( pData, dwPacketLength );
return MarshalPacket( pLogicalConsumer, lObjectCount, apClassObjects, paguidClassIds, pfSendFullObject );
}
#endif