Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

182 lines
3.7 KiB

/*++
Copyright (c) 1999, Microsoft Corporation
Module Name:
sample\configurationentry.h
Abstract:
The file contains definitions for the configuration entry.
--*/
#ifndef _CONFIGURATIONENTRY_H_
#define _CONFIGURATIONENTRY_H_
//
// type: EVENT_ENTRY
//
// stores events for the ip router manager
//
// protected by the read-write lock CONFIGURATION_ENTRY::rwlLock
//
typedef struct _EVENT_ENTRY
{
QUEUE_ENTRY qeEventQueueLink;
ROUTING_PROTOCOL_EVENTS rpeEvent;
MESSAGE mMessage;
} EVENT_ENTRY, *PEVENT_ENTRY;
DWORD
EE_Create (
IN ROUTING_PROTOCOL_EVENTS rpeEvent,
IN MESSAGE mMessage,
OUT PEVENT_ENTRY *ppeeEventEntry);
DWORD
EE_Destroy (
IN PEVENT_ENTRY peeEventEntry);
#ifdef DEBUG
DWORD
EE_Display (
IN PEVENT_ENTRY peeEventEntry);
#else
#define EE_Display(peeEventEntry)
#endif // DEBUG
DWORD
EnqueueEvent(
IN ROUTING_PROTOCOL_EVENTS rpeEvent,
IN MESSAGE mMessage);
DWORD
DequeueEvent(
OUT ROUTING_PROTOCOL_EVENTS *prpeEvent,
OUT MESSAGE *pmMessage);
//
// various codes describing states of IPSAMPLE.
//
typedef enum _IPSAMPLE_STATUS_CODE
{
IPSAMPLE_STATUS_RUNNING = 101,
IPSAMPLE_STATUS_STOPPING = 102,
IPSAMPLE_STATUS_STOPPED = 103
} IPSAMPLE_STATUS_CODE, *PIPSAMPLE_STATUS_CODE;
//
// type: CONFIGURATION_ENTRY
//
// stores global state.
//
// igsStats is protected through interlocked increments or decrements
// lqEventQueue is protected by its own lock
// rest protected by the read-write lock CONFIGURATION_ENTRY::rwlLock
//
typedef struct _CONFIGURATION_ENTRY
{
//
// Following are PERSISTENT, across Start and Stop Protocol
//
// Lock
READ_WRITE_LOCK rwlLock;
// Global Heap
HANDLE hGlobalHeap;
// Clean Stop (Protocol)
ULONG ulActivityCount;
HANDLE hActivitySemaphore;
// Logging & Tracing Information
DWORD dwLogLevel;
HANDLE hLogHandle;
DWORD dwTraceID;
// Event Queue
LOCKED_QUEUE lqEventQueue;
// Protocol State
IPSAMPLE_STATUS_CODE iscStatus;
//
// Following are INITIALIZE'd and CLEANUP'd every Start & Stop Protocol
//
// Store of Dynamic Locks
DYNAMIC_LOCKS_STORE dlsDynamicLocksStore;
// Timer Entry
HANDLE hTimerQueue;
// Router Manager Information
HANDLE hMgrNotificationEvent;
SUPPORT_FUNCTIONS sfSupportFunctions;
// RTMv2 Information
RTM_ENTITY_INFO reiRtmEntity;
RTM_REGN_PROFILE rrpRtmProfile;
HANDLE hRtmHandle;
HANDLE hRtmNotificationHandle;
// MGM Information
HANDLE hMgmHandle;
// Network Entry
PNETWORK_ENTRY pneNetworkEntry;
// Global Statistics
IPSAMPLE_GLOBAL_STATS igsStats;
} CONFIGURATION_ENTRY, *PCONFIGURATION_ENTRY;
// create all fields on DLL_PROCESS_ATTACH
DWORD
CE_Create (
IN PCONFIGURATION_ENTRY pce);
// destroy all fields on DLL_PROCESS_DEATTACH
DWORD
CE_Destroy (
IN PCONFIGURATION_ENTRY pce);
// initialize non persistent fields on StartProtocol
DWORD
CE_Initialize (
IN PCONFIGURATION_ENTRY pce,
IN HANDLE hMgrNotificationEvent,
IN PSUPPORT_FUNCTIONS psfSupportFunctions,
IN PIPSAMPLE_GLOBAL_CONFIG pigc);
// cleanup non persistent fields on StopProtocol
DWORD
CE_Cleanup (
IN PCONFIGURATION_ENTRY pce,
IN BOOL bCleanupWinsock);
#ifdef DEBUG
DWORD
CE_Display (
IN PCONFIGURATION_ENTRY pce);
#else
#define CE_Display(pce)
#endif // DEBUG
#endif // _CONFIGURATIONENTRY_H_