Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Unit ISAPIFilters;
- Interface
- Uses
- SysUtils, Windows;
- Const
- HTTP_FILTER_MAJOR = 4; { major version of this spec }
- HTTP_FILTER_MINOR = 0; { minor version of this spec }
- SF_MAX_USERNAME = 257;
- SF_MAX_PASSWORD = 257;
- SF_MAX_FILTER_DESC_LEN = 257;
- SF_MAX_AUTH_TYPE = 33;
- FIXED_BUF_SIZE = 257;
- //----------------------------------------------------------------
- //Status
- //----------------------------------------------------------------
- SF_STATUS_TYPE =$8000000;
- SF_STATUS_REQ_FINISHED =SF_STATUS_TYPE;
- SF_STATUS_REQ_FINISHED_KEEP_CONN =SF_STATUS_TYPE + 1;
- SF_STATUS_REQ_NEXT_NOTIFICATION =SF_STATUS_TYPE + 2;
- SF_STATUS_REQ_HANDLED_NOTIFICATION =SF_STATUS_TYPE + 3;
- SF_STATUS_REQ_ERROR =SF_STATUS_TYPE + 4;
- SF_STATUS_REQ_READ_NEXT =SF_STATUS_TYPE + 5;
- //----------------------------------------------------------------
- //Filter connection types
- //----------------------------------------------------------------
- SF_NOTIFY_SECURE_PORT =$00000001;//Secured port sessions
- SF_NOTIFY_NONSECURE_PORT =$00000002;//Nonsecured port sessions
- SF_NOTIFY_END_OF_NET_SESSION =$00000100;//End of connection
- SF_NOTIFY_LOG =$00000200;//Server log writes
- SF_NOTIFY_URL_MAP =$00001000;//URL mapping requests
- SF_NOTIFY_PREPROC_HEADERS =$00004000;//Post-preprocessing of the request headers
- SF_NOTIFY_AUTH_COMPLETE =$04000000;//Completion of authentication
- SF_NOTIFY_END_OF_REQUEST =$00000080;//Finished processing request
- SF_NOTIFY_SEND_RESPONSE =$00000040;//Before response headers are sent
- SF_NOTIFY_ACCESS_DENIED =$00000800;//Access denied
- SF_NOTIFY_EXTENSION_TRIGGER =$02000000;
- //----------------------------------------------------------------
- //Notifications for the filter to process
- //----------------------------------------------------------------
- SF_NOTIFY_READ_RAW_DATA =$00008000;//Incoming raw data and headers
- SF_NOTIFY_SEND_RAW_DATA =$00000400;//Outgoing raw data and headers
- SF_NOTIFY_AUTHENTICATION =$00002000;//Client authentication requests
- //----------------------------------------------------------------
- //Notification priority for the filter
- //----------------------------------------------------------------
- SF_NOTIFY_ORDER_LOW =$00020000;//High
- SF_NOTIFY_ORDER_MEDIUM =$00040000;//Medium
- SF_NOTIFY_ORDER_HIGH =$00080000;//Low
- SF_NOTIFY_ORDER_DEFAULT =SF_NOTIFY_ORDER_HIGH;
- SF_NOTIFY_ORDER_MASK =(SF_NOTIFY_ORDER_HIGH or SF_NOTIFY_ORDER_MEDIUM or SF_NOTIFY_ORDER_LOW);
- //----------------------------------------------------------------
- //Access Denied
- //----------------------------------------------------------------
- SF_DENIED_LOGON =$00000001;
- SF_DENIED_RESOURCE =$00000002;
- SF_DENIED_FILTER =$00000004;
- SF_DENIED_APPLICATION =$00000008;
- SF_DENIED_BY_CONFIG =$00010000;
- Type
- PVOID = Pointer;
- LPVOID = Pointer;
- PCardinal = ^Cardinal;
- SF_REQ_TYPE = (SF_REQ_SEND_RESPONSE_HEADER,
- SF_REQ_ADD_HEADERS_ON_DENIAL,
- SF_REQ_SET_NEXT_READ_SIZE,
- SF_REQ_SET_PROXY_INFO,
- SF_REQ_GET_CONNID,
- SF_REQ_SET_CERTIFICATE_INFO,
- SF_REQ_GET_PROPERTY,
- SF_REQ_NORMALIZE_URL,
- SF_REQ_DISABLE_NOTIFICATIONS);
- TFuncPlaceHolder = POINTER;
- THttpFiltCtx = Pointer;//Class;
- THTTP_FILTER_CONTEXT = Record
- cbSize: DWORD;
- Revision: DWORD;
- ServerContext: PVOID;
- ulReserved: DWORD;
- fIsSecurePort: BOOL;
- pFilterContext: PVOID;
- GetServerVariable: TFuncPlaceHolder;
- AddResponseHeaders: TFuncPlaceHolder;
- WriteClient: TFuncPlaceHolder;
- AllocMem: TFuncPlaceHolder;
- ServerSupportFunc: TFuncPlaceHolder;
- End;
- HTTP_FILTER_CONTEXT = THTTP_FILTER_CONTEXT;
- PHTTP_FILTER_CONTEXT = ^HTTP_FILTER_CONTEXT;
- TGetServerVariable = Function(Var pfc: THTTP_FILTER_CONTEXT;VariableName: PCHAR;Buffer: LPVOID;BuffSize: PCardinal): BOOL; stdcall;
- TAddResponseHeaders = Function(Var pfc: THTTP_FILTER_CONTEXT;Headers: PCHAR;Reserved: DWORD): BOOL; stdcall;
- TWriteClient = Function(Var pfc: THTTP_FILTER_CONTEXT;Buffer: LPVOID;dwBytes: LPDWORD;Reserved: DWORD): BOOL; stdcall;
- TAllocMem = Function(Var pfc: THTTP_FILTER_CONTEXT;cbSize: DWORD;dwReserved: DWORD): LPVOID ; stdcall;
- TServerSupportFunc = Function(Var pfc: THTTP_FILTER_CONTEXT;sfReq: SF_REQ_TYPE;pData: PVOID;ul1: DWORD;ul2: DWORD): BOOL; stdcall;
- TGetHeader = Function(Var pfc: THTTP_FILTER_CONTEXT;lpszName: PCHAR;lpvBuffer: LPVOID;lpdwSize: LPDWORD): BOOL; stdcall;
- TSetHeader = Function(Var pfc: THTTP_FILTER_CONTEXT;lpszName: PCHAR;lpszValue: PCHAR): BOOL; stdcall;
- TAddHeader = Function(Var pfc: THTTP_FILTER_CONTEXT;lpszName: PCHAR;lpszValue: PCHAR): BOOL; stdcall;
- TGetUserToken = Function(Var pfc: THTTP_FILTER_CONTEXT;phToken: PHANDLE): BOOL; stdcall;
- THTTP_FILTER_RAW_DATA = Record
- pvInData: PVOID;
- cbInData: DWORD;
- cbInBuffer: DWORD;
- dwReserved: DWORD;
- End;
- HTTP_FILTER_RAW_DATA = THTTP_FILTER_RAW_DATA;
- PHTTP_FILTER_RAW_DATA = ^HTTP_FILTER_RAW_DATA;
- THTTP_FILTER_PREPROC_HEADERS = Record
- GetHeader: TGetHeader;
- SetHeader: TSetHeader;
- AddHeader: TAddHeader;
- dwReserved: DWORD;
- End;
- HTTP_FILTER_PREPROC_HEADERS = THTTP_FILTER_PREPROC_HEADERS;
- PHTTP_FILTER_PREPROC_HEADERS = ^HTTP_FILTER_PREPROC_HEADERS;
- THTTP_FILTER_AUTHENT = Record
- pszUser: PCHAR;
- cbUserBuff: DWORD;
- pszPassword: PCHAR;
- cbPasswordBuff: DWORD;
- End;
- HTTP_FILTER_AUTHENT = THTTP_FILTER_AUTHENT;
- PHTTP_FILTER_AUTHENT = ^HTTP_FILTER_AUTHENT;
- THTTP_FILTER_URL_MAP = Record
- pszURL: PCHAR;
- pszPhysicalPath: PCHAR;
- cbPathBuff: DWORD;
- End;
- HTTP_FILTER_URL_MAP = THTTP_FILTER_URL_MAP;
- PHTTP_FILTER_URL_MAP = ^HTTP_FILTER_URL_MAP;
- THTTP_FILTER_LOG = Record
- pszClientHostName: PCHAR;
- pszClientUserName: PCHAR;
- pszServerName: PCHAR;
- pszOperation: PCHAR;
- pszTarget: PCHAR;
- pszParameters: PCHAR;
- dwHttpStatus: DWORD;
- dwWin32Status: DWORD;
- End;
- HTTP_FILTER_LOG = THTTP_FILTER_LOG;
- PHTTP_FILTER_LOG = ^HTTP_FILTER_LOG;
- THTTP_FILTER_VERSION = Record
- dwServerFilterVersion: DWORD;
- dwFilterVersion: DWORD;
- lpszFilterDesc: Array [0..(SF_MAX_FILTER_DESC_LEN-1)] of Char;
- dwFlags: DWORD;
- End;
- HTTP_FILTER_VERSION = THTTP_FILTER_VERSION;
- PHTTP_FILTER_VERSION = ^HTTP_FILTER_VERSION;
- THTTP_FILTER_ACCESS_DENIED = Record
- pszURL: PCHAR;
- pszPhysicalPath: PCHAR;
- dwReason: DWORD;
- End;
- HTTP_FILTER_ACCESS_DENIED = THTTP_FILTER_ACCESS_DENIED;
- PHTTP_FILTER_ACCESS_DENIED = ^HTTP_FILTER_ACCESS_DENIED;
- THTTP_FILTER_SEND_RESPONSE = Record
- GetHeader: TGetHeader;
- SetHeader: TSetHeader;
- AddHeader: TAddHeader;
- HttpStatus: DWORD;
- dwReserved: DWORD;
- End;
- HTTP_FILTER_SEND_RESPONSE = THTTP_FILTER_SEND_RESPONSE;
- PHTTP_FILTER_SEND_RESPONSE = ^HTTP_FILTER_SEND_RESPONSE;
- THTTP_FILTER_AUTH_COMPLETE_INFO = Record
- GetHeader: TGetHeader;
- SetHeader: TSetHeader;
- AddHeader: TAddHeader;
- GetUserToken: TGetUserToken;
- HttpStatus: DWORD;
- fResetAuth: BOOL;
- dwReserved: DWORD;
- End;
- HTTP_FILTER_AUTH_COMPLETE_INFO = THTTP_FILTER_AUTH_COMPLETE_INFO;
- PHTTP_FILTER_AUTH_COMPLETE_INFO = ^HTTP_FILTER_AUTH_COMPLETE_INFO;
- THTTP_FILTER_EXTENSION_TRIGGER_INFO = Record
- dwTriggerType: DWORD;
- pvTriggerContext: PVOID;
- End;
- HTTP_FILTER_EXTENSION_TRIGGER_INFO = THTTP_FILTER_EXTENSION_TRIGGER_INFO;
- PHTTP_FILTER_EXTENSION_TRIGGER_INFO = ^HTTP_FILTER_EXTENSION_TRIGGER_INFO;
- TReadRawDataEvent = Procedure (Sender: TObject;pfcObject: THttpFiltCtx;Var RawDataStruct: THTTP_FILTER_RAW_DATA;Var RetVal: DWORD) of object;
- TPreprocHeadersEvent = Procedure (Sender: TObject;pfcObject: THttpFiltCtx;Var HeadersStruct: THTTP_FILTER_PREPROC_HEADERS;Var RetVal: DWORD) of object;
- TAuthenticationEvent = Procedure (Sender: TObject;pfcObject: THttpFiltCtx;Var AuthentStruct: THTTP_FILTER_AUTHENT;Var RetVal: DWORD) of object;
- TUrlMapEvent = Procedure(Sender: TObject;pfcObject: THttpFiltCtx;Var UrlMapStruct: THTTP_FILTER_URL_MAP;Var RetVal: DWORD) of object;
- TSendRawDataEvent = Procedure(Sender: TObject;pfcObject: THttpFiltCtx;Var RawDataStruct: THTTP_FILTER_RAW_DATA;Var RetVal: DWORD) of object;
- TSendResponseEvent = Procedure(Sender: TObject;pfcObject: THttpFiltCtx;Var RawDataStruct: THTTP_FILTER_SEND_RESPONSE;Var RetVal: DWORD) of object;
- TLogEvent = Procedure(Sender: TObject;pfcObject: THttpFiltCtx;Var LogStruct: THTTP_FILTER_LOG;Var RetVal: DWORD) of object;
- TEndOfNetSessionEvent = Procedure(Sender: TObject;pfcObject: THttpFiltCtx;Var RetVal: DWORD) of object;
- TEndOfRequestEvent = Procedure(Sender: TObject;pfcObject: THttpFiltCtx;Var RetVal: DWORD) of object;
- TAccessDeniedEvent = Procedure(Sender: TObject;pfcObject: THttpFiltCtx;Var AccessDeniedStruct: THTTP_FILTER_ACCESS_DENIED;Var RetVal: DWORD) of object;
- TAuthCompleteEvent = Procedure(Sender: TObject;pfcObject: THttpFiltCtx;Var RawDataStruct: THTTP_FILTER_AUTH_COMPLETE_INFO;Var RetVal: DWORD) of object;
- TExtensionTriggerEvent = Procedure(Sender: TObject;pfcObject: THttpFiltCtx;Var RawDataStruct: THTTP_FILTER_EXTENSION_TRIGGER_INFO;Var RetVal: DWORD) of object;
- TUnknownNotificationEvent = Procedure(Sender: TObject;pfcObject: THttpFiltCtx;dwNotificationType: DWORD;pvNotification: LPVOID;Var RetVal: DWORD) of object;
- TGetFilterVersionEvent = Procedure(Sender: TObject;Var Version: THTTP_FILTER_VERSION;Var RetVal: BOOL) of object;
- TTerminateFilterEvent = Procedure(Sender: Tobject;dwFlags: DWORD;RetVal: BOOL) of object;
- TDestroyEvent = Procedure(Sender: TObject) of object;
- TExceptionEvent = Procedure(Sender: TObject;E: Exception) of object;
- Procedure LogInfo(aStr:String);
- Implementation
- Uses
- Registry;
- Var
- LogActive: Boolean = False;
- LogFileName: String = '';
- Procedure LogInfo(aStr: String);
- Var
- OutFile : TextFile;
- Begin
- If LogActive Then
- Begin
- AssignFile (OutFile, LogFileName);
- If FileExists (LogFileName) Then
- Append(OutFile)
- Else
- Rewrite(OutFile);
- Writeln(OutFile, aStr);
- CloseFile(OutFile);
- End;
- End;
- Initialization
- Try
- With TRegistry.Create Do
- Try
- RootKey:=HKey_Local_Machine;
- If OpenKey('Software\GUI\URLFilter', True) Then
- Begin
- If ValueExists('Logfile') Then
- Begin
- LogFileName:=ReadString('Logfile');
- LogFileName:=Trim(LogFileName);
- If Length(LogFileName) > 0 Then
- LogActive:=True
- Else
- LogActive:=False;
- End;
- End;
- Finally
- Free
- End;
- Except
- LogActive := False
- End;
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement