Source code of Windows XP (NT5)
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.
|
|
/*=====================================================================*
Copyright (c) 1995-1997 Microsoft Corporation
Module Name : wamxbase.hxx
Abstract: Declaration of WAM_EXEC_BASE Object
Author:
David L. Kaplan ( DaveK ) 26-June-1997
Environment: User Mode - Win32
Project:
WAM and ASP DLLs
Revision History:
======================================================================*/
# ifndef _WAMXBASE_HXX_
# define _WAMXBASE_HXX_
# include "iisext.h"
# include "WamW3.hxx"
/*---------------------------------------------------------------------*
Forward references
*/ interface IWamRequest; class WAM; class HSE_BASE;
// first cleanup-capable thread to execute
enum FIRST_THREAD { FT_NULL = 0, // ft is not yet known
FT_MAINLINE, // ft is mainline (wam) thread
FT_CALLBACK // ft is callback (ServerSupportFunction) thread
};
/*---------------------------------------------------------------------*
class WAM_EXEC_BASE
Base class for WAM_EXEC_INFO. Shareable with 'knowledgeable' ISAPIs, like asp.dll
*/ class WAM_EXEC_BASE {
public:
//
// This is what the ISA sees (must be first)
//
EXTENSION_CONTROL_BLOCK ecb;
protected:
//
// m_pIWamReqIIS
// iwamreq ptr which was passed to us by IIS
//
// m_pIWamReqInproc
// iwamreq ptr used if request is in-process
//
// m_pIWamReqSmartISA
// iwamreq ptr used if request is handled by a 'smart ISA'
// (by definition, an ISA that alerts us when a sequence
// of its callbacks will be on a single thread)
//
// NOTE asp.dll is a canonical example of a smart ISA.
//
// NOTE once ISA calls us to set this ptr, it must ensure
// that it does all callbacks on the same thread, and that
// it calls us on the same thread when done to release the ptr.
// ISA is then free to call again on another thread and
// do the same thing; the only requirement is that all
// all callbacks between an "on" call and its "off" call
// must be made on the same thread.
//
// ANY OTHER USE VOIDS WARRANTY.
//
// m_gipIWamRequest
// gip cookie which can get a thread-valid iwamreq ptr
// on any thread
//
IWamRequest * m_pIWamReqIIS; IWamRequest * m_pIWamReqInproc; IWamRequest * m_pIWamReqSmartISA; DWORD m_gipIWamRequest;
//
// are we in-proc or oop?
// are we part of an application pool?
//
BOOL m_fInProcess; BOOL m_fInPool; //
// m_dwThreadIdIIS
// id of thread which called us 'from IIS'
//
// m_dwThreadIdISA
// id of ISA callback thread
//
DWORD m_dwThreadIdIIS; DWORD m_dwThreadIdISA;
protected:
//
// members formerly in WAM_EXEC_INFO
// moved here to make debugging easier (inetdbg print, etc.)
//
long _cRefs; WAM * m_pWam;
public:
//
// members formerly in WAM_EXEC_INFO
// moved here to make debugging easier (inetdbg print, etc.)
//
// _ListEntry
// list entry for this object in WAM's request list
//
// _psExtension
// ptr to isapi extension dll struct for this request
//
// _FirstThread
// first cleanup-capable thread to execute
//
LIST_ENTRY _ListEntry; DWORD _dwFlags; DWORD _dwIsaKeepConn; DWORD _dwChildExecFlags; HSE_BASE * _psExtension; FIRST_THREAD _FirstThread; ASYNC_IO_INFO _AsyncIoInfo;
protected:
DWORD m_dwSignature;
public:
HRESULT GetInterfaceForThread( );
HRESULT ReleaseInterfaceForThread( );
HRESULT GetIWamRequest( IWamRequest ** ppIWamRequest );
VOID ReleaseIWamRequest( IWamRequest * pIWamRequest );
HRESULT GetInterfaceFromGip( IWamRequest ** ppIWamRequest );
inline BOOL FInProcess( );
inline BOOL FInPool( );
protected:
WAM_EXEC_BASE( );
HRESULT InitWamExecBase( IWamRequest * pIWamRequest );
VOID CleanupWamExecBase( );
HRESULT RegisterIWamRequest( IWamRequest * pIWamRequest );
VOID RevokeIWamRequest( );
inline BOOL AssertInpValid( );
inline BOOL AssertOopValid( );
public:
BOOL AssertSmartISAValid( );
}; // class WAM_EXEC_BASE
/*---------------------------------------------------------------------*
Inlines
*/
inline BOOL WAM_EXEC_BASE::FInProcess() { return m_fInProcess; }
inline BOOL WAM_EXEC_BASE::FInPool() { return m_fInPool; }
inline BOOL WAM_EXEC_BASE::AssertInpValid() { return( m_fInProcess && m_pIWamReqInproc && (m_pIWamReqSmartISA == m_pIWamReqInproc) && !m_gipIWamRequest && !m_dwThreadIdISA ); }
inline BOOL WAM_EXEC_BASE::AssertOopValid() { return( !m_fInProcess && m_gipIWamRequest ); }
# endif // _WAMXBASE_HXX_
/************************ End of File *********************************/
|