#ifndef _STREAMFILT_H_ #define _STREAMFILT_H_ #include // // Structure containing friendly local/remote information // struct _RAW_STREAM_INFO; typedef HRESULT (*PFN_SEND_DATA_BACK) ( PVOID pvStreamContext, _RAW_STREAM_INFO * pRawStreamInfo ); typedef struct _CONNECTION_INFO { USHORT LocalPort; ULONG LocalAddress; USHORT RemotePort; ULONG RemoteAddress; BOOL fIsSecure; HTTP_RAW_CONNECTION_ID RawConnectionId; PFN_SEND_DATA_BACK pfnSendDataBack; PVOID pvStreamContext; ULONG ServerNameLength; PWSTR pServerName; } CONNECTION_INFO, *PCONNECTION_INFO; // // Structure used to access/alter raw data stream (read/write) // typedef struct _RAW_STREAM_INFO { PBYTE pbBuffer; DWORD cbData; DWORD cbBuffer; } RAW_STREAM_INFO, *PRAW_STREAM_INFO; // // Called to handle read raw notifications // typedef HRESULT (*PFN_PROCESS_RAW_READ) ( RAW_STREAM_INFO * pRawStreamInfo, PVOID pvContext, BOOL * pfReadMore, BOOL * pfComplete, DWORD * pcbNextReadSize ); // // Called to handle write raw notifications // typedef HRESULT (*PFN_PROCESS_RAW_WRITE) ( RAW_STREAM_INFO * pRawStreamInfo, PVOID pvContext, BOOL * pfComplete ); // // Called when a connection goes away // typedef VOID (*PFN_PROCESS_CONNECTION_CLOSE) ( PVOID pvContext ); // // Called when a connection is created // typedef HRESULT (*PFN_PROCESS_NEW_CONNECTION) ( CONNECTION_INFO * pConnectionInfo, PVOID * ppvContext ); // // Configure the stream filter (SFWP.EXE config will be different than // INETINFO.EXE config) // typedef struct _STREAM_FILTER_CONFIG { BOOL fSslOnly; PFN_PROCESS_RAW_READ pfnRawRead; PFN_PROCESS_RAW_WRITE pfnRawWrite; PFN_PROCESS_CONNECTION_CLOSE pfnConnectionClose; PFN_PROCESS_NEW_CONNECTION pfnNewConnection; } STREAM_FILTER_CONFIG, *PSTREAM_FILTER_CONFIG; HRESULT StreamFilterInitialize( STREAM_FILTER_CONFIG * pStreamFilterConfig ); HRESULT StreamFilterStart( VOID ); HRESULT StreamFilterStop( VOID ); VOID StreamFilterTerminate( VOID ); #endif