|
|
/*++
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
|