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.
 
 
 
 
 
 

220 lines
3.6 KiB

/*++
Copyright (c) 1998-2001 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_
#ifdef __cplusplus
extern "C" {
#endif
//
// A structure for associating app pool processes with
// connections for UlWaitForDisconnect
//
#define IS_VALID_DISCONNECT_OBJECT(pObject) \
(((pObject) != NULL) && ((pObject)->Signature == 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;
//
// Internal helper functions used in the module
//
VOID
UlpCancelDemandStart(
IN PDEVICE_OBJECT pDeviceObject,
IN PIRP pIrp
);
VOID
UlpCancelDemandStartWorker(
IN PUL_WORK_ITEM pWorkItem
);
VOID
UlpCancelHttpReceive(
IN PDEVICE_OBJECT pDeviceObject,
IN PIRP pIrp
);
VOID
UlpCancelHttpReceiveWorker(
IN PUL_WORK_ITEM pWorkItem
);
PIRP
UlpPopNewIrp(
IN PUL_APP_POOL_OBJECT pAppPool,
OUT PUL_APP_POOL_PROCESS * ppProcess
);
PIRP
UlpPopIrpFromProcess(
IN PUL_APP_POOL_PROCESS pProcess
);
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
);
// IRQL == PASSIVE_LEVEL
//
VOID
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
);
BOOLEAN
UlpIsRequestQueueEmpty(
IN PUL_APP_POOL_PROCESS pProcess
);
NTSTATUS
UlpSetAppPoolQueueLength(
IN PUL_APP_POOL_PROCESS pProcess,
IN LONG QueueLength
);
LONG
UlpGetAppPoolQueueLength(
IN PUL_APP_POOL_PROCESS pProcess
);
VOID
UlpCopyRequestToIrp(
IN PUL_INTERNAL_REQUEST pRequest,
IN PIRP pIrp
);
//
// functions to manipulate a UL_REQUEST_QUEUE
//
NTSTATUS
UlpInitRequestQueue(
PUL_REQUEST_QUEUE pQueue,
LONG MaxRequests
);
NTSTATUS
UlpSetMaxQueueLength(
PUL_REQUEST_QUEUE pQueue,
LONG MaxRequests
);
LONG
UlpQueryQueueLength(
PUL_REQUEST_QUEUE pQueue
);
NTSTATUS
UlpQueueRequest(
PUL_REQUEST_QUEUE pQueue,
PUL_INTERNAL_REQUEST pRequest
);
VOID
UlpRemoveRequest(
PUL_REQUEST_QUEUE pQueue,
PUL_INTERNAL_REQUEST pRequest
);
PUL_INTERNAL_REQUEST
UlpDequeueRequest(
PUL_REQUEST_QUEUE pQueue
);
NTSTATUS
UlpSetAppPoolState(
IN PUL_APP_POOL_PROCESS pProcess,
IN HTTP_ENABLED_STATE Enabled
);
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
);
#ifdef __cplusplus
}; // extern "C"
#endif
#endif // _APOOLP_H_