www.pudn.com > ntsniff.zip > PACKET.H
/* * NtSniff by Davide Libenzi ( To rebuild NtSniff You need Microsoft SDK & DDK ) * Copyright (C) 1999 Davide Libenzi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Davide Libenzi* */ #define MAX_REQUESTS 16 typedef struct _INTERNAL_REQUEST { LIST_ENTRY ListElement; PIRP Irp; NDIS_REQUEST Request; } INTERNAL_REQUEST, *PINTERNAL_REQUEST; // // Port device extension. // typedef struct _DEVICE_EXTENSION { PDEVICE_OBJECT DeviceObject; NDIS_HANDLE NdisProtocolHandle; NDIS_STRING AdapterName; NDIS_STRING DeviceName; // PWSTR BindString; // PWSTR ExportString; } DEVICE_EXTENSION, *PDEVICE_EXTENSION; typedef struct _OPEN_INSTANCE { PDEVICE_EXTENSION DeviceExtension; NDIS_HANDLE AdapterHandle; NDIS_HANDLE PacketPool; KSPIN_LOCK RcvQSpinLock; LIST_ENTRY RcvList; PIRP OpenCloseIrp; KSPIN_LOCK RequestSpinLock; LIST_ENTRY RequestList; LIST_ENTRY ResetIrpList; INTERNAL_REQUEST Requests[MAX_REQUESTS]; NDIS_EVENT CleanupEvent; ULONG IrpCount; } OPEN_INSTANCE, *POPEN_INSTANCE; typedef struct _PACKET_RESERVED { LIST_ENTRY ListElement; PIRP Irp; PMDL pMdl; } PACKET_RESERVED, *PPACKET_RESERVED; #define ETHERNET_HEADER_LENGTH 14 #define RESERVED(_p) ((PPACKET_RESERVED)((_p)->ProtocolReserved)) #define TRANSMIT_PACKETS 64 VOID PacketOpenAdapterComplete( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status, IN NDIS_STATUS OpenErrorStatus ); VOID PacketCloseAdapterComplete( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status ); NDIS_STATUS PacketReceiveIndicate( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE MacReceiveContext, IN PVOID HeaderBuffer, IN UINT HeaderBufferSize, IN PVOID LookAheadBuffer, IN UINT LookaheadBufferSize, IN UINT PacketSize ); VOID PacketReceiveComplete( IN NDIS_HANDLE ProtocolBindingContext ); VOID PacketRequestComplete( IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_REQUEST pRequest, IN NDIS_STATUS Status ); VOID PacketSendComplete( IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_PACKET pPacket, IN NDIS_STATUS Status ); VOID PacketResetComplete( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status ); VOID PacketStatus( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status, IN PVOID StatusBuffer, IN UINT StatusBufferSize ); VOID PacketStatusComplete( IN NDIS_HANDLE ProtocolBindingContext ); VOID PacketTransferDataComplete( IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_PACKET Packet, IN NDIS_STATUS Status, IN UINT BytesTransferred ); VOID PacketRemoveReference( IN PDEVICE_EXTENSION DeviceExtension ); NTSTATUS PacketCleanup( IN PDEVICE_OBJECT DeviceObject, IN PIRP FlushIrp ); NTSTATUS PacketShutdown( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); VOID PacketUnload( IN PDRIVER_OBJECT DriverObject ); NTSTATUS PacketOpen( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS PacketClose( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS PacketWrite( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS PacketRead( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS PacketIoControl( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); VOID IoIncrement( IN OUT POPEN_INSTANCE Open ); VOID IoDecrement( IN OUT POPEN_INSTANCE Open ); NTSTATUS PacketCancelReadIrps( IN POPEN_INSTANCE Open ); NTSTATUS PacketCleanup( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp );