|
|
// // Function types for NDIS_PROTOCOL_CHARACTERISTICS //
typedef VOID (*OPEN_ADAPTER_COMPLETE_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status, IN NDIS_STATUS OpenErrorStatus );
typedef VOID (*CLOSE_ADAPTER_COMPLETE_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status );
typedef VOID (*RESET_COMPLETE_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status );
typedef VOID (*REQUEST_COMPLETE_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_REQUEST NdisRequest, IN NDIS_STATUS Status );
typedef VOID (*STATUS_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS GeneralStatus, IN PVOID StatusBuffer, IN UINT StatusBufferSize );
typedef VOID (*STATUS_COMPLETE_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext );
typedef VOID (*SEND_COMPLETE_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_PACKET Packet, IN NDIS_STATUS Status );
typedef VOID (*WAN_SEND_COMPLETE_HANDLER) ( IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_WAN_PACKET Packet, IN NDIS_STATUS Status );
typedef VOID (*TRANSFER_DATA_COMPLETE_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_PACKET Packet, IN NDIS_STATUS Status, IN UINT BytesTransferred );
typedef VOID (*WAN_TRANSFER_DATA_COMPLETE_HANDLER)( VOID );
typedef NDIS_STATUS (*RECEIVE_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE MacReceiveContext, IN PVOID HeaderBuffer, IN UINT HeaderBufferSize, IN PVOID LookAheadBuffer, IN UINT LookaheadBufferSize, IN UINT PacketSize );
typedef NDIS_STATUS (*WAN_RECEIVE_HANDLER)( IN NDIS_HANDLE NdisLinkHandle, IN PUCHAR Packet, IN ULONG PacketSize );
typedef VOID (*RECEIVE_COMPLETE_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext );
// // Protocol characteristics for down-level NDIS 3.0 protocols // typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS { UCHAR MajorNdisVersion; UCHAR MinorNdisVersion; USHORT Filler; union { UINT Reserved; UINT Flags; }; OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler; CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler; union { SEND_COMPLETE_HANDLER SendCompleteHandler; WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler; }; union { TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler; };
RESET_COMPLETE_HANDLER ResetCompleteHandler; REQUEST_COMPLETE_HANDLER RequestCompleteHandler; union { RECEIVE_HANDLER ReceiveHandler; WAN_RECEIVE_HANDLER WanReceiveHandler; }; RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; STATUS_HANDLER StatusHandler; STATUS_COMPLETE_HANDLER StatusCompleteHandler; NDIS_STRING Name; } NDIS30_PROTOCOL_CHARACTERISTICS;
// // Function types extensions for NDIS 4.0 Protocols // typedef INT (*RECEIVE_PACKET_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_PACKET Packet );
typedef VOID (*BIND_HANDLER)( OUT PNDIS_STATUS Status, IN NDIS_HANDLE BindContext, IN PNDIS_STRING DeviceName, IN PVOID SystemSpecific1, IN PVOID SystemSpecific2 );
typedef VOID (*UNBIND_HANDLER)( OUT PNDIS_STATUS Status, IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE UnbindContext );
typedef NDIS_STATUS (*PNP_EVENT_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN PNET_PNP_EVENT NetPnPEvent );
typedef VOID (*UNLOAD_PROTOCOL_HANDLER)( VOID );
// // Protocol characteristics for NDIS 4.0 protocols // typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS { #ifdef __cplusplus NDIS30_PROTOCOL_CHARACTERISTICS Ndis30Chars; #else NDIS30_PROTOCOL_CHARACTERISTICS; #endif
// // Start of NDIS 4.0 extensions. // RECEIVE_PACKET_HANDLER ReceivePacketHandler;
// // PnP protocol entry-points // BIND_HANDLER BindAdapterHandler; UNBIND_HANDLER UnbindAdapterHandler; PNP_EVENT_HANDLER PnPEventHandler; UNLOAD_PROTOCOL_HANDLER UnloadHandler;
} NDIS40_PROTOCOL_CHARACTERISTICS;
// // Protocol (5.0) handler proto-types - used by clients as well as call manager modules // typedef VOID (*CO_SEND_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolVcContext, IN PNDIS_PACKET Packet );
typedef VOID (*CO_STATUS_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE ProtocolVcContext OPTIONAL, IN NDIS_STATUS GeneralStatus, IN PVOID StatusBuffer, IN UINT StatusBufferSize );
typedef UINT (*CO_RECEIVE_PACKET_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE ProtocolVcContext, IN PNDIS_PACKET Packet );
typedef NDIS_STATUS (*CO_REQUEST_HANDLER)( IN NDIS_HANDLE ProtocolAfContext, IN NDIS_HANDLE ProtocolVcContext OPTIONAL, IN NDIS_HANDLE ProtocolPartyContext OPTIONAL, IN OUT PNDIS_REQUEST NdisRequest );
typedef VOID (*CO_REQUEST_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolAfContext OPTIONAL, IN NDIS_HANDLE ProtocolVcContext OPTIONAL, IN NDIS_HANDLE ProtocolPartyContext OPTIONAL, IN PNDIS_REQUEST NdisRequest );
// // CO_CREATE_VC_HANDLER and CO_DELETE_VC_HANDLER are synchronous calls // typedef NDIS_STATUS (*CO_CREATE_VC_HANDLER)( IN NDIS_HANDLE ProtocolAfContext, IN NDIS_HANDLE NdisVcHandle, OUT PNDIS_HANDLE ProtocolVcContext );
typedef NDIS_STATUS (*CO_DELETE_VC_HANDLER)( IN NDIS_HANDLE ProtocolVcContext );
typedef VOID (*CO_AF_REGISTER_NOTIFY_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN PCO_ADDRESS_FAMILY AddressFamily );
typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS { #ifdef __cplusplus NDIS40_PROTOCOL_CHARACTERISTICS Ndis40Chars; #else NDIS40_PROTOCOL_CHARACTERISTICS; #endif // // Placeholders for protocol extensions for PnP/PM etc. // PVOID ReservedHandlers[4];
// // Start of NDIS 5.0 extensions. //
CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; CO_STATUS_HANDLER CoStatusHandler; CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
} NDIS50_PROTOCOL_CHARACTERISTICS;
#if (defined(NDIS50) || defined(NDIS51)) typedef NDIS50_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS; #else #if NDIS40 typedef NDIS40_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS; #else typedef NDIS30_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS; #endif #endif typedef NDIS_PROTOCOL_CHARACTERISTICS *PNDIS_PROTOCOL_CHARACTERISTICS;
// // Requests used by Protocol Modules //
EXPORT VOID NdisRegisterProtocol( OUT PNDIS_STATUS Status, OUT PNDIS_HANDLE NdisProtocolHandle, IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics, IN UINT CharacteristicsLength );
EXPORT VOID NdisDeregisterProtocol( OUT PNDIS_STATUS Status, IN NDIS_HANDLE NdisProtocolHandle );
EXPORT VOID NdisOpenAdapter( OUT PNDIS_STATUS Status, OUT PNDIS_STATUS OpenErrorStatus, OUT PNDIS_HANDLE NdisBindingHandle, OUT PUINT SelectedMediumIndex, IN PNDIS_MEDIUM MediumArray, IN UINT MediumArraySize, IN NDIS_HANDLE NdisProtocolHandle, IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_STRING AdapterName, IN UINT OpenOptions, IN PSTRING AddressingInformation OPTIONAL );
EXPORT VOID NdisCloseAdapter( OUT PNDIS_STATUS Status, IN NDIS_HANDLE NdisBindingHandle );
EXPORT VOID NdisCompleteBindAdapter( IN NDIS_HANDLE BindAdapterContext, IN NDIS_STATUS Status, IN NDIS_STATUS OpenStatus );
EXPORT VOID NdisCompleteUnbindAdapter( IN NDIS_HANDLE UnbindAdapterContext, IN NDIS_STATUS Status );
EXPORT VOID NdisSetProtocolFilter( OUT PNDIS_STATUS Status, IN NDIS_HANDLE NdisBindingHandle, IN RECEIVE_HANDLER ReceiveHandler, IN RECEIVE_PACKET_HANDLER ReceivePacketHandler, IN NDIS_MEDIUM Medium, IN UINT Offset, IN UINT Size, IN PUCHAR Pattern );
EXPORT VOID NdisOpenProtocolConfiguration( OUT PNDIS_STATUS Status, OUT PNDIS_HANDLE ConfigurationHandle, IN PNDIS_STRING ProtocolSection );
EXPORT VOID NdisGetDriverHandle( IN NDIS_HANDLE NdisBindingHandle, OUT PNDIS_HANDLE NdisDriverHandle );
EXPORT VOID NdisReEnumerateProtocolBindings( IN NDIS_HANDLE NdisProtocolHandle );
EXPORT NDIS_STATUS NdisWriteEventLogEntry( IN PVOID LogHandle, IN NDIS_STATUS EventCode, IN ULONG UniqueEventValue, IN USHORT NumStrings, IN PVOID StringsList OPTIONAL, IN ULONG DataSize, IN PVOID Data OPTIONAL );
// // The following routine is used by transports to complete pending // network PnP events. // EXPORT VOID NdisCompletePnPEvent( IN NDIS_STATUS Status, IN NDIS_HANDLE NdisBindingHandle, IN PNET_PNP_EVENT NetPnPEvent );
// // The following routine is used by a transport to query the localized // friendly instance name of the adapter that they are bound to. There // are two variations of this, one uses the binding handle and the other // the binding context. Some transports need this before they bind - like // TCP/IP for instance. // EXPORT NDIS_STATUS NdisQueryAdapterInstanceName( OUT PNDIS_STRING pAdapterInstanceName, IN NDIS_HANDLE NdisBindingHandle );
EXPORT NDIS_STATUS NdisQueryBindInstanceName( OUT PNDIS_STRING pAdapterInstanceName, IN NDIS_HANDLE BindingContext );
// // The following is used by TDI/NDIS interface as part of Network PnP. // For use by TDI alone. // typedef NTSTATUS (*TDI_REGISTER_CALLBACK)( IN PUNICODE_STRING DeviceName, OUT HANDLE * TdiHandle );
typedef NTSTATUS (*TDI_PNP_HANDLER)( IN PUNICODE_STRING UpperComponent, IN PUNICODE_STRING LowerComponent, IN PUNICODE_STRING BindList, IN PVOID ReconfigBuffer, IN UINT ReconfigBufferSize, IN UINT Operation );
EXPORT VOID NdisRegisterTdiCallBack( IN TDI_REGISTER_CALLBACK RegsterCallback, IN TDI_PNP_HANDLER PnPHandler );
EXPORT VOID NdisRegisterTdiPnpHandler( IN TDI_PNP_HANDLER PnPHandler );
VOID NdisReset( OUT PNDIS_STATUS Status, IN NDIS_HANDLE NdisBindingHandle );
VOID NdisRequest( OUT PNDIS_STATUS Status, IN NDIS_HANDLE NdisBindingHandle, IN PNDIS_REQUEST NdisRequest );
#if BINARY_COMPATIBLE
VOID NdisSend( OUT PNDIS_STATUS Status, IN NDIS_HANDLE NdisBindingHandle, IN PNDIS_PACKET Packet );
VOID NdisSendPackets( IN NDIS_HANDLE NdisBindingHandle, IN PPNDIS_PACKET PacketArray, IN UINT NumberOfPackets );
VOID NdisTransferData( OUT PNDIS_STATUS Status, IN NDIS_HANDLE NdisBindingHandle, IN NDIS_HANDLE MacReceiveContext, IN UINT ByteOffset, IN UINT BytesToTransfer, IN OUT PNDIS_PACKET Packet, OUT PUINT BytesTransferred );
#else // BINARY_COMPATIBLE
#ifdef __cplusplus
#define NdisSend(Status, NdisBindingHandle, Packet) \ { \ *(Status) = \ (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->NdisCommonOpenBlock.SendHandler)( \ ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->NdisCommonOpenBlock.BindingHandle, \ (Packet)); \ }
#define NdisSendPackets(NdisBindingHandle, PacketArray, NumberOfPackets) \ { \ (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->NdisCommonOpenBlock.SendPacketsHandler)( \ (PNDIS_OPEN_BLOCK)(NdisBindingHandle), \ (PacketArray), \ (NumberOfPackets)); \ }
#define WanMiniportSend(Status, \ NdisBindingHandle, \ NdisLinkHandle, \ WanPacket) \ { \ *(Status) = \ ((((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->NdisCommonOpenBlock.WanSendHandler))( \ ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->NdisCommonOpenBlock.BindingHandle, \ (NdisLinkHandle), \ (PNDIS_PACKET)(WanPacket)); \ }
#define NdisTransferData(Status, \ NdisBindingHandle, \ MacReceiveContext, \ ByteOffset, \ BytesToTransfer, \ Packet, \ BytesTransferred) \ { \ *(Status) = \ (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->NdisCommonOpenBlock.TransferDataHandler)( \ ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->NdisCommonOpenBlock.BindingHandle, \ (MacReceiveContext), \ (ByteOffset), \ (BytesToTransfer), \ (Packet), \ (BytesTransferred)); \ }
#else
#define NdisSend(Status, NdisBindingHandle, Packet) \ { \ *(Status) = \ (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->SendHandler)( \ ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->BindingHandle, \ (Packet)); \ }
#define NdisSendPackets(NdisBindingHandle, PacketArray, NumberOfPackets) \ { \ (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->SendPacketsHandler)( \ (PNDIS_OPEN_BLOCK)(NdisBindingHandle), \ (PacketArray), \ (NumberOfPackets)); \ }
#define WanMiniportSend(Status, \ NdisBindingHandle, \ NdisLinkHandle, \ WanPacket) \ { \ *(Status) = \ ((((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->WanSendHandler))( \ ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->BindingHandle, \ (NdisLinkHandle), \ (PNDIS_PACKET)(WanPacket)); \ }
#define NdisTransferData(Status, \ NdisBindingHandle, \ MacReceiveContext, \ ByteOffset, \ BytesToTransfer, \ Packet, \ BytesTransferred) \ { \ *(Status) = \ (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->TransferDataHandler)( \ ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->BindingHandle, \ (MacReceiveContext), \ (ByteOffset), \ (BytesToTransfer), \ (Packet), \ (BytesTransferred)); \ }
#endif // ifdef __cplusplus
#endif // BINARY_COMPATIBLE
// // Routines to access packet flags //
/*++
VOID NdisSetSendFlags( IN PNDIS_PACKET Packet, IN UINT Flags );
--*/
#define NdisSetSendFlags(_Packet,_Flags) (_Packet)->Private.Flags = (_Flags)
/*++
VOID NdisQuerySendFlags( IN PNDIS_PACKET Packet, OUT PUINT Flags );
--*/
#define NdisQuerySendFlags(_Packet,_Flags) *(_Flags) = (_Packet)->Private.Flags
// // The following is the minimum size of packets a miniport must allocate // when it indicates packets via NdisMIndicatePacket or NdisMCoIndicatePacket // #define PROTOCOL_RESERVED_SIZE_IN_PACKET (4 * sizeof(PVOID))
EXPORT VOID NdisReturnPackets( IN PNDIS_PACKET * PacketsToReturn, IN UINT NumberOfPackets );
EXPORT PNDIS_PACKET NdisGetReceivedPacket( IN NDIS_HANDLE NdisBindingHandle, IN NDIS_HANDLE MacContext );
// // Macros to portably manipulate NDIS buffers. // #if BINARY_COMPATIBLE
EXPORT ULONG NdisBufferLength( IN PNDIS_BUFFER Buffer );
EXPORT PVOID NdisBufferVirtualAddress( IN PNDIS_BUFFER Buffer );
#else // BINARY_COMPATIBLE
#define NdisBufferLength(Buffer) MmGetMdlByteCount(Buffer) #define NdisBufferVirtualAddress(_Buffer) MmGetSystemAddressForMdl(_Buffer) #define NdisBufferVirtualAddressSafe(_Buffer, _Priority) MmGetSystemAddressForMdlSafe(_Buffer, _Priority)
#endif // BINARY_COMPATIBLE
// // Ndis 5.1 entry points for setting/gettign packet's CancelId and cancelling send packets //
// #if (defined(NDIS50) || defined(NDIS51) || defined(NDIS50_MINIPORT) || defined(NDIS51_MINIPORT)) /* EXPORT VOID NdisSetPacketCancelId( IN PNDIS_PACKET Packet, IN PVOID CancelId ); */ #define NdisSetPacketCancelId(_Packet, _CancelId) NDIS_SET_PACKET_CANCEL_ID(_Packet, _CancelId);
/* EXPORT PVOID NdisGetPacketCancelId( IN PNDIS_PACKET Packet ); */ #define NdisGetPacketCancelId(_Packet) NDIS_GET_PACKET_CANCEL_ID(_Packet);
EXPORT VOID NdisCancelSendPackets( IN NDIS_HANDLE NdisBindingHandle, IN PVOID CancelId );
EXPORT NDIS_STATUS NdisQueryPendingIOCount( IN PVOID NdisBindingHandle, IN OUT PULONG IoCount ); EXPORT UCHAR NdisGeneratePartialCancelId( VOID ); // #endif // NDIS51
|