220 lines
7.3 KiB
C
220 lines
7.3 KiB
C
/*
|
|
* ndis.h
|
|
*
|
|
* Copyright 2015 Austin English
|
|
* Copyright 2016 André Hentschel
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
|
*/
|
|
#ifndef _NDIS_
|
|
#define _NDIS_
|
|
|
|
typedef ULONG NDIS_AF, *PNDIS_AF;
|
|
typedef MDL NDIS_BUFFER, *PNDIS_BUFFER;
|
|
typedef void *NDIS_HANDLE, *PNDIS_HANDLE, *PNDIS_PACKET_POOL;
|
|
typedef ULONG NDIS_OID, *PNDIS_OID;
|
|
typedef int NDIS_STATUS, *PNDIS_STATUS;
|
|
typedef UNICODE_STRING NDIS_STRING, *PNDIS_STRING;
|
|
|
|
typedef enum _NDIS_REQUEST_TYPE
|
|
{
|
|
NdisRequestQueryInformation,
|
|
NdisRequestSetInformation,
|
|
NdisRequestQueryStatistics,
|
|
NdisRequestOpen,
|
|
NdisRequestClose,
|
|
NdisRequestSend,
|
|
NdisRequestTransferData,
|
|
NdisRequestReset,
|
|
NdisRequestGeneric1,
|
|
NdisRequestGeneric2,
|
|
NdisRequestGeneric3,
|
|
NdisRequestGeneric4,
|
|
NdisRequestMethod,
|
|
} NDIS_REQUEST_TYPE, *PNDIS_REQUEST_TYPE;
|
|
|
|
typedef enum _NET_PNP_EVENT_CODE
|
|
{
|
|
NetEventSetPower,
|
|
NetEventQueryPower,
|
|
NetEventQueryRemoveDevice,
|
|
NetEventCancelRemoveDevice,
|
|
NetEventReconfigure,
|
|
NetEventBindList,
|
|
NetEventBindsComplete,
|
|
NetEventPnPCapabilities,
|
|
NetEventPause,
|
|
NetEventRestart,
|
|
NetEventPortActivation,
|
|
NetEventPortDeactivation,
|
|
NetEventIMReEnableDevice,
|
|
NetEventMaximum,
|
|
} NET_PNP_EVENT_CODE, *PNET_PNP_EVENT_CODE;
|
|
|
|
|
|
typedef struct _NET_PNP_EVENT
|
|
{
|
|
NET_PNP_EVENT_CODE NetEvent;
|
|
PVOID Buffer;
|
|
ULONG BufferLength;
|
|
ULONG_PTR NdisReserved[4];
|
|
ULONG_PTR TransportReserved[4];
|
|
ULONG_PTR TdiReserved[4];
|
|
ULONG_PTR TdiClientReserved[4];
|
|
} NET_PNP_EVENT, *PNET_PNP_EVENT;
|
|
|
|
typedef struct _NDIS_PACKET_PRIVATE
|
|
{
|
|
UINT PhysicalCount;
|
|
UINT TotalLength;
|
|
PNDIS_BUFFER Head;
|
|
PNDIS_BUFFER Tail;
|
|
PNDIS_PACKET_POOL Pool;
|
|
UINT Count;
|
|
ULONG Flags;
|
|
BOOLEAN ValidCounts;
|
|
UCHAR NdisPacketFlags;
|
|
USHORT NdisPacketOobOffset;
|
|
} NDIS_PACKET_PRIVATE, *PNDIS_PACKET_PRIVATE;
|
|
|
|
typedef struct _NDIS_PACKET
|
|
{
|
|
NDIS_PACKET_PRIVATE Private;
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
UCHAR MiniportReserved[2 * sizeof(void*)];
|
|
UCHAR WrapperReserved[2 * sizeof(void*)];
|
|
} DUMMYSTRUCTNAME;
|
|
struct
|
|
{
|
|
UCHAR MiniportReservedEx[3 * sizeof(void*)];
|
|
UCHAR WrapperReservedEx[sizeof(void*)];
|
|
} DUMMYSTRUCTNAME1;
|
|
struct
|
|
{
|
|
UCHAR MacReserved[4 * sizeof(void*)];
|
|
} DUMMYSTRUCTNAME2;
|
|
} DUMMYUNIONNAME;
|
|
ULONG_PTR Reserved[2];
|
|
UCHAR ProtocolReserved[1];
|
|
} NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;
|
|
|
|
typedef struct _NDIS_SPIN_LOCK
|
|
{
|
|
KSPIN_LOCK SpinLock;
|
|
KIRQL OldIrql;
|
|
} NDIS_SPIN_LOCK, *PNDIS_SPIN_LOCK;
|
|
|
|
|
|
typedef struct _NDIS_REQUEST
|
|
{
|
|
UCHAR MacReserved[4 * sizeof(void*)];
|
|
NDIS_REQUEST_TYPE RequestType;
|
|
union _DATA
|
|
{
|
|
struct QUERY_INFORMATION
|
|
{
|
|
NDIS_OID Oid;
|
|
PVOID InformationBuffer;
|
|
UINT InformationBufferLength;
|
|
UINT BytesWritten;
|
|
UINT BytesNeeded;
|
|
} QUERY_INFORMATION;
|
|
struct SET_INFORMATION
|
|
{
|
|
NDIS_OID Oid;
|
|
PVOID InformationBuffer;
|
|
UINT InformationBufferLength;
|
|
UINT BytesRead;
|
|
UINT BytesNeeded;
|
|
} SET_INFORMATION;
|
|
} DATA;
|
|
UCHAR NdisReserved[9 * sizeof(void*)];
|
|
union
|
|
{
|
|
UCHAR CallMgrReserved[2 * sizeof(void*)];
|
|
UCHAR ProtocolReserved[2 * sizeof(void*)];
|
|
} DUMMYUNIONNAME;
|
|
UCHAR MiniportReserved[2 * sizeof(void*)];
|
|
} NDIS_REQUEST, *PNDIS_REQUEST;
|
|
|
|
typedef struct _CO_ADDRESS_FAMILY
|
|
{
|
|
NDIS_AF AddressFamily;
|
|
ULONG MajorVersion;
|
|
ULONG MinorVersion;
|
|
} CO_ADDRESS_FAMILY, *PCO_ADDRESS_FAMILY;
|
|
|
|
|
|
typedef void (NTAPI *CO_AF_REGISTER_NOTIFY_HANDLER)(NDIS_HANDLE, PCO_ADDRESS_FAMILY);
|
|
typedef void (NTAPI *CO_SEND_COMPLETE_HANDLER)(NDIS_STATUS, NDIS_HANDLE, PNDIS_PACKET);
|
|
typedef void (NTAPI *CO_STATUS_HANDLER)(NDIS_HANDLE, NDIS_HANDLE, NDIS_STATUS, PVOID, UINT);
|
|
typedef UINT (NTAPI *CO_RECEIVE_PACKET_HANDLER)(NDIS_HANDLE, NDIS_HANDLE, PNDIS_PACKET);
|
|
typedef void (NTAPI *OPEN_ADAPTER_COMPLETE_HANDLER)(NDIS_HANDLE, NDIS_STATUS, NDIS_STATUS);
|
|
typedef void (NTAPI *CLOSE_ADAPTER_COMPLETE_HANDLER)(NDIS_HANDLE, NDIS_STATUS);
|
|
typedef void (NTAPI *RESET_COMPLETE_HANDLER)(NDIS_HANDLE, NDIS_STATUS);
|
|
typedef void (NTAPI *REQUEST_COMPLETE_HANDLER)(NDIS_HANDLE, PNDIS_REQUEST, NDIS_STATUS);
|
|
typedef void (NTAPI *STATUS_HANDLER)(NDIS_HANDLE, NDIS_STATUS, PVOID, UINT);
|
|
typedef void (NTAPI *STATUS_COMPLETE_HANDLER)(NDIS_HANDLE);
|
|
typedef void (NTAPI *SEND_COMPLETE_HANDLER)(NDIS_HANDLE, PNDIS_PACKET, NDIS_STATUS);
|
|
typedef void (NTAPI *TRANSFER_DATA_COMPLETE_HANDLER)(NDIS_HANDLE, PNDIS_PACKET, NDIS_STATUS, UINT);
|
|
typedef NDIS_STATUS (NTAPI *RECEIVE_HANDLER)(NDIS_HANDLE, NDIS_HANDLE, PVOID, UINT, PVOID, UINT, UINT);
|
|
typedef void (NTAPI *RECEIVE_COMPLETE_HANDLER)(NDIS_HANDLE);
|
|
typedef INT (NTAPI *RECEIVE_PACKET_HANDLER)(NDIS_HANDLE, PNDIS_PACKET);
|
|
typedef void (NTAPI *BIND_HANDLER)(PNDIS_STATUS, NDIS_HANDLE, PNDIS_STRING, PVOID, PVOID);
|
|
typedef void (NTAPI *UNBIND_HANDLER)(PNDIS_STATUS, NDIS_HANDLE, NDIS_HANDLE);
|
|
typedef NDIS_STATUS (NTAPI *PNP_EVENT_HANDLER)(NDIS_HANDLE, PNET_PNP_EVENT);
|
|
typedef void (NTAPI *UNLOAD_PROTOCOL_HANDLER)(void);
|
|
|
|
|
|
typedef struct _NDIS_PROTOCOL_CHARACTERISTICS
|
|
{
|
|
UCHAR MajorNdisVersion;
|
|
UCHAR MinorNdisVersion;
|
|
USHORT Filler;
|
|
UINT Reserved;
|
|
OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler;
|
|
CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler;
|
|
SEND_COMPLETE_HANDLER SendCompleteHandler;
|
|
TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
|
|
RESET_COMPLETE_HANDLER ResetCompleteHandler;
|
|
REQUEST_COMPLETE_HANDLER RequestCompleteHandler;
|
|
RECEIVE_HANDLER ReceiveHandler;
|
|
RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;
|
|
STATUS_HANDLER StatusHandler;
|
|
STATUS_COMPLETE_HANDLER StatusCompleteHandler;
|
|
NDIS_STRING Name;
|
|
RECEIVE_PACKET_HANDLER ReceivePacketHandler;
|
|
BIND_HANDLER BindAdapterHandler;
|
|
UNBIND_HANDLER UnbindAdapterHandler;
|
|
PNP_EVENT_HANDLER PnPEventHandler;
|
|
UNLOAD_PROTOCOL_HANDLER UnloadHandler;
|
|
CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler;
|
|
CO_STATUS_HANDLER CoStatusHandler;
|
|
CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler;
|
|
CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
|
|
} NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;
|
|
|
|
#define NDIS_STATUS_FAILURE ((NDIS_STATUS) STATUS_UNSUCCESSFUL)
|
|
|
|
NDIS_STATUS WINAPI NdisAllocateMemoryWithTag(void **, UINT, ULONG);
|
|
void WINAPI NdisAllocateSpinLock(NDIS_SPIN_LOCK *);
|
|
void WINAPI NdisRegisterProtocol(NDIS_STATUS *, NDIS_HANDLE *, NDIS_PROTOCOL_CHARACTERISTICS *, UINT);
|
|
CCHAR WINAPI NdisSystemProcessorCount(void);
|
|
|
|
#endif /* _NDIS_ */
|