44 Request.DATA.SET_INFORMATION.InformationBufferLength =
Length;
50 Request.DATA.QUERY_INFORMATION.InformationBufferLength =
Length;
252 (
"Ether Type = %x Total = %d Packet %x Payload %x\n",
256 NdisBuffer->Next =
NULL;
260 ListEntry = ListEntry->
Flink)
276 Tail.Overlay.ListEntry);
281 Header = ReadIrp->AssociatedIrp.SystemBuffer;
283 (
"Writing packet at %x\n",
Header));
288 Header->Fixed.PacketType = PacketType;
304 Header->Fixed.Mdl = NdisBuffer;
316 #error move this out of SEH! 322 (
"Failed write to packet in client\n"));
359 UINT HeaderBufferSize,
360 PVOID LookaheadBuffer,
361 UINT LookaheadBufferSize,
379 if (HeaderBufferSize < Adapter->HeaderSize)
397 (
"pretransfer LookaheadBufferSize %d packsize %d\n",
407 (
"pretransfer LookaheadBufferSize %d HeaderBufferSize %d packsize %d\n",
408 LookaheadBufferSize,HeaderBufferSize,
PacketSize));
552 UINT Size, PayloadSize = OverallLength -
564 if (!Adapter)
goto end;
567 if (!EthHeader)
goto end;
580 memset(EthHeader->DstAddr, -1,
sizeof(EthHeader->DstAddr));
590 (
"Writing %d bytes of payload\n", PayloadSize));
605 return OverallLength;
703 switch (Adapter->
Media)
791 Adapter->
Speed = Speed * 100
L;
813 (
"Could not set lookahead buffer size (0x%X).\n",
961 NextEntry = CurrentEntry->
Flink;
965 CurrentEntry = NextEntry;
982 PCHAR ProtoNumbersToMatch;
986 EaInfo =
Irp->AssociatedIrp.SystemBuffer;
1006 ProtoNumbersToMatch,
1019 Irp->IoStatus.Information = 0;
1053 Tail.Overlay.ListEntry);
1054 ReadIrp->IoStatus.Information = 0;
1082 ListEntry = ListEntry->
Flink)
1111 Irp->IoStatus.Information =
1134 &
Irp->Tail.Overlay.ListEntry,
1138 Proto->ReadIrpListHead.Flink,
1139 Irp->Tail.Overlay.ListEntry.Flink));
1156 UINT AdapterCount = 0;
1166 ListEntry = ListEntry->
Flink)
1172 AdapterCount *
sizeof(
UINT))
1176 ListEntry = ListEntry->
Flink)
1179 *
Output++ = Adapter->Index;
1191 (
PCHAR)
Irp->AssociatedIrp.SystemBuffer;
1209 PUINT AdapterIndexPtr =
Irp->AssociatedIrp.SystemBuffer;
1213 PCHAR Writing =
Irp->AssociatedIrp.SystemBuffer;
1222 sizeof(*AdapterIndexPtr))
1230 for (ListEntry = Adapter->AddressList.Flink;
1231 ListEntry != &Adapter->AddressList;
1232 ListEntry = ListEntry->Flink)
1236 Address->ClientPart.HWAddressLen);
1240 for (ListEntry = Adapter->ForeignList.Flink;
1241 ListEntry != &Adapter->ForeignList;
1242 ListEntry = ListEntry->Flink)
1246 Address->ClientPart.HWAddressLen);
1248 BytesNeeded += Adapter->RegistryPath.Length;
1255 Info->Index = Adapter->Index;
1256 Info->Media = Adapter->Media;
1257 Info->Speed = Adapter->Speed;
1260 Info->Overhead = Adapter->HeaderSize;
1261 Info->MTU = Adapter->MTU;
1262 Info->RegKeySize = Adapter->RegistryPath.Length;
1265 Writing +=
sizeof(*Info);
1268 Adapter->RegistryPath.Length);
1271 Writing += Adapter->RegistryPath.Length;
1273 for (ListEntry = Adapter->AddressList.Flink;
1274 ListEntry != &Adapter->AddressList;
1275 ListEntry = ListEntry->Flink)
1280 Address->ClientPart.HWAddressLen);
1282 Writing += AddrSize;
1285 for (ListEntry = Adapter->ForeignList.Flink;
1286 ListEntry != &Adapter->ForeignList;
1287 ListEntry = ListEntry->Flink)
1293 Address->ClientPart.HWAddressLen);
1295 Writing += AddrSize;
1298 ASSERT(BytesNeeded == Writing -
Irp->AssociatedIrp.SystemBuffer);
1309 Irp->IoStatus.Information = BytesNeeded;
1334 sizeof(Proto->Buffered))
1336 Irp->AssociatedIrp.SystemBuffer,
1337 sizeof(Proto->Buffered));
1346 Irp->IoStatus.Information = 0;
1406 Irp->IoStatus.Information = 0;
1419 (
"Irp: Unknown Major code was %x\n",
UNICODE_STRING RegistryPath
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _In_ PWDF_USB_CONTROL_SETUP_PACKET _In_opt_ PWDF_MEMORY_DESCRIPTOR _Out_opt_ PULONG BytesTransferred
_In_opt_ NDIS_HANDLE _In_opt_ NDIS_HANDLE _Inout_ PNDIS_REQUEST NdisRequest
VOID NTAPI ProtocolStatusComplete(NDIS_HANDLE NdisBindingContext)
Called by NDIS when a status-change has occurred.
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define NDIS_STATUS_CLOSED
_Must_inspect_result_ _Out_ PNDIS_STATUS _Out_ PNDIS_STATUS OpenErrorStatus
_In_ NDIS_HANDLE _In_ PNDIS_PACKET Packet
NDIS_STATUS LANRegisterAdapter(PNDIS_STRING AdapterName, PNDIS_STRING RegistryPath)
Registers protocol with an NDIS adapter.
VOID NTAPI ProtocolResetComplete(NDIS_HANDLE BindingContext, NDIS_STATUS Status)
Called by NDIS to complete resetting an adapter.
enum _NDIS_MEDIUM NDIS_MEDIUM
#define NDIS_VERSION_MAJOR
#define IOCTL_IF_ADAPTER_INFO
VOID NTAPI ProtocolSendComplete(NDIS_HANDLE BindingContext, PNDIS_PACKET Packet, NDIS_STATUS Status)
Called by NDIS to complete sending process.
#define NDIS_STATUS_PENDING
NDIS_HANDLE NdisProtocolHandle
REQUEST_COMPLETE_HANDLER RequestCompleteHandler
IN BOOLEAN OUT PSTR Buffer
VOID EXPORT NdisRegisterProtocol(OUT PNDIS_STATUS Status, OUT PNDIS_HANDLE NdisProtocolHandle, IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics, IN UINT CharacteristicsLength)
#define STATUS_INVALID_PARAMETER
_In_ NDIS_STATUS _In_ NDIS_STATUS OpenStatus
void GetDataPtr(PNDIS_PACKET Packet, UINT Offset, PCHAR *DataOut, PUINT Size)
NTSTATUS NTAPI LanAdapterInfo(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
#define FILE_DEVICE_NAMED_PIPE
PLIST_ENTRY NTAPI ExInterlockedInsertTailList(IN OUT PLIST_ENTRY ListHead, IN OUT PLIST_ENTRY ListEntry, IN OUT PKSPIN_LOCK Lock)
LIST_ENTRY AdapterListHead
VOID NTAPI KeAcquireSpinLockAtDpcLevel(IN PKSPIN_LOCK SpinLock)
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
VOID NTAPI ProtocolCloseAdapterComplete(NDIS_HANDLE BindingContext, NDIS_STATUS Status)
Called by NDIS to complete closing an adapter.
VOID FreeAdapter(PLAN_ADAPTER Adapter)
Frees memory for a LAN_ADAPTER structure.
#define OID_GEN_CURRENT_PACKET_FILTER
VOID EXPORT NdisDeregisterProtocol(OUT PNDIS_STATUS Status, IN NDIS_HANDLE NdisProtocolHandle)
IN PVOID IN PVOID IN USHORT IN USHORT Size
#define FreeNdisPacket(x)
CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler
LONG NTAPI KeSetEvent(IN PKEVENT Event, IN KPRIORITY Increment, IN BOOLEAN Wait)
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler
#define LAN_STATE_STOPPED
NDIS_STATUS NDISCall(PLAN_ADAPTER Adapter, NDIS_REQUEST_TYPE Type, NDIS_OID OID, PVOID Buffer, UINT Length)
Send a request to NDIS.
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
VOID NTAPI ProtocolBindAdapter(OUT PNDIS_STATUS Status, IN NDIS_HANDLE BindContext, IN PNDIS_STRING DeviceName, IN PVOID SystemSpecific1, IN PVOID SystemSpecific2)
Called by NDIS during NdisRegisterProtocol to set up initial bindings, and periodically thereafter as...
VOID LANUnregisterProtocol(VOID)
Unregisters this protocol driver with NDIS.
STATUS_HANDLER StatusHandler
VOID LANTransmit(PLAN_ADAPTER Adapter, PNDIS_PACKET NdisPacket, PVOID LinkAddress, USHORT Type)
Transmits a packet ARGUMENTS:
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
#define STATUS_BUFFER_TOO_SMALL
LIST_ENTRY ProtocolListHead
#define NDIS_STATUS_NOT_SUPPORTED
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
#define NDIS_VERSION_MINOR
_In_ PDEVICE_OBJECT DeviceObject
return STATUS_NOT_IMPLEMENTED
NDIS_STATUS NTAPI ProtocolReceive(NDIS_HANDLE BindingContext, NDIS_HANDLE MacReceiveContext, PVOID HeaderBuffer, UINT HeaderBufferSize, PVOID LookaheadBuffer, UINT LookaheadBufferSize, UINT PacketSize)
Called by NDIS when a packet has been received on the physical link.
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
VOID NTAPI ProtocolStatus(NDIS_HANDLE BindingContext, NDIS_STATUS GenerelStatus, PVOID StatusBuffer, UINT StatusBufferSize)
Called by NDIS when the underlying driver has changed state.
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
NTSTATUS NTAPI LanCreateProtocol(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NDIS_STATUS LANUnregisterAdapter(PLAN_ADAPTER Adapter)
Unregisters protocol with NDIS adapter.
NTSTATUS NTAPI LanEnumAdapters(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
#define LAN_ADDR_SIZE(AddrLen, HWAddrLen)
#define IOCTL_IF_ENUM_ADAPTERS
#define EXCEPTION_EXECUTE_HANDLER
VOID EXPORT NdisSend(OUT PNDIS_STATUS Status, IN NDIS_HANDLE NdisBindingHandle, IN PNDIS_PACKET Packet)
FORCEINLINE VOID KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock)
#define AllocatePacketWithBuffer(x, y, z)
#define IoCompleteRequest
BIND_HANDLER BindAdapterHandler
FORCEINLINE PLIST_ENTRY RemoveHeadList(_Inout_ PLIST_ENTRY ListHead)
VOID CloseNdisPools(VOID)
#define IOCTL_IF_BUFFERED_MODE
NTSTATUS NTAPI LanDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
RESET_COMPLETE_HANDLER ResetCompleteHandler
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
VOID EXPORT NdisGetFirstBufferFromPacket(IN PNDIS_PACKET _Packet, OUT PNDIS_BUFFER *_FirstBuffer, OUT PVOID *_FirstBufferVA, OUT PUINT _FirstBufferLength, OUT PUINT _TotalBufferLength)
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
#define IO_NETWORK_INCREMENT
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler
NTSTATUS NTAPI LanWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS LANRegisterProtocol(PNDIS_STRING Name)
Registers this protocol driver with NDIS.
#define LA_DbgPrint(_t_, _x_)
NTSTATUS NTAPI LanCloseProtocol(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
#define LAN_STATE_RESETTING
struct _LIST_ENTRY * Flink
struct LAN_ADAPTER * PLAN_ADAPTER
#define OID_GEN_MAXIMUM_FRAME_SIZE
#define NDIS_STATUS_NOT_ACCEPTED
TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler
struct _ETH_HEADER ETH_HEADER
#define OID_GEN_MAXIMUM_TOTAL_SIZE
#define NT_SUCCESS(StatCode)
#define STATUS_NO_SUCH_DEVICE
_In_ WDFCOLLECTION _In_ ULONG Index
#define IEEE_802_ADDR_LENGTH
VOID NTAPI KeReleaseSpinLockFromDpcLevel(IN PKSPIN_LOCK SpinLock)
#define KeAcquireSpinLock(sl, irql)
PDEVICE_OBJECT LanDeviceObject
VOID NTAPI LanUnload(PDRIVER_OBJECT DriverObject)
#define NDIS_PACKET_TYPE_MULTICAST
NTSTATUS NTAPI LanReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
PLAN_ADAPTER FindAdapterByIndex(PLAN_DEVICE_EXT DeviceExt, UINT Index)
STATUS_COMPLETE_HANDLER StatusCompleteHandler
#define STATUS_UNSUCCESSFUL
#define NDIS_STATUS_SUCCESS
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define ExAllocatePool(type, size)
RECEIVE_HANDLER ReceiveHandler
_In_ WDFREQUEST _In_ size_t _In_ size_t _In_ ULONG IoControlCode
_In_ PVOID _In_ PVOID SystemSpecific2
#define exAllocatePool(x, y)
VOID BindAdapter(PLAN_ADAPTER Adapter, PNDIS_STRING RegistryPath)
Binds a LAN adapter to IP layer.
VOID NTAPI ProtocolRequestComplete(NDIS_HANDLE BindingContext, PNDIS_REQUEST NdisRequest, NDIS_STATUS Status)
Called by NDIS to complete a request.
#define OID_GEN_LINK_SPEED
NDIS_STATUS InitNdisPools(VOID)
UCHAR HWAddress[IEEE_802_ADDR_LENGTH]
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
SEND_COMPLETE_HANDLER SendCompleteHandler
#define OID_GEN_MAXIMUM_SEND_PACKETS
enum _NDIS_REQUEST_TYPE NDIS_REQUEST_TYPE
#define KeInitializeEvent(pEvt, foo, foo2)
struct _LAN_DEVICE_EXT * PLAN_DEVICE_EXT
_In_opt_ NDIS_HANDLE _In_ NDIS_STATUS _In_ PVOID _In_ UINT StatusBufferSize
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define STATUS_ACCESS_VIOLATION
#define InitializeListHead(ListHead)
_In_ PIO_STACK_LOCATION IrpSp
VOID EXPORT 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)
#define KeReleaseSpinLock(sl, irql)
_In_opt_ NDIS_HANDLE _In_ NDIS_STATUS _In_ PVOID StatusBuffer
NTSTATUS NTAPI LanSetBufferedMode(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
VOID EXPORT NdisCloseAdapter(OUT PNDIS_STATUS Status, IN NDIS_HANDLE NdisBindingHandle)
NTSTATUS NTAPI DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegsitryPath)
#define NDIS_STATUS_RESOURCES
NTSTATUS NTAPI IoCreateDevice(IN PDRIVER_OBJECT DriverObject, IN ULONG DeviceExtensionSize, IN PUNICODE_STRING DeviceName, IN DEVICE_TYPE DeviceType, IN ULONG DeviceCharacteristics, IN BOOLEAN Exclusive, OUT PDEVICE_OBJECT *DeviceObject)
#define RtlZeroMemory(Destination, Length)
#define RtlCopyMemory(Destination, Source, Length)
#define OID_802_3_CURRENT_ADDRESS
VOID NTAPI ProtocolOpenAdapterComplete(NDIS_HANDLE BindingContext, NDIS_STATUS Status, NDIS_STATUS OpenErrorStatus)
Called by NDIS to complete opening of an adapter.
#define _SEH2_EXCEPT(...)
#define LAN_STATE_STARTED
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
_Must_inspect_result_ _Out_ PNDIS_STATUS _Out_ PNDIS_STATUS _Out_ PNDIS_HANDLE _Out_ PUINT _In_ UINT _In_ NDIS_HANDLE _In_ NDIS_HANDLE _In_ PNDIS_STRING AdapterName
struct _LAN_ADAPTER_INFO_S * PLAN_ADAPTER_INFO_S
VOID NTAPI ProtocolReceiveComplete(NDIS_HANDLE BindingContext)
Called by NDIS when we're done receiving data.
VOID EXPORT 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)
#define OID_GEN_CURRENT_LOOKAHEAD
VOID NTAPI ProtocolTransferDataComplete(NDIS_HANDLE BindingContext, PNDIS_PACKET Packet, NDIS_STATUS Status, UINT BytesTransferred)
Called by NDIS to complete reception of data.
static NDIS_MEDIUM MediaArray[MEDIA_ARRAY_SIZE]
LIST_ENTRY ReadIrpListHead
#define NDIS_PACKET_TYPE_DIRECTED
#define IRP_MJ_DEVICE_CONTROL
#define NDIS_PACKET_TYPE_BROADCAST
#define RTL_CONSTANT_STRING(s)
UINT LANTransmitInternal(PLAN_PACKET_HEADER ToWrite, UINT OverallLength)