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) 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_
|