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) 1997 Microsoft Corporation
Module Name:
D:\nt\private\ntos\tdi\rawwan\core\rwannt.h
Abstract:
NT-specific definitions for Raw WAN.
Revision History:
Who When What -------- -------- ---------------------------------------------- arvindm 04-17-97 Created
Notes:
--*/
#ifndef __TDI_RWANNT__H
#define __TDI_RWANNT__H
#ifdef NT
#if DBG_LOG_EP
#define MAX_EP_LOG_ENTRIES 32
typedef struct _RWAND_EP_LOG_ENTRY { ULONG LineNumber; ULONG Event; PVOID Context1; PVOID Context2;
} RWAND_EP_LOG_ENTRY, *PRWAND_EP_LOG_ENTRY;
#define RWAN_EP_DBGLOG_SET_SIGNATURE(_pEp) \
(_pEp)->EpLogSig = 'GOLE'
#define RWAN_EP_DBGLOG_ENTRY(_pEp, _Event, _Ctx1, _Ctx2) \
{ \ PRWAND_EP_LOG_ENTRY pLogEnt; \ ULONG Index; \ NdisAcquireSpinLock(&RWanDbgLogLock); \ (_pEp)->EpLogCount++; \ Index = (_pEp)->EpLogIndex; \ pLogEnt = &((_pEp)->EpLog[Index]); \ pLogEnt->LineNumber = __LINE__; \ pLogEnt->Event = _Event; \ pLogEnt->Context1 = (PVOID)_Ctx1; \ pLogEnt->Context2 = (PVOID)_Ctx2; \ (_pEp)->EpLogIndex++; \ if ((_pEp)->EpLogIndex == MAX_EP_LOG_ENTRIES) \ { \ (_pEp)->EpLogIndex = 0; \ } \ NdisReleaseSpinLock(&RWanDbgLogLock); \ }
#else
#define RWAN_EP_DBGLOG_SET_SIGNATURE(_pEp)
#define RWAN_EP_DBGLOG_ENTRY(_pEp, _Event, _Ctx1, _Ctx2)
#endif
//
// ***** Endpoint *****
//
// One of these is allocated for each MJ_CREATE successfully processed.
// A pointer to this structure is returned in FileObject->FsContext.
//
// The object it represents is one of these:
// Address object, Connection object, Control channel.
//
// Reference Count: RefCount is incremented for each of the following:
// - for the duration an IRP pertaining to this object is pending
//
typedef struct RWAN_ENDPOINT { #if DBG
ULONG nep_sig; #endif
#ifdef REFDBG
ULONG SendIncrRefs; ULONG RecvIncrRefs; ULONG CloseComplDecrRefs; ULONG DataReqComplDecrRefs; ULONG CancelComplDecrRefs; ULONG CancelIncrRefs; ULONG NonDataIncrRefs; #endif
#if DBG
PVOID pConnObject; // Transport's context
#endif
union { HANDLE AddressHandle; // Address Object
CONNECTION_CONTEXT ConnectionContext; // Connection Object
HANDLE ControlChannel; // Control channel
} Handle; struct _RWAN_TDI_PROTOCOL * pProtocol; ULONG RefCount; BOOLEAN bCancelIrps; // are we cleaning up?
KEVENT CleanupEvent; // synchronization
#if DBG_LOG_EP
ULONG EpLogSig; ULONG EpLogCount; ULONG EpLogIndex; struct _RWAND_EP_LOG_ENTRY EpLog[MAX_EP_LOG_ENTRIES]; #endif
} RWAN_ENDPOINT, *PRWAN_ENDPOINT;
#if DBG
#define nep_signature 'NlEp'
#endif // DBG
#define NULL_PRWAN_ENDPOINT ((PRWAN_ENDPOINT)NULL)
//
// ***** Device Object *****
//
// We create one NT device object for each TDI protocol that we
// expose i.e. each Winsock triple <Family, Proto, Type>.
//
typedef struct _RWAN_DEVICE_OBJECT { #if DBG
ULONG ndo_sig; #endif // DBG
PDEVICE_OBJECT pDeviceObject; // NT device object
struct _RWAN_TDI_PROTOCOL * pProtocol; // Info about the protocol
LIST_ENTRY DeviceObjectLink; // in list of device objs
} RWAN_DEVICE_OBJECT, *PRWAN_DEVICE_OBJECT;
#if DBG
#define ndo_signature 'NlDo'
#endif // DBG
#ifdef REFDBG
#define RWAN_INCR_EP_REF_CNT(_pEp, _Type) \
{ \ (_pEp)->RefCount++; \ (_pEp)->_Type##Refs++; \ }
#define RWAN_DECR_EP_REF_CNT(_pEp, _Type) \
{ \ (_pEp)->RefCount--; \ (_pEp)->_Type##Refs--; \ }
#else
#define RWAN_INCR_EP_REF_CNT(_pEp, _Type) \
(_pEp)->RefCount++;
#define RWAN_DECR_EP_REF_CNT(_pEp, _Type) \
(_pEp)->RefCount--;
#endif // REFDBG
/*++
LARGE_INTEGER RWAN_CONVERT_100NS_TO_MS( IN LARGE_INTEGER HnsTime, OUT PULONG pRemainder ) --*/ #define RWAN_CONVERT_100NS_TO_MS(_HnsTime, _pRemainder) \
RtlExtendedLargeIntegerDivide(_HnsTime, 10000, _pRemainder);
#endif // NT
#endif // __TDI_RWANNT__H
|