Sample Code

windows driver samples/ Windows Filtering Platform Sample/ C++/ idl/ WFPSamplerRPC.IDL/

////////////////////////////////////////////////////////////////////////////////////////////////////
//
//   Copyright (c) 2012 Microsoft Corporation.  All Rights Reserved.
//
//   Module Name:
//      WFPSamplerRPC.idl
//
//   Abstract:
//      This module contains interface declarations used in implementing WFPSampler's RPC interface.
//
//   Author:
//      Dusty Harper      (DHarper)
//
//   Revision History:
//
//      [ Month ][Day] [Year] - [Revision]-[ Comments ]
//      May       01,   2010  -     1.0   -  Creation
//
////////////////////////////////////////////////////////////////////////////////////////////////////

import "wtypes.idl";    /// Include\Shared
import "fwpmtypes.idl"; /// Include\Shared

[
   helpstring("WFP Sampler Service 1.0"),
   uuid(53504657-6D61-6C70-6572-5F496E746572),
   version(1.0),
   endpoint("ncalrpc:[WFPSampler]"),
   pointer_default(ref)
]

interface IWFPSampler
{
   cpp_quote("#ifdef __midl")

      typedef enum
      {
         IPV4 = 4,
         IPV6 = 6,
      }IPVERSION;

      typedef enum
      {
         IPPROTO_HOPOPTS       =   0, 
         IPPROTO_ICMP          =   1,
         IPPROTO_IGMP          =   2,
         IPPROTO_GGP           =   3,
         IPPROTO_IPV4          =   4,
         IPPROTO_ST            =   5,
         IPPROTO_TCP           =   6,
         IPPROTO_CBT           =   7,
         IPPROTO_EGP           =   8,
         IPPROTO_IGP           =   9,
         IPPROTO_PUP           =  12,
         IPPROTO_UDP           =  17,
         IPPROTO_IDP           =  22,
         IPPROTO_RDP           =  27,
         IPPROTO_IPV6          =  41,
         IPPROTO_ROUTING       =  43,
         IPPROTO_FRAGMENT      =  44,
         IPPROTO_ESP           =  50,
         IPPROTO_AH            =  51,
         IPPROTO_ICMPV6        =  58,
         IPPROTO_NONE          =  59,
         IPPROTO_DSTOPTS       =  60,
         IPPROTO_ND            =  77,
         IPPROTO_ICLFXBM       =  78,
         IPPROTO_PIM           = 103,
         IPPROTO_PGM           = 113,
         IPPROTO_L2TP          = 115,
         IPPROTO_SCTP          = 132,
         IPPROTO_RAW           = 255,
         IPPROTO_MAX           = 256,
      }IPPROTO;

   cpp_quote("#endif")

   typedef enum WFPSAMPLER_SCENARIO_
   {
      SCENARIO_UNDEFINED                 =  0,
      SCENARIO_APP_CONTAINER             =  1,
      SCENARIO_BASIC_ACTION_BLOCK        =  2,
      SCENARIO_BASIC_ACTION_CONTINUE     =  3,
      SCENARIO_BASIC_ACTION_PERMIT       =  4,
      SCENARIO_BASIC_ACTION_RANDOM       =  5,
      SCENARIO_BASIC_PACKET_EXAMINATION  =  6,
      SCENARIO_BASIC_PACKET_INJECTION    =  7,
      SCENARIO_BASIC_PACKET_MODIFICATION =  8,
      SCENARIO_BASIC_STREAM_INJECTION    =  9,
      SCENARIO_FAST_PACKET_INJECTION     = 10,
      SCENARIO_FAST_STREAM_INJECTION     = 11,
      SCENARIO_PEND_AUTHORIZATION        = 12,
      SCENARIO_PROXY                     = 13,
      SCENARIO_MAX
   }WFPSAMPLER_SCENARIO;

   typedef struct MAC_DATA_
   {
      UINT32 flags;

      BYTE   pReserved[4];

      BYTE   pSourceMACAddress[8];

      BYTE   pDestinationMACAddress[8];
   }MAC_DATA;
   
   typedef struct IP_DATA_
   {
      UINT32 flags;

      BYTE   pReserved[3];

      UINT8  ipVersion;

      [switch_type(IPVERSION), switch_is(ipVersion)]
      union
      {
         [case(IPV4)]
         BYTE pIPv4[4];                                            /// Network Byte Order
         [case(IPV6)]
         BYTE pIPv6[16];
      }sourceAddress;

      [switch_type(IPVERSION), switch_is(ipVersion)]
      union
      {
         [case(IPV4)]
         BYTE pIPv4[4];                                            /// Network Byte Order
         [case(IPV6)]
         BYTE pIPv6[16];
      }destinationAddress;
   }IP_DATA;

   typedef struct TRANSPORT_DATA_
   {
      UINT32 flags;

      BYTE   pReserved[3];

      UINT8  protocol;

      [switch_type(UINT8), switch_is(protocol)]
      union
      {
         [case(IPPROTO_ICMP,
               IPPROTO_ICMPV6)]
         UINT8  type;
         [case(IPPROTO_TCP,
               IPPROTO_UDP)]
         UINT16 port;                                              /// Network Byte Order
         [case(IPPROTO_RAW)]
         UINT16 data;
      }source;

      [switch_type(UINT8), switch_is(protocol)]
      union
      {
         [case(IPPROTO_ICMP,
               IPPROTO_ICMPV6)]
         UINT8  code;
         [case(IPPROTO_TCP,
               IPPROTO_UDP)]
         UINT16 port;                                              /// Network Byte Order
         [case(IPPROTO_RAW)]
         UINT16 data;
      }destination;
      BYTE   pPadding[4];
   } TRANSPORT_DATA;

   typedef struct PC_BASIC_ACTION_DATA_
   {
      UINT8 percentBlock;

      UINT8 percentPermit;

      UINT8 percentContinue;

      BYTE  pReserved[5];
   } PC_BASIC_ACTION_DATA;

   typedef struct PC_BASIC_PACKET_INJECTION_DATA_
   {
      BOOLEAN performInline;                                       /// Inline vs. Out of Band

      BOOLEAN useWorkItems;                                        /// DPCs vs. WorkItems

      BOOLEAN useThreadedDPC;                                      /// DPCs vs Threaded DPCs

      BYTE    pReserved[5];
   } PC_BASIC_PACKET_INJECTION_DATA;

   typedef struct PC_BASIC_PACKET_MODIFICATION_DATA_
   {
      UINT32         flags;

      BOOLEAN        performInline;                                /// Inline vs. Out of Band

      BOOLEAN        useWorkItems;                                 /// DPCs vs. WorkItems

      BOOLEAN        useThreadedDPC;                               /// DPCs vs Threaded DPCs

      BYTE           pReserved[1];

      MAC_DATA       macData;

      IP_DATA        ipData;

      TRANSPORT_DATA transportData;
   }PC_BASIC_PACKET_MODIFICATION_DATA;

   typedef struct PC_BASIC_STREAM_INJECTION_DATA_
   {
      BOOLEAN performInline;                                       /// Inline vs. Out of Band

      BOOLEAN useWorkItems;                                        /// DPCs vs. WorkItems

      BOOLEAN useThreadedDPC;                                      /// DPCs vs Threaded DPCs

      BYTE    pReserved[5];
   } PC_BASIC_STREAM_INJECTION_DATA;

   typedef struct PC_PEND_AUTHORIZATION_DATA_
   {
      UINT32  flags;

      UINT32  finalAction;

      UINT32  delay;

      BOOLEAN useWorkItems;                                        /// DPCs vs. WorkItems

      BOOLEAN useThreadedDPC;                                      /// DPCs vs Threaded DPCs

      BYTE    pReserved[2];
   }PC_PEND_AUTHORIZATION_DATA;

   typedef struct PC_PROXY_DATA_
   {
      UINT32  flags;

      BOOLEAN performInline;                                       /// Inline vs. Out of Band

      BOOLEAN useWorkItems;                                        /// DPCs vs. WorkItems

      BOOLEAN useThreadedDPC;                                      /// DPCs vs Threaded DPCs

      BOOLEAN proxyToRemoteService;                                /// Local vs. Remote Service

      BYTE    pReserved[7];

      UINT8   ipVersion;

      [switch_type(IPVERSION), switch_is(ipVersion)]
      union
      {
         [case(IPV4)]
         BYTE pIPv4[4];                                            /// Network Byte Order
         [case(IPV6)]
         BYTE pIPv6[16];
      }proxyLocalAddress;

      [switch_type(IPVERSION), switch_is(ipVersion)]
      union
      {
         [case(IPV4)]
         BYTE pIPv4[4];                                            /// Network Byte Order
         [case(IPV6)]
         BYTE pIPv6[16];
      }proxyRemoteAddress;

      UINT32  localScopeId;

      UINT32  remoteScopeId;

      UINT16  proxyLocalPort;                                      /// Network Byte Order

      UINT16  proxyRemotePort;                                     /// Network Byte Order

      UINT32  targetProcessID;

      UINT64  tcpPortReservationToken;

      UINT64  udpPortReservationToken;
   } PC_PROXY_DATA;

   /// ProviderContext ProxyData Flags
   cpp_quote("#define PCPDF_PROXY_LOCAL_ADDRESS  0x01")
   cpp_quote("#define PCPDF_PROXY_LOCAL_PORT     0x02")
   cpp_quote("#define PCPDF_PROXY_REMOTE_ADDRESS 0x04")
   cpp_quote("#define PCPDF_PROXY_REMOTE_PORT    0x08")

   ///ProviderContext PacketModificationData Flags
   cpp_quote("#define PCPMDF_MODIFY_MAC_HEADER                     0x10")
   cpp_quote("#define PCPMDF_MODIFY_MAC_HEADER_SOURCE_ADDRESS      0x01")
   cpp_quote("#define PCPMDF_MODIFY_MAC_HEADER_DESTINATION_ADDRESS 0x02")

   cpp_quote("#define PCPMDF_MODIFY_IP_HEADER                     0x20")
   cpp_quote("#define PCPMDF_MODIFY_IP_HEADER_SOURCE_ADDRESS      0x01")
   cpp_quote("#define PCPMDF_MODIFY_IP_HEADER_DESTINATION_ADDRESS 0x02")

   cpp_quote("#define PCPMDF_MODIFY_TRANSPORT_HEADER                  0x40")
   cpp_quote("#define PCPMDF_MODIFY_TRANSPORT_HEADER_SOURCE_PORT      0x01")
   cpp_quote("#define PCPMDF_MODIFY_TRANSPORT_HEADER_DESTINATION_PORT 0x02")

   cpp_quote("#define PCPMDF_MODIFY_TRANSPORT_HEADER_ICMP_TYPE PCPMDF_MODIFY_TRANSPORT_HEADER_SOURCE_PORT")
   cpp_quote("#define PCPMDF_MODIFY_TRANSPORT_HEADER_ICMP_CODE PCPMDF_MODIFY_TRANSPORT_HEADER_DESTINATION_PORT")

   extern handle_t wfpSamplerBindingHandle;

   error_status_t RPCInvokeScenarioAppContainer([in] handle_t rpcBindingHandle,
                                                [in] WFPSAMPLER_SCENARIO scenario,
                                                [in] FWPM_CHANGE_TYPE changeType,
                                                [in] BOOLEAN trustWSH,
                                                [in] BOOLEAN persistent,
                                                [in] BOOLEAN bootTime);

   error_status_t RPCInvokeScenarioBasicAction([in] handle_t rpcBindingHandle,
                                               [in] WFPSAMPLER_SCENARIO scenario,
                                               [in] FWPM_CHANGE_TYPE changeType,
                                               [in, ref] const FWPM_FILTER0* pFilter,
                                               [in, unique] const PC_BASIC_ACTION_DATA* pPCBasicActionData);

   error_status_t RPCInvokeScenarioBasicPacketExamination([in] handle_t rpcBindingHandle,
                                                          [in] WFPSAMPLER_SCENARIO scenario,
                                                          [in] FWPM_CHANGE_TYPE changeType,
                                                          [in, ref] const FWPM_FILTER0* pFilter);

   error_status_t RPCInvokeScenarioBasicPacketInjection([in] handle_t rpcBindingHandle,
                                                        [in] WFPSAMPLER_SCENARIO scenario,
                                                        [in] FWPM_CHANGE_TYPE changeType,
                                                        [in, ref] const FWPM_FILTER0* pFilter,
                                                        [in, unique] const PC_BASIC_PACKET_INJECTION_DATA* pPCBasicPacketInjectionData);

   error_status_t RPCInvokeScenarioBasicPacketModification([in] handle_t rpcBindingHandle,
                                                           [in] WFPSAMPLER_SCENARIO scenario,
                                                           [in] FWPM_CHANGE_TYPE changeType,
                                                           [in, ref] const FWPM_FILTER0* pFilter,
                                                           [in, unique] const PC_BASIC_PACKET_MODIFICATION_DATA* pPCBasicPacketModificationData);

   error_status_t RPCInvokeScenarioBasicStreamInjection([in] handle_t rpcBindingHandle,
                                                        [in] WFPSAMPLER_SCENARIO scenario,
                                                        [in] FWPM_CHANGE_TYPE changeType,
                                                        [in, ref] const FWPM_FILTER0* pFilter,
                                                        [in, unique] const PC_BASIC_STREAM_INJECTION_DATA* pPCBasicStreamInjectionData);

   error_status_t RPCInvokeScenarioFastPacketInjection([in] handle_t rpcBindingHandle,
                                                       [in] WFPSAMPLER_SCENARIO scenario,
                                                       [in] FWPM_CHANGE_TYPE changeType,
                                                       [in, ref] const FWPM_FILTER0* pFilter);

   error_status_t RPCInvokeScenarioFastStreamInjection([in] handle_t rpcBindingHandle,
                                                       [in] WFPSAMPLER_SCENARIO scenario,
                                                       [in] FWPM_CHANGE_TYPE changeType,
                                                       [in, ref] const FWPM_FILTER0* pFilter);

   error_status_t RPCInvokeScenarioPendAuthorization([in] handle_t rpcBindingHandle,
                                                     [in] WFPSAMPLER_SCENARIO scenario,
                                                     [in] FWPM_CHANGE_TYPE changeType,
                                                     [in, ref] const FWPM_FILTER0* pFilter,
                                                     [in, unique] const PC_PEND_AUTHORIZATION_DATA* pPCPendAuthorizationData);

   error_status_t RPCInvokeScenarioProxy([in] handle_t rpcBindingHandle,
                                         [in] WFPSAMPLER_SCENARIO scenario,
                                         [in] FWPM_CHANGE_TYPE changeType,
                                         [in, ref] const FWPM_FILTER0* pFilter,
                                         [in, unique] const PC_PROXY_DATA* pPCProxyData);
}

Our Services

  • What our customers say about us?

© 2011-2025 All Rights Reserved. Joya Systems. 4425 South Mopac Building II Suite 101 Austin, TX 78735 Tel: 800-DEV-KERNEL

Privacy Policy. Terms of use. Valid XHTML & CSS