You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
283 lines
7.3 KiB
283 lines
7.3 KiB
/*++
|
|
|
|
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
|
|
|