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 : ExecDesc.hxx
Abstract: EXEC_DESCRIPTOR structure
Author:
David Kaplan ( DaveK ) 31-Mar-1997
Environment: User Mode - Win32
Project: W3svc DLL
Revision History: Broke this file out from WamW3.hxx, since WamW3 contains shared stuff and EXEC_DESCRIPTOR is only used in w3svc.dll
--*/
# ifndef _EXECDESC_HXX_
# define _EXECDESC_HXX_
/************************************************************
* Include Headers ************************************************************/ //# include "iisextp.h"
/************************************************************
* Forward references ************************************************************/ enum GATEWAY_TYPE; class W3_METADATA; typedef W3_METADATA *PW3_METADATA;
/* EXEC_DESCRIPTOR block
This block is used for all ISAPI and CGI execution. The point is to remove the hard dependancy on HTTP_REQUEST members when executing a gateway. This allows for ISAPI apps to also execute gateways.
Instead of referring to HTTP_REQUEST members, when doing an execute, refer indirectly through the member pointer of this block. (i.e. _strURLParams.Copy( foo ) becomes pExec->_pstrURLParams->Copy( foo ) ).
For the case of a regular gateway execution by the server, these pointers refer to the HTTP_REQUEST object (as before). But when an ISAPI app needs to execute a gateway, the pointers point to local storage so as to not corrupt the HTTP_REQUEST object. */
#define EXEC_MAX_NESTED_LEVELS 64
#define EXEC_FLAG_CHILD 0x80000000
#define EXEC_FLAG_REDIRECT_ONLY HSE_EXEC_REDIRECT_ONLY
#define EXEC_FLAG_NO_HEADERS HSE_EXEC_NO_HEADERS
#define EXEC_FLAG_NO_ISA_WILDCARDS HSE_EXEC_NO_ISA_WILDCARDS
#define EXEC_FLAG_CUSTOM_ERROR HSE_EXEC_CUSTOM_ERROR
#define EXEC_FLAG_RUNNING_DAV 0x40000000 // Bypass script/exec access flag check
#define EXEC_FLAG_CGI_NPH 0x20000000 // NPH CGI execution
struct EXEC_DESCRIPTOR { STR * _pstrURL; STR * _pstrPhysicalPath; STR * _pstrUnmappedPhysicalPath; STR * _pstrGatewayImage; STR * _pstrPathInfo; STR * _pstrURLParams; DWORD * _pdwScriptMapFlags; GATEWAY_TYPE * _pGatewayType; HTTP_REQUEST * _pRequest; HANDLE _hChildEvent; BOOL _fMustWaitForChildEvent; WAM_REQUEST * _pParentWamRequest; DWORD _dwExecFlags; PW3_METADATA _pMetaData; PW3_METADATA _pPathInfoMetaData; PW3_URI_INFO _pPathInfoURIBlob; PW3_URI_INFO _pAppPathURIBlob;
EXEC_DESCRIPTOR( VOID ) {
//
// Certain members may need to be preserved across
// Exec.Reset(), so we init them only here, in constructor
//
_dwExecFlags = 0; _hChildEvent = NULL; _fMustWaitForChildEvent = FALSE;
_pPathInfoMetaData = NULL; _pPathInfoURIBlob = NULL; _pAppPathURIBlob = NULL;
Reset(); }
VOID Reset( VOID ); VOID ReleaseCacheInfo( VOID );
HANDLE QueryImpersonationHandle();
HANDLE QueryPrimaryHandle( HANDLE* phDel );
BOOL CreateChildEvent();
VOID SetMustWaitForChildEvent() { _fMustWaitForChildEvent = TRUE; }
VOID WaitForChildEvent();
VOID SetChildEvent();
BOOL ImpersonateUser() { if (g_fIsWindows95) { return TRUE; }
return ::ImpersonateLoggedOnUser( QueryImpersonationHandle() ); }
VOID RevertUser() { if (g_fIsWindows95) { return; }
::RevertToSelf(); }
PW3_METADATA QueryMetaData( VOID ) const { return _pMetaData; }
BOOL IsChild( VOID ) const { return ( _dwExecFlags & EXEC_FLAG_CHILD ); }
BOOL NoHeaders( VOID ) const { return ( _dwExecFlags & EXEC_FLAG_NO_HEADERS ); }
BOOL RedirectOnly( VOID ) const { return ( _dwExecFlags & EXEC_FLAG_REDIRECT_ONLY ); }
BOOL NoIsaWildcards( VOID ) const { return ( _dwExecFlags & EXEC_FLAG_NO_ISA_WILDCARDS ); }
BOOL IsRunningDAV( VOID) const { return ( _dwExecFlags & EXEC_FLAG_RUNNING_DAV ); }
BOOL IsCustomError( VOID ) const { return ( _dwExecFlags & EXEC_FLAG_CUSTOM_ERROR ) ; }
BOOL IsNPH( VOID ) const { return ( _dwExecFlags & EXEC_FLAG_CGI_NPH ) ; }
STR* QueryAppPath( VOID ); };
# endif // _EXECDESC_HXX_
/************************ End of File ***********************/
|