150 lines
2.8 KiB
C++
150 lines
2.8 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (c) 1995-1996 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
ipaccess.hxx
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This module provides definitions of the IPAccess check object
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Murali R. Krishnan ( MuraliK ) 18-March-1996
|
||
|
|
||
|
Environment:
|
||
|
|
||
|
User-Mode - Win32
|
||
|
|
||
|
Project:
|
||
|
|
||
|
Internet Server DLL
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
# ifndef _IPACCESS_HXX_
|
||
|
# define _IPACCESS_HXX_
|
||
|
|
||
|
/************************************************************
|
||
|
* Include Headers
|
||
|
************************************************************/
|
||
|
|
||
|
# include "tsres.hxx"
|
||
|
|
||
|
#define SIZEOF_INETA_IP_SEC_LIST( IPList ) \
|
||
|
( sizeof(INET_INFO_IP_SEC_LIST) + \
|
||
|
(IPList)->cEntries * \
|
||
|
sizeof(INET_INFO_IP_SEC_ENTRY) \
|
||
|
)
|
||
|
|
||
|
|
||
|
/************************************************************
|
||
|
* Type Definitions
|
||
|
************************************************************/
|
||
|
|
||
|
|
||
|
class IPAccessList {
|
||
|
|
||
|
|
||
|
public:
|
||
|
|
||
|
dllexp
|
||
|
IPAccessList(VOID)
|
||
|
: m_pIPList ( NULL),
|
||
|
m_cReadLocks ( 0),
|
||
|
m_tsLock ()
|
||
|
{ }
|
||
|
|
||
|
dllexp
|
||
|
~IPAccessList(VOID)
|
||
|
{ Cleanup(); }
|
||
|
|
||
|
dllexp VOID
|
||
|
Cleanup(VOID);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Data access protection methods
|
||
|
//
|
||
|
|
||
|
dllexp VOID
|
||
|
LockThisForRead( VOID )
|
||
|
{
|
||
|
m_tsLock.Lock( TSRES_LOCK_READ );
|
||
|
ASSERT( InterlockedIncrement( &m_cReadLocks ) > 0);
|
||
|
}
|
||
|
|
||
|
dllexp VOID
|
||
|
LockThisForWrite( VOID )
|
||
|
{
|
||
|
m_tsLock.Lock( TSRES_LOCK_WRITE );
|
||
|
ASSERT( m_cReadLocks == 0);
|
||
|
}
|
||
|
|
||
|
dllexp VOID
|
||
|
UnlockThis( VOID )
|
||
|
{
|
||
|
#if DBG
|
||
|
if ( m_cReadLocks ) // If non-zero, then this is a read unlock
|
||
|
InterlockedDecrement( &m_cReadLocks );
|
||
|
#endif
|
||
|
m_tsLock.Unlock();
|
||
|
}
|
||
|
|
||
|
dllexp BOOL
|
||
|
IsEmpty(VOID) const
|
||
|
{ return ( m_pIPList == NULL); }
|
||
|
|
||
|
|
||
|
dllexp BOOL
|
||
|
ReadIPList(IN LPCSTR pszRegKey);
|
||
|
|
||
|
dllexp BOOL
|
||
|
IsPresent(IN LPSOCKADDR_IN psockAddr);
|
||
|
|
||
|
|
||
|
dllexp DWORD
|
||
|
QueryIPListSize(VOID) const
|
||
|
{ return ( (m_pIPList != NULL) ?
|
||
|
SIZEOF_INETA_IP_SEC_LIST( m_pIPList)
|
||
|
: 0);
|
||
|
}
|
||
|
|
||
|
dllexp VOID
|
||
|
CopyIPList(OUT LPINETA_IP_SEC_LIST pList)
|
||
|
{
|
||
|
LockThisForRead();
|
||
|
if ( m_pIPList != NULL) {
|
||
|
memcpy( pList, m_pIPList, SIZEOF_INETA_IP_SEC_LIST(m_pIPList));
|
||
|
}
|
||
|
UnlockThis();
|
||
|
}
|
||
|
|
||
|
# if DBG
|
||
|
|
||
|
dllexp VOID
|
||
|
Print( IN LPCSTR pszListName) const;
|
||
|
|
||
|
# endif // DBG
|
||
|
|
||
|
private:
|
||
|
|
||
|
TS_RESOURCE m_tsLock; // Resource lock for IP access check
|
||
|
LONG m_cReadLocks; // # of readers
|
||
|
|
||
|
INETA_IP_SEC_LIST * m_pIPList; // security list
|
||
|
|
||
|
}; // class IPAccessList
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
# endif // _IPACCESS_HXX_
|
||
|
|
||
|
/************************ End of File ***********************/
|