Leaked source code of windows server 2003
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

/*===================================================================
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