From f71f7db63caeffdc92ede12bf15e8f7d184addd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Hentschel?= Date: Fri, 19 Feb 2016 23:43:44 +0100 Subject: [PATCH] ndis.sys: Add NdisRegisterProtocol stub. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: André Hentschel Signed-off-by: Alexandre Julliard --- dlls/ndis.sys/main.c | 8 ++ dlls/ndis.sys/ndis.sys.spec | 2 +- include/ddk/ndis.h | 183 +++++++++++++++++++++++++++++++++++- 3 files changed, 191 insertions(+), 2 deletions(-) diff --git a/dlls/ndis.sys/main.c b/dlls/ndis.sys/main.c index 6e1bb9b06ee..90c8c3cc886 100644 --- a/dlls/ndis.sys/main.c +++ b/dlls/ndis.sys/main.c @@ -2,6 +2,7 @@ * ndis.sys * * Copyright 2014 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 @@ -49,6 +50,13 @@ void WINAPI NdisAllocateSpinLock(NDIS_SPIN_LOCK *lock) FIXME("(%p): stub\n", lock); } +void WINAPI NdisRegisterProtocol(NDIS_STATUS *status, NDIS_HANDLE *handle, + NDIS_PROTOCOL_CHARACTERISTICS *prot, UINT len) +{ + FIXME("(%p, %p, %p, %u): stub\n", status, handle, prot, len); + *status = NDIS_STATUS_FAILURE; +} + CCHAR WINAPI NdisSystemProcessorCount(void) { SYSTEM_INFO si; diff --git a/dlls/ndis.sys/ndis.sys.spec b/dlls/ndis.sys/ndis.sys.spec index 8957d8f84b7..b478c39a0f4 100644 --- a/dlls/ndis.sys/ndis.sys.spec +++ b/dlls/ndis.sys/ndis.sys.spec @@ -238,7 +238,7 @@ @ stub NdisReadNetworkAddress @ stub NdisReadPciSlotInformation @ stub NdisReadPcmciaAttributeMemory -@ stub NdisRegisterProtocol +@ stdcall NdisRegisterProtocol(ptr ptr ptr long) @ stub NdisRegisterTdiCallBack @ stub NdisReleaseReadWriteLock @ stub NdisReleaseSpinLock diff --git a/include/ddk/ndis.h b/include/ddk/ndis.h index ffa13969db3..a4b0e540fa1 100644 --- a/include/ddk/ndis.h +++ b/include/ddk/ndis.h @@ -2,6 +2,7 @@ * 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 @@ -20,8 +21,97 @@ #ifndef _NDIS_ #define _NDIS_ -typedef void *NDIS_HANDLE, *PNDIS_HANDLE; +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 { @@ -29,10 +119,101 @@ typedef struct _NDIS_SPIN_LOCK 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_ */