mirror of https://github.com/tongzx/nt5src
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.
271 lines
8.8 KiB
271 lines
8.8 KiB
/*++
|
|
|
|
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_
|
|
|