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.
180 lines
4.7 KiB
180 lines
4.7 KiB
/*===================================================================
|
|
Microsoft Denali
|
|
|
|
Microsoft Confidential.
|
|
Copyright 1997 Microsoft Corporation. All Rights Reserved.
|
|
|
|
Component: Global Interface Pointer API support
|
|
|
|
File: Gip.h
|
|
|
|
Owner: DmitryR
|
|
|
|
This is the GIP header file.
|
|
===================================================================*/
|
|
|
|
#ifndef _ASP_GIP_H
|
|
#define _ASP_GIP_H
|
|
|
|
/*===================================================================
|
|
Includes
|
|
===================================================================*/
|
|
|
|
#include "debug.h"
|
|
|
|
/*===================================================================
|
|
Defines
|
|
===================================================================*/
|
|
|
|
#define NULL_GIP_COOKIE 0xFFFFFFFF
|
|
|
|
/*===================================================================
|
|
C G l o b a l I n t e r f a c e A P I
|
|
===================================================================*/
|
|
|
|
class CGlobalInterfaceAPI
|
|
{
|
|
private:
|
|
// Is inited?
|
|
DWORD m_fInited : 1;
|
|
|
|
// Pointer to the COM object
|
|
IGlobalInterfaceTable *m_pGIT;
|
|
|
|
public:
|
|
CGlobalInterfaceAPI();
|
|
~CGlobalInterfaceAPI();
|
|
|
|
HRESULT Init();
|
|
HRESULT UnInit();
|
|
|
|
// inlines for the real API calls:
|
|
HRESULT Register(IUnknown *pUnk, REFIID riid, DWORD *pdwCookie);
|
|
HRESULT Get(DWORD dwCookie, REFIID riid, void **ppv);
|
|
HRESULT Revoke(DWORD dwCookie);
|
|
|
|
public:
|
|
#ifdef DBG
|
|
inline void AssertValid() const
|
|
{
|
|
Assert(m_fInited);
|
|
Assert(m_pGIT);
|
|
}
|
|
#else
|
|
inline void AssertValid() const {}
|
|
#endif
|
|
};
|
|
|
|
/*===================================================================
|
|
CGlobalInterfaceAPI inlines
|
|
===================================================================*/
|
|
|
|
inline HRESULT CGlobalInterfaceAPI::Register
|
|
(
|
|
IUnknown *pUnk,
|
|
REFIID riid,
|
|
DWORD *pdwCookie
|
|
)
|
|
{
|
|
HRESULT hr = S_OK;
|
|
IUnknown *pUnkTemp = NULL;
|
|
IClientSecurity * pICS = NULL;
|
|
DWORD dwAuthnSvc = RPC_C_AUTHN_DEFAULT;
|
|
DWORD dwAuthzSvc = RPC_C_AUTHZ_DEFAULT;
|
|
OLECHAR *pwszServerPrincName = NULL;
|
|
DWORD dwAuthnLevel = RPC_C_AUTHN_LEVEL_DEFAULT;
|
|
DWORD dwImpLevel = RPC_C_IMP_LEVEL_DEFAULT;
|
|
RPC_AUTH_IDENTITY_HANDLE AuthInfo = NULL;
|
|
DWORD dwCapabilities = EOAC_DEFAULT;
|
|
|
|
Assert(m_fInited);
|
|
Assert(m_pGIT);
|
|
|
|
hr = pUnk->QueryInterface(IID_IUnknown, (VOID**)&pUnkTemp);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = pUnkTemp->QueryInterface( IID_IClientSecurity, (VOID**) &pICS );
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = pICS->QueryBlanket( pUnkTemp,
|
|
&dwAuthnSvc,
|
|
&dwAuthzSvc,
|
|
&pwszServerPrincName,
|
|
&dwAuthnLevel,
|
|
&dwImpLevel,
|
|
&AuthInfo,
|
|
&dwCapabilities );
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
dwCapabilities &= ~EOAC_DYNAMIC_CLOAKING;
|
|
dwCapabilities |= EOAC_STATIC_CLOAKING;
|
|
hr = pICS->SetBlanket( pUnkTemp,
|
|
dwAuthnSvc,
|
|
dwAuthzSvc,
|
|
pwszServerPrincName,
|
|
dwAuthnLevel,
|
|
dwImpLevel,
|
|
AuthInfo,
|
|
dwCapabilities );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
hr = S_OK;
|
|
}
|
|
}
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = m_pGIT->RegisterInterfaceInGlobal(pUnk, riid, pdwCookie);
|
|
}
|
|
|
|
if (pwszServerPrincName)
|
|
{
|
|
CoTaskMemFree( pwszServerPrincName );
|
|
}
|
|
|
|
if (pICS)
|
|
{
|
|
pICS->Release();
|
|
pICS = NULL;
|
|
}
|
|
|
|
if (pUnkTemp)
|
|
{
|
|
pUnkTemp->Release();
|
|
pUnkTemp = NULL;
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
inline HRESULT CGlobalInterfaceAPI::Get
|
|
(
|
|
DWORD dwCookie,
|
|
REFIID riid,
|
|
void **ppv
|
|
)
|
|
{
|
|
Assert(m_fInited);
|
|
Assert(m_pGIT);
|
|
return m_pGIT->GetInterfaceFromGlobal(dwCookie, riid, ppv);
|
|
}
|
|
|
|
inline HRESULT CGlobalInterfaceAPI::Revoke
|
|
(
|
|
DWORD dwCookie
|
|
)
|
|
{
|
|
Assert(m_fInited);
|
|
Assert(m_pGIT);
|
|
return m_pGIT->RevokeInterfaceFromGlobal(dwCookie);
|
|
}
|
|
|
|
/*===================================================================
|
|
Globals
|
|
===================================================================*/
|
|
|
|
extern CGlobalInterfaceAPI g_GIPAPI;
|
|
|
|
#endif
|