Leaked source code of windows server 2003
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.
 
 
 
 
 
 

276 lines
6.1 KiB

/*++
Copyright (c) 1996-1999 Microsoft Corporation
Module Name:
globals.c
Abstract:
global declarations
Author:
Charlie Wickham (charlwi) 22-Apr-1996
Rajesh Sundaram (rajeshsu) 01-Aug-1998.
Environment:
Kernel Mode
Revision History:
--*/
#include "psched.h"
#pragma hdrstop
#include <ntverp.h>
/* External */
/* Static */
/* Forward */
/* End Forward */
ULONG InitShutdownMask;
ULONG AdapterCount;
ULONG DriverRefCount;
DRIVER_STATE gDriverState;
ULONG gEnableAvgStats = 0;
ULONG gEnableWindowAdjustment = 0;
NDIS_STRING gsEnableWindowAdjustment = NDIS_STRING_CONST("PSCHED");
//
// Lists
//
LIST_ENTRY AdapterList; // List of adapters
LIST_ENTRY PsComponentList; // List of scheduling components.
LIST_ENTRY PsProfileList; // List of scheduling profiles.
//
// Locks
//
PS_SPIN_LOCK AdapterListLock; // Protects AdapterList
PS_SPIN_LOCK DriverUnloadLock; // to handle unloads, unbinds, etc.
//
// Mutex Implementation
//
ULONG CreateDeviceMutex = 0;
//
// Handles
//
NDIS_HANDLE ClientProtocolHandle; // handle returned by NDIS when registering the Client
NDIS_HANDLE MpWrapperHandle; // Ndis wrapper handle for MP section
NDIS_HANDLE LmDriverHandle; // handle returned by NDIS when MP portion registers as LM
NDIS_HANDLE PsDeviceHandle;
//
// PSDriverObject, PSDeviceObject - pointer to NT driver and device objects
//
PDRIVER_OBJECT PsDriverObject;
PDEVICE_OBJECT PsDeviceObject;
//
// Lookaside Lists
//
NPAGED_LOOKASIDE_LIST NdisRequestLL; // For Ndis requests
NPAGED_LOOKASIDE_LIST GpcClientVcLL; // For GPC Client VCs.
//
// Events
//
NDIS_EVENT DriverUnloadEvent;
NDIS_EVENT gZAWEvent;
ULONG gZAWState = ZAW_STATE_READY;
//
// name constants used during registration/initialization
//
NDIS_STRING PsSymbolicName = NDIS_STRING_CONST("\\DosDevices\\PSched");
NDIS_STRING PsDriverName = NDIS_STRING_CONST("\\Device\\PSched");
NDIS_STRING VcPrefix = NDIS_STRING_CONST( "VC:");
NDIS_STRING WanPrefix = NDIS_STRING_CONST( "WAN:");
NDIS_STRING MachineRegistryKey = NDIS_STRING_CONST( "\\Registry\\Machine\\SOFTWARE\\Policies\\Microsoft\\Windows\\PSched");
NDIS_STRING PsMpName;
//
// Default scheduling component info
//
PSI_INFO TbConformerInfo = {
{0, 0}, TRUE, FALSE,
PS_COMPONENT_CURRENT_VERSION,
NDIS_STRING_CONST( "TokenBucketConformer" ),
0, 0, 0, 0,
0, NULL, 0, NULL,
0,0,0,0,0,0,0,0,0,0
};
PSI_INFO ShaperInfo = {
{0, 0}, TRUE, FALSE,
PS_COMPONENT_CURRENT_VERSION,
NDIS_STRING_CONST( "TrafficShaper" ),
0, 0, 0, 0,
0, NULL, 0, NULL,
0,0,0,0,0,0,0,0,0,0
};
PSI_INFO DrrSequencerInfo = {
{0, 0}, TRUE, FALSE,
PS_COMPONENT_CURRENT_VERSION,
NDIS_STRING_CONST( "DRRSequencer" ),
0, 0, 0, 0,
0, NULL, 0, NULL,
0,0,0,0,0,0,0,0,0,0
};
PSI_INFO TimeStmpInfo = {
{0, 0}, TRUE, FALSE,
PS_COMPONENT_CURRENT_VERSION,
NDIS_STRING_CONST( "TimeStmp" ),
0, 0, 0, 0,
0, NULL, 0, NULL,
0,0,0,0,0,0,0,0,0,0
};
PSI_INFO SchedulerStubInfo = {
{0, 0}, TRUE, FALSE,
PS_COMPONENT_CURRENT_VERSION,
NDIS_STRING_CONST( "SchedulerStub" ),
0, 0, 0, 0,
0, NULL, 0, NULL,
0,0,0,0,0,0,0,0,0,0
};
//
// Known component configurations
//
PS_PROFILE DefaultSchedulerConfig = {
{0, 0},
0,
NDIS_STRING_CONST( "DefaultSchedulerConfig" ),
3,
{&TbConformerInfo,
&DrrSequencerInfo,
&SchedulerStubInfo
}
};
//
// PS Procs for scheduler
//
PS_PROCS PsProcs;
//
// For the logging support
//
PVOID SchedTraceThreshContext;
NDIS_SPIN_LOCK GlobalLoggingLock;
ULONG SchedTraceIndex = 0;
ULONG SchedBufferSize = 0;
ULONG SchedTraced = 0;
UCHAR *SchedTraceBuffer = 0;
ULONG SchedTraceBytesUnread = 0;
ULONG SchedTraceThreshold = 0xffffffff;
SCHEDTRACE_THRESH_PROC SchedTraceThreshProc = NULL;
BOOLEAN TraceBufferAllocated = FALSE;
BOOLEAN WMIInitialized = FALSE;
// Timer
ULONG gTimerResolutionActualTime = 0;
ULONG gTimerSet = 0;
// GPC VC state machine
#if DBG
PUCHAR GpcVcState[] = {
"ERROR_STATE",
"CL_VC_INITIALIZED",
"CL_CALL_PENDING",
"CL_INTERNAL_CALL_COMPLETE",
"CL_CALL_COMPLETE",
"CL_MODIFY_PENDING",
"CL_GPC_CLOSE_PENDING",
"CL_NDIS_CLOSE_PENDING",
"CL_WAITING_FOR_PENDING_PACKETS"
};
#endif
//
// GPC Interface
//
GPC_EXPORTED_CALLS GpcEntries;
GPC_HANDLE GpcQosClientHandle;
#if CBQ
GPC_HANDLE GpcClassMapClientHandle;
#endif
PS_DEVICE_STATE DeviceState = PS_DEVICE_STATE_READY;
//
// TAGS
//
ULONG NdisRequestTag = '0CSP';
ULONG GpcClientVcTag = '1CSP';
ULONG WanLinkTag = '2CSP';
ULONG PsMiscTag = '3CSP';
ULONG WanTableTag = '4CSP';
ULONG WMITag = 'hCSP';
ULONG AdapterTag = 'aCSP';
ULONG CmParamsTag = 'bCSP';
ULONG PipeContextTag = 'cCSP';
ULONG FlowContextTag = 'dCSP';
ULONG ClassMapContextTag = 'eCSP';
ULONG ProfileTag = 'fCSP';
ULONG ComponentTag = 'gCSP';
ULONG TimerTag = 'zCSP';
ULONG TsTag = 'tCSP';
#if DBG
CHAR VersionNumber[] = "0.300";
CHAR VersionHerald[] = "PSched: Packet Scheduler Version %s built on %s\n";
CHAR VersionTimestamp[] = __DATE__ " " __TIME__;
ULONG DbgTraceLevel;
ULONG DbgTraceMask;
ULONG LogTraceLevel;
ULONG LogTraceMask;
ULONG LogId = LAST_LOG_ID;
ULONG ClassificationType = 0;
#endif
//
// NULL Component hacks for now [ShreeM]
//
PS_RECEIVE_PACKET TimeStmpRecvPacket = NULL;
PS_RECEIVE_INDICATION TimeStmpRecvIndication = NULL;
PULONG_PTR g_WanLinkTable;
USHORT g_NextWanIndex;
USHORT g_WanTableSize;
/* end globals.c */