/*++ Copyright (c) Microsoft Corporation. All rights reserved. Module Name: gpcstruc.h Abstract: This module contains type definitions for the interface between the traffic dll and kernel mode components. Author: Jim Stewart ( jstew ) August 22, 1996 Revision History: Yoram Bernet (yoramb) May 1, 1997 Ofer Bar (oferbar) Oct 1, 1997 - Revision 2 changes --*/ #ifndef __GPCSTRUC_H #define __GPCSTRUC_H #define GPC_NOTIFY_CFINFO_CLOSED 1 // // NtDeviceIoControlFile IoControlCode values for the GPC. // #define CTRL_CODE(function, method, access) \ CTL_CODE(FILE_DEVICE_NETWORK, function, method, access) #define IOCTL_GPC_REGISTER_CLIENT CTRL_CODE( 20, METHOD_BUFFERED,FILE_WRITE_ACCESS) #define IOCTL_GPC_DEREGISTER_CLIENT CTRL_CODE( 21, METHOD_BUFFERED,FILE_WRITE_ACCESS) #define IOCTL_GPC_ADD_CF_INFO CTRL_CODE( 22, METHOD_BUFFERED,FILE_WRITE_ACCESS) #define IOCTL_GPC_ADD_PATTERN CTRL_CODE( 23, METHOD_BUFFERED,FILE_WRITE_ACCESS) #define IOCTL_GPC_MODIFY_CF_INFO CTRL_CODE( 24, METHOD_BUFFERED,FILE_WRITE_ACCESS) #define IOCTL_GPC_REMOVE_CF_INFO CTRL_CODE( 25, METHOD_BUFFERED,FILE_WRITE_ACCESS) #define IOCTL_GPC_REMOVE_PATTERN CTRL_CODE( 26, METHOD_BUFFERED,FILE_WRITE_ACCESS) #define IOCTL_GPC_ENUM_CFINFO CTRL_CODE( 27, METHOD_BUFFERED,FILE_WRITE_ACCESS) #define IOCTL_GPC_NOTIFY_REQUEST CTRL_CODE( 28, METHOD_BUFFERED,FILE_WRITE_ACCESS) #define IOCTL_GPC_ADD_CF_INFO_EX CTRL_CODE( 30, METHOD_BUFFERED,FILE_ANY_ACCESS) #define IOCTL_GPC_ADD_PATTERN_EX CTRL_CODE( 31, METHOD_BUFFERED,FILE_ANY_ACCESS) #define IOCTL_GPC_REMOVE_CF_INFO_EX CTRL_CODE( 32, METHOD_BUFFERED,FILE_ANY_ACCESS) #define IOCTL_GPC_REMOVE_PATTERN_EX CTRL_CODE( 33, METHOD_BUFFERED,FILE_ANY_ACCESS) #define IOCTL_GPC_REGISTER_CLIENT_EX CTRL_CODE( 34, METHOD_BUFFERED,FILE_ANY_ACCESS) #define IOCTL_GPC_DEREGISTER_CLIENT_EX CTRL_CODE( 35, METHOD_BUFFERED,FILE_ANY_ACCESS) #define IOCTL_GPC_GET_ENTRIES CTRL_CODE( 50, METHOD_BUFFERED,FILE_ANY_ACCESS) /* ///////////////////////////////////////////////////////////////// // // Ioctl buffer formats - user level clients send buffers to the // GPC instead of calling entry points. Parameters are returned // in other buffers. Buffers are defined below: // ///////////////////////////////////////////////////////////////// */ // // Register client // typedef struct _GPC_REGISTER_CLIENT_REQ { ULONG CfId; ULONG Flags; ULONG MaxPriorities; GPC_CLIENT_HANDLE ClientContext; } GPC_REGISTER_CLIENT_REQ, *PGPC_REGISTER_CLIENT_REQ; typedef struct _GPC_REGISTER_CLIENT_RES { GPC_STATUS Status; GPC_HANDLE ClientHandle; } GPC_REGISTER_CLIENT_RES, *PGPC_REGISTER_CLIENT_RES; // // Deregister client // typedef struct _GPC_DEREGISTER_CLIENT_REQ { GPC_HANDLE ClientHandle; } GPC_DEREGISTER_CLIENT_REQ, *PGPC_DEREGISTER_CLIENT_REQ; typedef struct _GPC_DEREGISTER_CLIENT_RES { GPC_STATUS Status; } GPC_DEREGISTER_CLIENT_RES, *PGPC_DEREGISTER_CLIENT_RES; // // Add CfInfo // typedef struct _GPC_ADD_CF_INFO_REQ { GPC_HANDLE ClientHandle; GPC_CLIENT_HANDLE ClientCfInfoContext; // client specific context ULONG CfInfoSize; CHAR CfInfo[1]; // Varies from CF to CF } GPC_ADD_CF_INFO_REQ, *PGPC_ADD_CF_INFO_REQ; // // Add CfInfo EX // typedef struct _GPC_ADD_CF_INFO_EX_REQ { GPC_HANDLE ClientHandle; GPC_CLIENT_HANDLE ClientCfInfoContext; // client specific context // // New Fields for QOS only usage // HANDLE FileHandle; ULONG RemoteAddress; USHORT RemotePort; ULONG CfInfoSize; CHAR CfInfo[1]; // Varies from CF to CF } GPC_ADD_CF_INFO_EX_REQ, *PGPC_ADD_CF_INFO_EX_REQ; typedef struct _GPC_ADD_CF_INFO_RES { GPC_STATUS Status; GPC_HANDLE GpcCfInfoHandle; // this is filled after PENDING GPC_CLIENT_HANDLE ClientCtx; GPC_CLIENT_HANDLE CfInfoCtx; USHORT InstanceNameLength; WCHAR InstanceName[MAX_STRING_LENGTH]; } GPC_ADD_CF_INFO_RES, *PGPC_ADD_CF_INFO_RES; // // Add pattern // typedef struct _GPC_ADD_PATTERN_REQ { GPC_HANDLE ClientHandle; GPC_HANDLE GpcCfInfoHandle; GPC_CLIENT_HANDLE ClientPatternContext; ULONG Priority; ULONG ProtocolTemplate; ULONG PatternSize; CHAR PatternAndMask[1]; } GPC_ADD_PATTERN_REQ, *PGPC_ADD_PATTERN_REQ; typedef struct _GPC_ADD_PATTERN_RES { GPC_STATUS Status; GPC_HANDLE GpcPatternHandle; CLASSIFICATION_HANDLE ClassificationHandle; } GPC_ADD_PATTERN_RES, *PGPC_ADD_PATTERN_RES; // // Modify CfInfo // typedef struct _GPC_MODIFY_CF_INFO_REQ { GPC_HANDLE ClientHandle; GPC_HANDLE GpcCfInfoHandle; ULONG CfInfoSize; CHAR CfInfo[1]; } GPC_MODIFY_CF_INFO_REQ, *PGPC_MODIFY_CF_INFO_REQ; typedef struct _GPC_MODIFY_CF_INFO_RES { GPC_STATUS Status; // this is filled after PENDING GPC_CLIENT_HANDLE ClientCtx; GPC_CLIENT_HANDLE CfInfoCtx; } GPC_MODIFY_CF_INFO_RES, *PGPC_MODIFY_CF_INFO_RES; // // Remove CfInfo // typedef struct _GPC_REMOVE_CF_INFO_REQ { GPC_HANDLE ClientHandle; GPC_HANDLE GpcCfInfoHandle; } GPC_REMOVE_CF_INFO_REQ, *PGPC_REMOVE_CF_INFO_REQ; typedef struct _GPC_REMOVE_CF_INFO_RES { GPC_STATUS Status; // this is filled after PENDING GPC_CLIENT_HANDLE ClientCtx; GPC_CLIENT_HANDLE CfInfoCtx; } GPC_REMOVE_CF_INFO_RES, *PGPC_REMOVE_CF_INFO_RES; // // Remove pattern // typedef struct _GPC_REMOVE_PATTERN_REQ { GPC_HANDLE ClientHandle; GPC_HANDLE GpcPatternHandle; } GPC_REMOVE_PATTERN_REQ, *PGPC_REMOVE_PATTERN_REQ; typedef struct _GPC_REMOVE_PATTERN_RES { GPC_STATUS Status; } GPC_REMOVE_PATTERN_RES, *PGPC_REMOVE_PATTERN_RES; // // Enumerate CfInfo // typedef struct _GPC_ENUM_CFINFO_REQ { GPC_HANDLE ClientHandle; HANDLE EnumHandle; ULONG CfInfoCount; // # requested } GPC_ENUM_CFINFO_REQ, *PGPC_ENUM_CFINFO_REQ; typedef struct _GPC_ENUM_CFINFO_RES { GPC_STATUS Status; HANDLE EnumHandle; ULONG TotalCfInfo; // total installed GPC_ENUM_CFINFO_BUFFER EnumBuffer[1]; } GPC_ENUM_CFINFO_RES, *PGPC_ENUM_CFINFO_RES; // // Notify request // typedef struct _GPC_NOTIFY_REQUEST_REQ { HANDLE ClientHandle; } GPC_NOTIFY_REQUEST_REQ, *PGPC_NOTIFY_REQUEST_REQ; typedef struct _GPC_NOTIFY_REQUEST_RES { HANDLE ClientCtx; ULONG SubCode; // notification type ULONG Reason; // reason ULONG_PTR NotificationCtx; // i.e. flow context ULONG Param1; // optional param IO_STATUS_BLOCK IoStatBlock; // reserved for the IOCTL } GPC_NOTIFY_REQUEST_RES, *PGPC_NOTIFY_REQUEST_RES; #endif