Leaked source code of windows server 2003
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.
 
 
 
 
 
 

348 lines
7.9 KiB

/*++
Copyright (c) 2000-2002 Microsoft Corporation
Module Name:
filter.h
Abstract:
This module contains public declarations for the UL filter channel.
Author:
Michael Courage (mcourage) 17-Mar-2000
Revision History:
--*/
#ifndef _FILTER_H_
#define _FILTER_H_
//
// Constants.
//
//
// Filter channel name comparision macros
//
#define UL_MAX_FILTER_NAME_LENGTH \
max(HTTP_SSL_SERVER_FILTER_CHANNEL_NAME_LENGTH, \
HTTP_SSL_CLIENT_FILTER_CHANNEL_NAME_LENGTH)
#define IsServerFilterChannel(Name, NameLength) \
((NameLength) == HTTP_SSL_SERVER_FILTER_CHANNEL_NAME_LENGTH && \
_wcsnicmp( \
(Name), \
HTTP_SSL_SERVER_FILTER_CHANNEL_NAME, \
HTTP_SSL_SERVER_FILTER_CHANNEL_NAME_LENGTH/sizeof(WCHAR)) == 0)
#define IsClientFilterChannel(Name, NameLength) \
((NameLength) == HTTP_SSL_CLIENT_FILTER_CHANNEL_NAME_LENGTH && \
_wcsnicmp( \
(Name), \
HTTP_SSL_CLIENT_FILTER_CHANNEL_NAME, \
HTTP_SSL_CLIENT_FILTER_CHANNEL_NAME_LENGTH/sizeof(WCHAR)) == 0)
//
// Forwards.
//
typedef struct _UL_FILTER_WRITE_QUEUE *PUL_FILTER_WRITE_QUEUE;
typedef struct _UL_APP_POOL_PROCESS *PUL_APP_POOL_PROCESS;
//
// The filter channel types.
//
typedef struct _UL_FILTER_CHANNEL *PUL_FILTER_CHANNEL;
typedef struct _UL_FILTER_PROCESS *PUL_FILTER_PROCESS;
#ifndef offsetof
#define offsetof(s,m) (size_t)&(((s *)0)->m)
#endif
//
// Initialize/terminate functions.
//
NTSTATUS
UlInitializeFilterChannel(
PUL_CONFIG pConfig
);
VOID
UlTerminateFilterChannel(
VOID
);
//
// Open/close a new filter channel.
//
NTSTATUS
UlAttachFilterProcess(
IN PWCHAR pName,
IN USHORT NameLength,
IN BOOLEAN Create,
IN PACCESS_STATE pAccessState,
IN ACCESS_MASK DesiredAccess,
IN KPROCESSOR_MODE RequestorMode,
OUT PUL_FILTER_PROCESS *ppFilterProcess
);
NTSTATUS
UlDetachFilterProcess(
IN PUL_FILTER_PROCESS pFilterProcess
);
VOID
UlShutdownFilterProcess(
IN PUL_FILTER_PROCESS pFilterProcess
);
VOID
UlCloseFilterProcess(
IN PUL_FILTER_PROCESS pFilterProcess
);
//
// Filter channel I/O operations.
//
NTSTATUS
UlFilterAccept(
IN PUL_FILTER_PROCESS pFilterProcess,
IN PIRP pIrp
);
NTSTATUS
UlFilterClose(
IN PUL_FILTER_PROCESS pFilterProcess,
IN PUX_FILTER_CONNECTION pConnection,
IN PIRP pIrp
);
NTSTATUS
UlFilterRawWriteAndAppRead(
IN PIRP pIrp,
IN PIO_STACK_LOCATION pIrpSp
);
NTSTATUS
UlFilterAppWriteAndRawRead(
IN PIRP pIrp,
IN PIO_STACK_LOCATION pIrpSp
);
NTSTATUS
UlFilterRawRead(
IN PUL_FILTER_PROCESS pFilterProcess,
IN PUX_FILTER_CONNECTION pConnection,
IN PIRP pIrp
);
NTSTATUS
UlFilterRawWrite(
IN PUL_FILTER_PROCESS pFilterProcess,
IN PUX_FILTER_CONNECTION pConnection,
IN ULONG BufferLength,
IN PIRP pIrp
);
NTSTATUS
UlFilterAppRead(
IN PUL_FILTER_PROCESS pFilterProcess,
IN PUX_FILTER_CONNECTION pConnection,
IN PIRP pIrp
);
NTSTATUS
UlFilterAppWrite(
IN PUL_FILTER_PROCESS pFilterProcess,
IN PUX_FILTER_CONNECTION pConnection,
IN PIRP pIrp
);
//
// SSL related app pool operations.
//
NTSTATUS
UlReceiveClientCert(
PUL_APP_POOL_PROCESS pProcess,
PUX_FILTER_CONNECTION pConnection,
ULONG Flags,
PIRP pIrp
);
//
// Filter channel reference counting.
//
VOID
UlReferenceFilterChannel(
IN PUL_FILTER_CHANNEL pFilterChannel
REFERENCE_DEBUG_FORMAL_PARAMS
);
#define REFERENCE_FILTER_CHANNEL( pFilt ) \
UlReferenceFilterChannel( \
(pFilt) \
REFERENCE_DEBUG_ACTUAL_PARAMS \
)
VOID
UlDereferenceFilterChannel(
IN PUL_FILTER_CHANNEL pFilterChannel
REFERENCE_DEBUG_FORMAL_PARAMS
);
#define DEREFERENCE_FILTER_CHANNEL( pFilt ) \
UlDereferenceFilterChannel( \
(pFilt) \
REFERENCE_DEBUG_ACTUAL_PARAMS \
)
//
// Interface for ultdi.
//
NTSTATUS
UlFilterReceiveHandler(
IN PUX_FILTER_CONNECTION pConnection,
IN PVOID pBuffer,
IN ULONG IndicatedLength,
IN ULONG UnreceivedLength,
OUT PULONG pTakenLength
);
NTSTATUS
UlFilterSendHandler(
IN PUX_FILTER_CONNECTION pConnection,
IN PMDL pMdlChain,
IN ULONG Length,
IN PUL_IRP_CONTEXT pIrpContext
);
NTSTATUS
UlFilterReadHandler(
IN PUX_FILTER_CONNECTION pConnection,
OUT PUCHAR pBuffer,
IN ULONG BufferLength,
IN PUL_COMPLETION_ROUTINE pCompletionRoutine,
IN PVOID pCompletionContext
);
NTSTATUS
UlFilterCloseHandler(
IN PUX_FILTER_CONNECTION pConnection,
IN PUL_COMPLETION_ROUTINE pCompletionRoutine,
IN PVOID pCompletionContext
);
NTSTATUS
UlFilterDisconnectHandler(
IN PUX_FILTER_CONNECTION pConnection
);
VOID
UlUnbindConnectionFromFilter(
IN PUX_FILTER_CONNECTION pConnection
);
VOID
UlDestroyFilterConnection(
IN PUX_FILTER_CONNECTION pConnection
);
VOID
UlFilterDrainIndicatedData(
IN PUL_WORK_ITEM pWorkItem
);
//
// Interface for apool.
//
NTSTATUS
UlGetSslInfo(
IN PUX_FILTER_CONNECTION pConnection,
IN ULONG BufferSize,
IN PUCHAR pUserBuffer OPTIONAL,
IN PEPROCESS pProcess OPTIONAL,
OUT PUCHAR pBuffer OPTIONAL,
OUT PHANDLE pMappedToken OPTIONAL,
OUT PULONG pBytesCopied OPTIONAL
);
//
// Utility.
//
PUX_FILTER_CONNECTION
UlGetRawConnectionFromId(
IN HTTP_RAW_CONNECTION_ID ConnectionId
);
VOID
UxReferenceConnection(
IN PVOID pObject
REFERENCE_DEBUG_FORMAL_PARAMS
);
NTSTATUS
UxInitializeFilterConnection(
IN PUX_FILTER_CONNECTION pConnection,
IN PUL_FILTER_CHANNEL pChannel,
IN BOOLEAN Secure,
IN PUL_OPAQUE_ID_OBJECT_REFERENCE pfnReferenceFunction,
IN PUL_OPAQUE_ID_OBJECT_REFERENCE pfnDereferenceFunction,
IN PUX_FILTER_CLOSE_CONNECTION pfnConnectionClose,
IN PUX_FILTER_SEND_RAW_DATA pfnRawSend,
IN PUX_FILTER_RECEIVE_RAW_DATA pfnRawReceive,
IN PUL_DATA_RECEIVE pfnDataReceive,
IN PUX_FILTER_COMPUTE_RAW_CONNECTION_LENGTH pfnRawConnLength,
IN PUX_FILTER_GENERATE_RAW_CONNECTION_INFO pfnGenerateRawConnInfo,
IN PUX_FILTER_SERVER_CERT_INDICATE pfnServerCertIndicate,
IN PUX_FILTER_DISCONNECT_NOTIFICATION pfnDisconnectNotification,
IN PVOID pListenContext,
IN PVOID pConnectionContext
);
NTSTATUS
UlDeliverConnectionToFilter(
IN PUX_FILTER_CONNECTION pConnection,
IN PVOID pBuffer,
IN ULONG IndicatedLength,
OUT PULONG pTakenLength
);
PUL_FILTER_CHANNEL
UxRetrieveServerFilterChannel(
IN BOOLEAN Secure
);
PUL_FILTER_CHANNEL
UxRetrieveClientFilterChannel(
PEPROCESS pProcess
);
VOID
UxSetFilterOnlySsl(
BOOLEAN bFilterOnlySsl
);
BOOLEAN
UlValidateFilterChannel(
IN PUL_FILTER_CHANNEL pChannel,
IN BOOLEAN SecureConnection
);
#endif // _FILTER_H_