Advertisement
Guest User

Untitled

a guest
May 9th, 2017
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 10.96 KB | None | 0 0
  1. Unit ISAPIFilters;
  2.  
  3. Interface
  4.  
  5. Uses
  6.   SysUtils, Windows;
  7.  
  8. Const
  9.   HTTP_FILTER_MAJOR          = 4; { major version of this spec }
  10.   HTTP_FILTER_MINOR          = 0; { minor version of this spec }
  11.   SF_MAX_USERNAME            = 257;
  12.   SF_MAX_PASSWORD            = 257;
  13.   SF_MAX_FILTER_DESC_LEN     = 257;
  14.   SF_MAX_AUTH_TYPE           = 33;
  15.   FIXED_BUF_SIZE             = 257;
  16.  
  17. //----------------------------------------------------------------
  18. //Status
  19. //----------------------------------------------------------------
  20.   SF_STATUS_TYPE                     =$8000000;
  21.   SF_STATUS_REQ_FINISHED             =SF_STATUS_TYPE;
  22.   SF_STATUS_REQ_FINISHED_KEEP_CONN   =SF_STATUS_TYPE + 1;
  23.   SF_STATUS_REQ_NEXT_NOTIFICATION    =SF_STATUS_TYPE + 2;
  24.   SF_STATUS_REQ_HANDLED_NOTIFICATION =SF_STATUS_TYPE + 3;
  25.   SF_STATUS_REQ_ERROR                =SF_STATUS_TYPE + 4;
  26.   SF_STATUS_REQ_READ_NEXT            =SF_STATUS_TYPE + 5;
  27.  
  28. //----------------------------------------------------------------
  29. //Filter connection types
  30. //----------------------------------------------------------------
  31.   SF_NOTIFY_SECURE_PORT              =$00000001;//Secured port sessions
  32.   SF_NOTIFY_NONSECURE_PORT           =$00000002;//Nonsecured port sessions
  33.   SF_NOTIFY_END_OF_NET_SESSION       =$00000100;//End of connection
  34.   SF_NOTIFY_LOG                      =$00000200;//Server log writes
  35.   SF_NOTIFY_URL_MAP                  =$00001000;//URL mapping requests
  36.   SF_NOTIFY_PREPROC_HEADERS          =$00004000;//Post-preprocessing of the request headers
  37.   SF_NOTIFY_AUTH_COMPLETE            =$04000000;//Completion of authentication
  38.   SF_NOTIFY_END_OF_REQUEST           =$00000080;//Finished processing request
  39.   SF_NOTIFY_SEND_RESPONSE            =$00000040;//Before response headers are sent
  40.   SF_NOTIFY_ACCESS_DENIED            =$00000800;//Access denied
  41.   SF_NOTIFY_EXTENSION_TRIGGER        =$02000000;
  42.  
  43. //----------------------------------------------------------------
  44. //Notifications for the filter to process
  45. //----------------------------------------------------------------
  46.   SF_NOTIFY_READ_RAW_DATA            =$00008000;//Incoming raw data and headers
  47.   SF_NOTIFY_SEND_RAW_DATA            =$00000400;//Outgoing raw data and headers
  48.   SF_NOTIFY_AUTHENTICATION           =$00002000;//Client authentication requests
  49.  
  50. //----------------------------------------------------------------
  51. //Notification priority for the filter
  52. //----------------------------------------------------------------
  53.   SF_NOTIFY_ORDER_LOW                =$00020000;//High
  54.   SF_NOTIFY_ORDER_MEDIUM             =$00040000;//Medium
  55.   SF_NOTIFY_ORDER_HIGH               =$00080000;//Low
  56.   SF_NOTIFY_ORDER_DEFAULT            =SF_NOTIFY_ORDER_HIGH;
  57.   SF_NOTIFY_ORDER_MASK               =(SF_NOTIFY_ORDER_HIGH or SF_NOTIFY_ORDER_MEDIUM or SF_NOTIFY_ORDER_LOW);
  58.  
  59. //----------------------------------------------------------------
  60. //Access Denied
  61. //----------------------------------------------------------------
  62.   SF_DENIED_LOGON       =$00000001;
  63.   SF_DENIED_RESOURCE    =$00000002;
  64.   SF_DENIED_FILTER      =$00000004;
  65.   SF_DENIED_APPLICATION =$00000008;
  66.   SF_DENIED_BY_CONFIG   =$00010000;
  67.  
  68. Type
  69.   PVOID = Pointer;
  70.   LPVOID = Pointer;
  71.   PCardinal = ^Cardinal;
  72.  
  73.   SF_REQ_TYPE = (SF_REQ_SEND_RESPONSE_HEADER,
  74.                  SF_REQ_ADD_HEADERS_ON_DENIAL,
  75.                  SF_REQ_SET_NEXT_READ_SIZE,
  76.                  SF_REQ_SET_PROXY_INFO,
  77.                  SF_REQ_GET_CONNID,
  78.                  SF_REQ_SET_CERTIFICATE_INFO,
  79.                  SF_REQ_GET_PROPERTY,
  80.                  SF_REQ_NORMALIZE_URL,
  81.                  SF_REQ_DISABLE_NOTIFICATIONS);
  82.  
  83.   TFuncPlaceHolder = POINTER;
  84.  
  85.   THttpFiltCtx = Pointer;//Class;
  86.  
  87.   THTTP_FILTER_CONTEXT = Record
  88.     cbSize: DWORD;
  89.     Revision: DWORD;
  90.     ServerContext: PVOID;
  91.     ulReserved: DWORD;
  92.     fIsSecurePort: BOOL;
  93.     pFilterContext: PVOID;
  94.     GetServerVariable: TFuncPlaceHolder;
  95.     AddResponseHeaders: TFuncPlaceHolder;
  96.     WriteClient: TFuncPlaceHolder;
  97.     AllocMem: TFuncPlaceHolder;
  98.     ServerSupportFunc: TFuncPlaceHolder;
  99.   End;
  100.   HTTP_FILTER_CONTEXT = THTTP_FILTER_CONTEXT;
  101.   PHTTP_FILTER_CONTEXT = ^HTTP_FILTER_CONTEXT;
  102.  
  103.   TGetServerVariable = Function(Var pfc: THTTP_FILTER_CONTEXT;VariableName: PCHAR;Buffer: LPVOID;BuffSize: PCardinal): BOOL; stdcall;
  104.   TAddResponseHeaders = Function(Var pfc: THTTP_FILTER_CONTEXT;Headers: PCHAR;Reserved: DWORD): BOOL; stdcall;
  105.   TWriteClient = Function(Var pfc: THTTP_FILTER_CONTEXT;Buffer: LPVOID;dwBytes: LPDWORD;Reserved: DWORD): BOOL; stdcall;
  106.   TAllocMem = Function(Var pfc: THTTP_FILTER_CONTEXT;cbSize: DWORD;dwReserved: DWORD): LPVOID ; stdcall;
  107.   TServerSupportFunc = Function(Var pfc: THTTP_FILTER_CONTEXT;sfReq: SF_REQ_TYPE;pData: PVOID;ul1: DWORD;ul2: DWORD): BOOL; stdcall;
  108.   TGetHeader = Function(Var pfc: THTTP_FILTER_CONTEXT;lpszName: PCHAR;lpvBuffer: LPVOID;lpdwSize: LPDWORD): BOOL; stdcall;
  109.   TSetHeader = Function(Var pfc: THTTP_FILTER_CONTEXT;lpszName: PCHAR;lpszValue: PCHAR): BOOL; stdcall;
  110.   TAddHeader = Function(Var pfc: THTTP_FILTER_CONTEXT;lpszName: PCHAR;lpszValue: PCHAR): BOOL; stdcall;
  111.   TGetUserToken = Function(Var pfc: THTTP_FILTER_CONTEXT;phToken: PHANDLE): BOOL; stdcall;
  112.  
  113.   THTTP_FILTER_RAW_DATA = Record
  114.     pvInData: PVOID;
  115.     cbInData: DWORD;
  116.     cbInBuffer: DWORD;
  117.     dwReserved: DWORD;
  118.   End;
  119.   HTTP_FILTER_RAW_DATA  = THTTP_FILTER_RAW_DATA;
  120.   PHTTP_FILTER_RAW_DATA = ^HTTP_FILTER_RAW_DATA;
  121.  
  122.   THTTP_FILTER_PREPROC_HEADERS = Record
  123.     GetHeader: TGetHeader;
  124.     SetHeader: TSetHeader;
  125.     AddHeader: TAddHeader;
  126.     dwReserved: DWORD;
  127.   End;
  128.   HTTP_FILTER_PREPROC_HEADERS  = THTTP_FILTER_PREPROC_HEADERS;
  129.   PHTTP_FILTER_PREPROC_HEADERS = ^HTTP_FILTER_PREPROC_HEADERS;
  130.  
  131.   THTTP_FILTER_AUTHENT = Record
  132.     pszUser: PCHAR;
  133.     cbUserBuff: DWORD;
  134.     pszPassword: PCHAR;
  135.     cbPasswordBuff: DWORD;
  136.   End;
  137.   HTTP_FILTER_AUTHENT  = THTTP_FILTER_AUTHENT;
  138.   PHTTP_FILTER_AUTHENT = ^HTTP_FILTER_AUTHENT;
  139.  
  140.   THTTP_FILTER_URL_MAP = Record
  141.     pszURL: PCHAR;
  142.     pszPhysicalPath: PCHAR;
  143.     cbPathBuff: DWORD;
  144.   End;
  145.   HTTP_FILTER_URL_MAP  = THTTP_FILTER_URL_MAP;
  146.   PHTTP_FILTER_URL_MAP = ^HTTP_FILTER_URL_MAP;
  147.  
  148.   THTTP_FILTER_LOG = Record
  149.     pszClientHostName: PCHAR;
  150.     pszClientUserName: PCHAR;
  151.     pszServerName: PCHAR;
  152.     pszOperation: PCHAR;
  153.     pszTarget: PCHAR;
  154.     pszParameters: PCHAR;
  155.     dwHttpStatus: DWORD;
  156.     dwWin32Status: DWORD;
  157.   End;
  158.   HTTP_FILTER_LOG  = THTTP_FILTER_LOG;
  159.   PHTTP_FILTER_LOG = ^HTTP_FILTER_LOG;
  160.  
  161.   THTTP_FILTER_VERSION = Record
  162.     dwServerFilterVersion: DWORD;
  163.     dwFilterVersion: DWORD;
  164.     lpszFilterDesc: Array [0..(SF_MAX_FILTER_DESC_LEN-1)] of Char;
  165.     dwFlags: DWORD;
  166.   End;
  167.   HTTP_FILTER_VERSION = THTTP_FILTER_VERSION;
  168.   PHTTP_FILTER_VERSION = ^HTTP_FILTER_VERSION;
  169.  
  170.   THTTP_FILTER_ACCESS_DENIED = Record
  171.     pszURL: PCHAR;
  172.     pszPhysicalPath: PCHAR;
  173.     dwReason: DWORD;
  174.   End;
  175.   HTTP_FILTER_ACCESS_DENIED = THTTP_FILTER_ACCESS_DENIED;
  176.   PHTTP_FILTER_ACCESS_DENIED = ^HTTP_FILTER_ACCESS_DENIED;
  177.  
  178.   THTTP_FILTER_SEND_RESPONSE = Record
  179.     GetHeader: TGetHeader;
  180.     SetHeader: TSetHeader;
  181.     AddHeader: TAddHeader;
  182.     HttpStatus: DWORD;
  183.     dwReserved: DWORD;
  184.   End;
  185.   HTTP_FILTER_SEND_RESPONSE = THTTP_FILTER_SEND_RESPONSE;
  186.   PHTTP_FILTER_SEND_RESPONSE = ^HTTP_FILTER_SEND_RESPONSE;
  187.  
  188.   THTTP_FILTER_AUTH_COMPLETE_INFO = Record
  189.     GetHeader: TGetHeader;
  190.     SetHeader: TSetHeader;
  191.     AddHeader: TAddHeader;
  192.     GetUserToken: TGetUserToken;
  193.     HttpStatus: DWORD;
  194.     fResetAuth: BOOL;
  195.     dwReserved: DWORD;
  196.   End;
  197.   HTTP_FILTER_AUTH_COMPLETE_INFO = THTTP_FILTER_AUTH_COMPLETE_INFO;
  198.   PHTTP_FILTER_AUTH_COMPLETE_INFO = ^HTTP_FILTER_AUTH_COMPLETE_INFO;
  199.  
  200.   THTTP_FILTER_EXTENSION_TRIGGER_INFO = Record
  201.     dwTriggerType: DWORD;
  202.     pvTriggerContext: PVOID;
  203.   End;
  204.   HTTP_FILTER_EXTENSION_TRIGGER_INFO = THTTP_FILTER_EXTENSION_TRIGGER_INFO;
  205.   PHTTP_FILTER_EXTENSION_TRIGGER_INFO = ^HTTP_FILTER_EXTENSION_TRIGGER_INFO;
  206.  
  207.   TReadRawDataEvent = Procedure (Sender: TObject;pfcObject: THttpFiltCtx;Var RawDataStruct: THTTP_FILTER_RAW_DATA;Var RetVal: DWORD) of object;
  208.   TPreprocHeadersEvent = Procedure (Sender: TObject;pfcObject: THttpFiltCtx;Var HeadersStruct: THTTP_FILTER_PREPROC_HEADERS;Var RetVal: DWORD) of object;
  209.   TAuthenticationEvent = Procedure (Sender: TObject;pfcObject: THttpFiltCtx;Var AuthentStruct: THTTP_FILTER_AUTHENT;Var RetVal: DWORD) of object;
  210.   TUrlMapEvent = Procedure(Sender: TObject;pfcObject: THttpFiltCtx;Var UrlMapStruct: THTTP_FILTER_URL_MAP;Var RetVal: DWORD) of object;
  211.   TSendRawDataEvent = Procedure(Sender: TObject;pfcObject: THttpFiltCtx;Var RawDataStruct: THTTP_FILTER_RAW_DATA;Var RetVal: DWORD) of object;
  212.   TSendResponseEvent = Procedure(Sender: TObject;pfcObject: THttpFiltCtx;Var RawDataStruct: THTTP_FILTER_SEND_RESPONSE;Var RetVal: DWORD) of object;
  213.   TLogEvent = Procedure(Sender: TObject;pfcObject: THttpFiltCtx;Var LogStruct: THTTP_FILTER_LOG;Var RetVal: DWORD) of object;
  214.   TEndOfNetSessionEvent = Procedure(Sender: TObject;pfcObject: THttpFiltCtx;Var RetVal: DWORD) of object;
  215.   TEndOfRequestEvent = Procedure(Sender: TObject;pfcObject: THttpFiltCtx;Var RetVal: DWORD) of object;
  216.   TAccessDeniedEvent = Procedure(Sender: TObject;pfcObject: THttpFiltCtx;Var AccessDeniedStruct: THTTP_FILTER_ACCESS_DENIED;Var RetVal: DWORD) of object;
  217.   TAuthCompleteEvent = Procedure(Sender: TObject;pfcObject: THttpFiltCtx;Var RawDataStruct: THTTP_FILTER_AUTH_COMPLETE_INFO;Var RetVal: DWORD) of object;
  218.   TExtensionTriggerEvent = Procedure(Sender: TObject;pfcObject: THttpFiltCtx;Var RawDataStruct: THTTP_FILTER_EXTENSION_TRIGGER_INFO;Var RetVal: DWORD) of object;
  219.   TUnknownNotificationEvent = Procedure(Sender: TObject;pfcObject: THttpFiltCtx;dwNotificationType: DWORD;pvNotification: LPVOID;Var RetVal: DWORD) of object;
  220.   TGetFilterVersionEvent = Procedure(Sender: TObject;Var Version: THTTP_FILTER_VERSION;Var RetVal: BOOL) of object;
  221.   TTerminateFilterEvent = Procedure(Sender: Tobject;dwFlags: DWORD;RetVal: BOOL) of object;
  222.   TDestroyEvent = Procedure(Sender: TObject) of object;
  223.   TExceptionEvent = Procedure(Sender: TObject;E: Exception) of object;
  224.  
  225. Procedure LogInfo(aStr:String);
  226.  
  227. Implementation
  228.  
  229. Uses
  230.   Registry;
  231.  
  232. Var
  233.   LogActive: Boolean = False;
  234.   LogFileName: String = '';
  235.  
  236. Procedure LogInfo(aStr: String);
  237. Var
  238.   OutFile : TextFile;
  239. Begin
  240.   If LogActive Then
  241.   Begin
  242.     AssignFile (OutFile, LogFileName);
  243.     If FileExists (LogFileName) Then
  244.       Append(OutFile)
  245.     Else
  246.       Rewrite(OutFile);
  247.     Writeln(OutFile, aStr);
  248.     CloseFile(OutFile);
  249.   End;
  250. End;
  251.  
  252. Initialization
  253.   Try
  254.     With TRegistry.Create Do
  255.     Try
  256.       RootKey:=HKey_Local_Machine;
  257.       If OpenKey('Software\GUI\URLFilter', True) Then
  258.       Begin
  259.         If ValueExists('Logfile') Then
  260.         Begin
  261.           LogFileName:=ReadString('Logfile');
  262.           LogFileName:=Trim(LogFileName);
  263.           If Length(LogFileName) > 0 Then
  264.             LogActive:=True
  265.           Else
  266.             LogActive:=False;
  267.         End;
  268.       End;
  269.     Finally
  270.       Free
  271.     End;
  272.   Except
  273.     LogActive := False
  274.   End;
  275.  
  276. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement