|
|
/*++
Copyright (c) 1998-2002 Microsoft Corporation
Module Name:
apoolp.h
Abstract:
The private definitions of app pool module.
Author:
Paul McDaniel (paulmcd) 28-Jan-1999
Revision History:
--*/
#ifndef _APOOLP_H_
#define _APOOLP_H_
//
// A structure for associating app pool processes with
// connections for UlWaitForDisconnect
//
#define IS_VALID_DISCONNECT_OBJECT(pObject) \
HAS_VALID_SIGNATURE(pObject, UL_DISCONNECT_OBJECT_POOL_TAG)
typedef struct _UL_DISCONNECT_OBJECT { ULONG Signature; // UL_DISCONNECT_OBJECT_POOL_TAG
//
// Lists for processes and connections
//
UL_NOTIFY_ENTRY ProcessEntry; UL_NOTIFY_ENTRY ConnectionEntry;
//
// The WaitForDisconnect IRP
//
PIRP pIrp;
} UL_DISCONNECT_OBJECT, *PUL_DISCONNECT_OBJECT;
//
// The information will be logged when an app pool process
// get detached while holding on to outstanding connection(s)
// This happens when a worker process crashes. And the error
// log file provides a way to track down the faulty request.
//
#define ERROR_LOG_INFO_FOR_APP_POOL_DETACH "Connection_Abandoned_By_AppPool"
#define ERROR_LOG_INFO_FOR_APP_POOL_DETACH_SIZE \
(sizeof(ERROR_LOG_INFO_FOR_APP_POOL_DETACH)-sizeof(CHAR))
//
// Internal helper functions used in the module
//
VOID UlpCancelDemandStart( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp );
VOID UlpCancelHttpReceive( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp );
PIRP UlpPopNewIrp( IN PUL_APP_POOL_OBJECT pAppPool, IN PUL_INTERNAL_REQUEST pRequest, OUT PUL_APP_POOL_PROCESS * ppProcess );
PIRP UlpPopIrpFromProcess( IN PUL_APP_POOL_PROCESS pProcess, IN PUL_INTERNAL_REQUEST pRequest );
BOOLEAN UlpIsProcessInAppPool( IN PUL_APP_POOL_PROCESS pProcess, IN PUL_APP_POOL_OBJECT pAppPool );
NTSTATUS UlpQueueUnboundRequest( IN PUL_APP_POOL_OBJECT pAppPool, IN PUL_INTERNAL_REQUEST pRequest );
NTSTATUS UlpQueuePendingRequest( IN PUL_APP_POOL_PROCESS pProcess, IN PUL_INTERNAL_REQUEST pRequest );
VOID UlpUnbindQueuedRequests( IN PUL_APP_POOL_PROCESS pProcess );
VOID UlpRedeliverRequestWorker( IN PUL_WORK_ITEM pWorkItem );
NTSTATUS UlpSetAppPoolQueueLength( IN PUL_APP_POOL_PROCESS pProcess, IN ULONG QueueLength );
ULONG UlpCopyEntityBodyToBuffer( IN PUL_INTERNAL_REQUEST pRequest, IN PUCHAR pEntityBody, IN ULONG EntityBodyLength, OUT PULONG pFlags );
NTSTATUS UlpQueueRequest( IN PUL_APP_POOL_OBJECT pAppPool, IN PLIST_ENTRY pQueueList, IN PUL_INTERNAL_REQUEST pRequest );
VOID UlpRemoveRequest( IN PUL_APP_POOL_OBJECT pAppPool, IN PUL_INTERNAL_REQUEST pRequest );
PUL_INTERNAL_REQUEST UlpDequeueRequest( IN PUL_APP_POOL_OBJECT pAppPool, IN PLIST_ENTRY pQueueList );
UL_HTTP_ERROR UlpConvertAppPoolEnabledStateToErrorCode( IN HTTP_APP_POOL_ENABLED_STATE Enabled );
NTSTATUS UlpSetAppPoolState( IN PUL_APP_POOL_PROCESS pProcess, IN HTTP_APP_POOL_ENABLED_STATE Enabled );
NTSTATUS UlpSetAppPoolLoadBalancerCapability( IN PUL_APP_POOL_PROCESS pProcess, IN HTTP_LOAD_BALANCER_CAPABILITIES LoadBalancerCapability );
VOID UlpCancelWaitForDisconnect( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp );
VOID UlpCancelWaitForDisconnectWorker( IN PUL_WORK_ITEM pWorkItem );
BOOLEAN UlpNotifyCompleteWaitForDisconnect( IN PUL_NOTIFY_ENTRY pEntry, IN PVOID pHost, IN PVOID pv );
PUL_DISCONNECT_OBJECT UlpCreateDisconnectObject( IN PIRP pIrp );
VOID UlpFreeDisconnectObject( IN PUL_DISCONNECT_OBJECT pObject );
VOID UlpSetAppPoolControlChannelHelper( IN PUL_APP_POOL_PROCESS pProcess, IN PUL_CONTROL_CHANNEL pControlChannel );
#endif // _APOOLP_H_
|