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.
|
|
/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
ntos\tdi\isn\fwd\driver.h
Abstract: IPX Forwarder driver dispatch routines
Author:
Vadim Eydelman
Revision History:
--*/
#ifndef _IPXFWD_DRIVER_
#define _IPXFWD_DRIVER_
// Pseudo constant 0xFFFFFFFFFFFFF
extern const UCHAR BROADCAST_NODE[6];
// Performance measurement:
// Enabling flag
extern BOOLEAN MeasuringPerformance; // Access control
extern KSPIN_LOCK PerfCounterLock; // Statistic accumulators (counters)
extern FWD_PERFORMANCE PerfBlock;
// Access control for external callers (ipx stack, filter driver)
// Flag set upon completion of initialization of all components
extern volatile BOOLEAN IpxFwdInitialized; // Number of clients executing forwarder code (if -1, the forwarder
// is being stopped)
extern LONG ClientCount; // Event to be signalled by the last client inside forwarder
extern KEVENT ClientsGoneEvent;
/*++
E n t e r F o r w a r d e r
Routine Description: Checks if forwarder is initialized and grants access to it (records the entrance as well
Arguments: None
Return Value: TRUE - access granted FALSE - forwarder is not yet initialized or is being stopped
--*/ //BOOLEAN
//EnterForwarder (
// void
// );
#define EnterForwarder() ( \
(InterlockedIncrement(&ClientCount), IpxFwdInitialized) \ ? TRUE \ : (DoLeaveForwarder(), FALSE) \ )
/*++
L e a v e F o r w a r d e r
Routine Description: Records the fact that external client stopped using forwarder Arguments: None
Return Value: None
--*/ //BOOLEAN
//EnterForwarder (
// void
// );
#define LeaveForwarder() \
((InterlockedDecrement(&ClientCount)<0) \ ? KeSetEvent (&ClientsGoneEvent,0,FALSE) \ : 0 \ )
// Same as above but implemented as a routine to be used in
// the EnterForwarder macro above (this reduces code size
// and aids in debugging by improving readability of disassembly
BOOLEAN DoLeaveForwarder ( VOID );
#endif
|