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.
102 lines
2.0 KiB
102 lines
2.0 KiB
/*++
|
|
|
|
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
|