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

183 lines
4.3 KiB
C++

/*++
Copyright (C) 1997-2001 Microsoft Corporation
Module Name:
WBEMPROX.H
Abstract:
Genral purpose include file.
History:
a-davj 04-Mar-97 Created.
--*/
#ifndef _WBEMPROX_H_
#define _WBEMPROX_H_
typedef LPVOID * PPVOID;
// These variables keep track of when the module can be unloaded
extern long g_cObj;
extern ULONG g_cLock;
extern CRITICAL_SECTION g_GlobalCriticalSection ;
// These define objects in addition to the object types defined in
// WBEM. The first group, upto but NOT including comlink, are Ole
// objects and the second group has object types that are tracked
// just for keeping track of leaks
enum { OBJECT_TYPE_COMLINK = MAX_OBJECT_TYPES, OBJECT_TYPE_CSTUB, OBJECT_TYPE_RQUEUE,
OBJECT_TYPE_PACKET_HEADER,
OBJECT_TYPE_LOGINPROXY, OBJECT_TYPE_OBJSINKPROXY,OBJECT_TYPE_PROVPROXY,
OBJECT_TYPE_ENUMPROXY, OBJECT_TYPE_LOGIN, OBJECT_TYPE_SECHELP, OBJECT_TYPE_RESPROXY, TCPIPADDR, MAX_CLIENT_OBJECT_TYPES};
enum TransportType
{
TcpipTransport ,
PipeTransport
} ;
//***************************************************************************
//
// CLASS NAME:
//
// CLogin
//
// DESCRIPTION:
//
// A wrapper for the IWbemLevel1Login interface.
//
//***************************************************************************
class CLogin: public IUnknown
{
protected:
DWORD m_AddressLength ;
BYTE *m_Address ;
long m_cRef; // Object reference count
IServerLogin * m_pLogin; // The "real" login interface (proxied)
SCODE MakeSureWeHaveAPointer();
DWORD m_dwType;
TransportType m_TransportType ;
public:
CLogin (
TransportType a_TransportType = PipeTransport ,
IN DWORD dwBinaryAddressLength = 0 ,
IN BYTE __RPC_FAR *pbBinaryAddress = NULL
);
~CLogin(void);
DWORD GetType(void){return m_dwType;};
//Non-delegating object IUnknown
STDMETHODIMP QueryInterface(REFIID, PPVOID);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// Methods of IWbemLevel1Login
STDMETHODIMP RequestChallenge(
LPWSTR pNetworkResource,
LPWSTR pUser,
WBEM_128BITS Nonce
);
STDMETHODIMP EstablishPosition(
LPWSTR wszClientMachineName,
DWORD dwProcessId,
DWORD* phAuthEventHandle
);
STDMETHODIMP WBEMLogin(
LPWSTR pPreferredLocale,
WBEM_128BITS AccessToken,
long lFlags, // WBEM_LOGIN_TYPE
IWbemContext *pCtx,
IWbemServices **ppNamespace
);
// Methods for NTLM authentication
STDMETHODIMP SspiPreLogin(
LPSTR pszSSPIPkg,
long lFlags,
long lBufSize,
byte __RPC_FAR *pInToken,
long lOutBufSize,
long __RPC_FAR *plOutBufBytes,
byte __RPC_FAR *pOutToken,
LPWSTR wszClientMachineName,
DWORD dwProcessId,
DWORD __RPC_FAR *pAuthEventHandle);
STDMETHODIMP Login(
LPWSTR pNetworkResource,
LPWSTR pPreferredLocale,
WBEM_128BITS AccessToken,
IN LONG lFlags,
IWbemContext *pCtx,
IN OUT IWbemServices **ppNamespace);
};
//***************************************************************************
//
// CLASS NAME:
//
// CLocatorFactory
//
// DESCRIPTION:
//
// Class factory for the CLocator class.
//
//***************************************************************************
class CLocatorFactory : public IClassFactory
{
protected:
long m_cRef;
int m_iType;
public:
CLocatorFactory(int iType);
~CLocatorFactory(void);
enum { PIPELOCATOR , TCPIPLOCATOR , TCPIPADDRESSRESOLVER , HELP , LOGIN };
//IUnknown members
STDMETHODIMP QueryInterface(REFIID, PPVOID);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
//IClassFactory members
STDMETHODIMP CreateInstance(LPUNKNOWN, REFIID, PPVOID);
STDMETHODIMP LockServer(BOOL);
};
SCODE RequestLogin (
OUT IServerLogin FAR* FAR* ppLogin,
OUT DWORD & dwType,
IN TransportType a_TransportType ,
IN DWORD dwBinaryAddressLength = 0 ,
IN BYTE *pbBinaryAddress = NULL
);
#endif