WindowsXP/Source/XPSP1/NT/net/ndis/sys/ndis_co.h
2024-08-03 16:30:48 +02:00

272 lines
8.8 KiB
C

/*++
Copyright (c) 1990-1995 Microsoft Corporation
Module Name:
ndis_co.h
Abstract:
NDIS wrapper CO definitions
Author:
Environment:
Kernel mode, FSD
Revision History:
Jan-98 Jameel Hyder Split up from ndisco.h
--*/
#ifndef _NDIS_CO_
#define _NDIS_CO_
//
// NDIS_CO_AF_BLOCK:
//
// This structure represents a client's open of an address family on an adapter.
// An NdisAfHandle points to one of these.
//
// Creation: NdisClOpenAddressFamily
// Deletion: Ndis[M]CmCloseAddressFamilyComplete
//
typedef struct _NDIS_CO_AF_BLOCK
{
struct _NDIS_CO_AF_BLOCK * NextAf; // the next open of the call manager per adapter open
ULONG Flags;
LONG References;
PNDIS_MINIPORT_BLOCK Miniport; // pointer to the miniport in question
//
// Cached call manager entry points
//
PNDIS_CALL_MANAGER_CHARACTERISTICS CallMgrEntries;
PNDIS_OPEN_BLOCK CallMgrOpen; // pointer to the call manager's open adapter:
// this is NULL iff combined Miniport+CM
NDIS_HANDLE CallMgrContext; // context when calling CM's ProtXX funcs
//
// Cached client entry points
//
NDIS_CLIENT_CHARACTERISTICS ClientEntries;
PNDIS_OPEN_BLOCK ClientOpen; // pointer to the client's open adapter
NDIS_HANDLE ClientContext; // context when calling Client's ProtXX funcs
KSPIN_LOCK Lock;
} NDIS_CO_AF_BLOCK, *PNDIS_CO_AF_BLOCK;
//
// Bit definitions for Flags in NDIS_CO_AF_BLOCK
//
#define AF_COMBO 0x00000001 // Set iff combined Miniport+CM
#define AF_CLOSING 0x80000000
//
// NDIS_CO_SAP_BLOCK:
//
// Service Access Point (Sap) structure. The NdisSapHandle points to one of these.
// A SAP is associated with an open AF block.
//
// Creation: NdisClRegisterSap
// Deletion: Ndis[M]CmDeregisterSapComplete
//
typedef struct _NDIS_CO_SAP_BLOCK
{
NDIS_HANDLE CallMgrContext;
NDIS_HANDLE ClientContext;
PNDIS_CO_AF_BLOCK AfBlock;
PCO_SAP Sap;
ULONG Flags;
LONG References;
KSPIN_LOCK Lock;
} NDIS_CO_SAP_BLOCK, *PNDIS_CO_SAP_BLOCK;
//
// Definitions for Flags in NDIS_CO_SAP_BLOCK:
//
#define SAP_CLOSING 0x80000000
//
// NDIS_CO_VC_BLOCK:
//
// The Virtual Connection structure. The NdisVcHandle points to a NDIS_CO_VC_PTR,
// which points to one of these.
//
// Creation: NdisCoCreateVc, NdisMCmCreateVc
// Deletion: NdisCoDeleteVc, NdisMCmDeleteVc
//
typedef struct _NDIS_CO_VC_BLOCK
{
ULONG References;
ULONG Flags; // to track closes
KSPIN_LOCK Lock;
PNDIS_OPEN_BLOCK ClientOpen; // identifies the client for miniport
// IndicatePacket
//
// References for client and call-manager
//
NDIS_HANDLE ClientContext; // passed up to the client on indications
struct _NDIS_CO_VC_PTR_BLOCK * pProxyVcPtr; // Pointer to Proxy's VcPr
struct _NDIS_CO_VC_PTR_BLOCK * pClientVcPtr; // Pointer to Client's VcPtr
//
// Clients cached entry points
//
CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler;
CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler;
PNDIS_OPEN_BLOCK CallMgrOpen; // identifies the call-manager
NDIS_HANDLE CallMgrContext; // passed up to the call manager on indications
//
// Call-manager cached entry points duplicates of VC_PTR_BLOCK
//
CM_ACTIVATE_VC_COMPLETE_HANDLER CmActivateVcCompleteHandler;
CM_DEACTIVATE_VC_COMPLETE_HANDLER CmDeactivateVcCompleteHandler;
CM_MODIFY_CALL_QOS_HANDLER CmModifyCallQoSHandler;
//
// Miniport's context and some cached entry-points
//
PNDIS_MINIPORT_BLOCK Miniport; // pointer to the miniport in question
NDIS_HANDLE MiniportContext;// passed down to the miniport
ULONGLONG VcId; // opaque ID for the VC, picked
// up from MediaParameters when
// the VC is activated
} NDIS_CO_VC_BLOCK, *PNDIS_CO_VC_BLOCK;
//
// NDIS_CO_VC_PTR_BLOCK:
//
// The VC Pointer structure. The NdisVcHandle points to one of these.
// When a VC is created, one VC Block structure and one VC pointer structure
// are created.
//
//
typedef struct _NDIS_CO_VC_PTR_BLOCK
{
LONG References;
ULONG CallFlags; // call state of this VC Ptr
PLONG pVcFlags;
KSPIN_LOCK Lock;
NDIS_HANDLE ClientContext; // passed up to the client
// on indications and completes
LIST_ENTRY ClientLink;
LIST_ENTRY VcLink;
PNDIS_CO_AF_BLOCK AfBlock; // OPTIONAL - NULL for call-mgr owned VCs
//
// Miniport VC
//
PNDIS_CO_VC_BLOCK VcBlock;
//
// Identifies the client. This could be the call-manager open if the
// Vc is call-manager owned, i.e. doesn't have an client association.
//
PNDIS_OPEN_BLOCK ClientOpen;
LONG OwnsVcBlock;
//
// The non-creator's handler and context
//
CO_DELETE_VC_HANDLER CoDeleteVcHandler;
NDIS_HANDLE DeleteVcContext;
//
// Clients cached entry points
//
CL_MODIFY_CALL_QOS_COMPLETE_HANDLER ClModifyCallQoSCompleteHandler;
CL_INCOMING_CALL_QOS_CHANGE_HANDLER ClIncomingCallQoSChangeHandler;
CL_CALL_CONNECTED_HANDLER ClCallConnectedHandler;
PNDIS_OPEN_BLOCK CallMgrOpen; // identifies the call-manager
NDIS_HANDLE CallMgrContext; // passed up to the call manager on indications
LIST_ENTRY CallMgrLink;
//
// Call-manager cached entry points duplicates of VC_BLOCK
//
CM_ACTIVATE_VC_COMPLETE_HANDLER CmActivateVcCompleteHandler;
CM_DEACTIVATE_VC_COMPLETE_HANDLER CmDeactivateVcCompleteHandler;
CM_MODIFY_CALL_QOS_HANDLER CmModifyCallQoSHandler;
//
// Miniport's context and some cached entry-points
//
PNDIS_MINIPORT_BLOCK Miniport; // pointer to the miniport in question
NDIS_HANDLE MiniportContext;// passed down to the miniport
W_CO_SEND_PACKETS_HANDLER WCoSendPacketsHandler;
W_CO_DELETE_VC_HANDLER WCoDeleteVcHandler;
W_CO_ACTIVATE_VC_HANDLER WCoActivateVcHandler;
W_CO_DEACTIVATE_VC_HANDLER WCoDeactivateVcHandler;
UNICODE_STRING VcInstanceName; // Used to query this specific VC via WMI.
LARGE_INTEGER VcIndex; // Used to build the instance name.
LIST_ENTRY WmiLink; // List of WMI enabled VCs
} NDIS_CO_VC_PTR_BLOCK, *PNDIS_CO_VC_PTR_BLOCK;
#define VC_ACTIVE 0x00000001
#define VC_ACTIVATE_PENDING 0x00000002
#define VC_DEACTIVATE_PENDING 0x00000004
#define VC_DELETE_PENDING 0x00000008
#define VC_HANDOFF_IN_PROGRESS 0x00000010 // Being handed off to proxied client
//
// VC Call states:
//
#define VC_CALL_ACTIVE 0x00000008
#define VC_CALL_PENDING 0x00000010
#define VC_CALL_CLOSE_PENDING 0x00000020
#define VC_CALL_ABORTED 0x00000040
#define VC_PTR_BLOCK_CLOSING 0x80000000
//
// Structure to represent a handle generated when a multi-party call is generated.
// This handle can ONLY be used for NdisCoDropParty call.
//
typedef struct _NDIS_CO_PARTY_BLOCK
{
PNDIS_CO_VC_PTR_BLOCK VcPtr;
NDIS_HANDLE CallMgrContext;
NDIS_HANDLE ClientContext;
//
// Cached client Handlers
//
CL_INCOMING_DROP_PARTY_HANDLER ClIncomingDropPartyHandler;
CL_DROP_PARTY_COMPLETE_HANDLER ClDropPartyCompleteHandler;
} NDIS_CO_PARTY_BLOCK, *PNDIS_CO_PARTY_BLOCK;
NTSTATUS
ndisUnicodeStringToPointer (
IN PUNICODE_STRING String,
IN ULONG Base OPTIONAL,
OUT PVOID *Value
);
#endif // _NDIS_CO_