12 #define UINT16_MAX (65535U) 36 switch (IcmpHeader->
Type)
41 switch (IcmpHeader->
Code)
78 AddrFile->RegisteredReceiveDatagramHandler =
FALSE;
109 Irp->IoStatus.Information = CurrentStack->
Parameters.DeviceIoControl.OutputBufferLength;
118 Irp->IoStatus.Information =
sizeof(*ReplyBuffer);
182 RoundTripTime = (CurrentTime -
Context->StartTicks) * 1000 /
Context->TimerResolution.QuadPart;
212 CurrentReply->
Data = CurrentUserBuffer +
Context->RemainingSize - _DataSize;
215 Context->RemainingSize -= _DataSize;
223 if (OptionsLength > 0 &&
Context->RemainingSize > 0)
231 Context->RemainingSize -= _OptSize;
333 LocalAddressTa.
Address[0].Address[0].in_addr = 0;
392 AddrFile->
TTL = SavedTtl;
KEVENT DatagramProcessedEvent
#define ICMP_CODE_TE_REASSEMBLY
unsigned __int3264 UINT_PTR
#define TI_DbgPrint(_t_, _x_)
NTSTATUS NTAPI ReceiveDatagram(_In_opt_ PVOID TdiEventContext, _In_ LONG SourceAddressLength, _In_reads_bytes_(SourceAddressLength) PVOID SourceAddress, _In_ LONG OptionsLength, _In_reads_bytes_opt_(OptionsLength) PVOID Options, _In_ ULONG ReceiveDatagramFlags, _In_ ULONG BytesIndicated, _In_ ULONG BytesAvailable, _Out_ ULONG *OutBytesTaken, _In_ PVOID Tsdu, _Out_opt_ PIRP *IoRequestPacket)
NTSTATUS FileCloseAddress(PTDI_REQUEST Request)
LARGE_INTEGER NTAPI KeQueryPerformanceCounter(IN PLARGE_INTEGER PerformanceFreq)
BOOLEAN RegisteredReceiveDatagramHandler
BOOLEAN NTAPI KeSetTimer(IN OUT PKTIMER Timer, IN LARGE_INTEGER DueTime, IN PKDPC Dpc OPTIONAL)
#define STATUS_INSUFFICIENT_RESOURCES
_Must_inspect_result_ _In_ PWDF_DPC_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFDPC * Dpc
#define ICMP_CODE_DU_HOST_UNREACH
struct ICMP_HEADER ICMP_HEADER
IN BOOLEAN OUT PSTR Buffer
#define STATUS_INVALID_PARAMETER
struct icmp_echo_reply * PICMP_ECHO_REPLY
#define ICMP_CODE_DU_SOURCE_ROUTE_FAILED
KDEFERRED_ROUTINE TimeoutHandler
DATAGRAM_SEND_ROUTINE Send
VOID NTAPI IoAcquireCancelSpinLock(OUT PKIRQL Irql)
_In_ WDFREQUEST _In_ size_t _In_ size_t InputBufferLength
#define IP_TTL_EXPIRED_TRANSIT
IoSetCancelRoutine(Irp, CancelRoutine)
PIO_WORKITEM NTAPI IoAllocateWorkItem(IN PDEVICE_OBJECT DeviceObject)
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)
VOID NTAPI IoFreeWorkItem(IN PIO_WORKITEM IoWorkItem)
#define ICMP_TYPE_PARAMETER
static VOID ClearReceiveHandler(_In_ PADDRESS_FILE AddrFile)
_In_ WDFREQUEST _In_ size_t OutputBufferLength
_In_ PDEVICE_OBJECT DeviceObject
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
static volatile INT16 IcmpSequence
#define IP_DEST_PORT_UNREACHABLE
#define IPv4Checksum(Data, Count, Seed)
struct IPv4_HEADER IPv4_HEADER
struct _ADDRESS_FILE * PADDRESS_FILE
#define ICMP_TYPE_TIME_EXCEEDED
#define ICMP_CODE_DU_PROTOCOL_UNREACH
#define IoCompleteRequest
union _TDI_REQUEST::@3194 Handle
struct _TA_ADDRESS_IP::_AddrIp Address[1]
PTDI_IND_RECEIVE_DATAGRAM ReceiveDatagramHandler
#define IO_NETWORK_INCREMENT
#define ICMP_TYPE_ECHO_REQUEST
IP_OPTION_INFORMATION Options
PVOID ReceiveDatagramHandlerContext
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options
BOOLEAN NTAPI KeCancelTimer(IN OUT PKTIMER Timer)
#define NT_SUCCESS(StatCode)
#define IP_DEST_NET_UNREACHABLE
#define ICMP_TYPE_ECHO_REPLY
#define InterlockedIncrement16
#define ExAllocatePoolWithTag(hernya, size, tag)
_Must_inspect_result_ _In_ PFLT_PORT _In_ ULONG _Out_writes_bytes_opt_ ReplyLength PVOID ReplyBuffer
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
struct _ICMP_PACKET_CONTEXT * PICMP_PACKET_CONTEXT
#define TDI_ADDRESS_TYPE_IP
#define memcpy(s1, s2, n)
NTSTATUS DispEchoRequest(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp, _In_ PIO_STACK_LOCATION IrpSp)
#define ICMP_TYPE_DEST_UNREACH
#define ICMP_CODE_DU_PORT_UNREACH
VOID NTAPI IoReleaseCancelSpinLock(IN KIRQL Irql)
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2
VOID NTAPI IoQueueWorkItem(IN PIO_WORKITEM IoWorkItem, IN PIO_WORKITEM_ROUTINE WorkerRoutine, IN WORK_QUEUE_TYPE QueueType, IN PVOID Context)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
LARGE_INTEGER TimerResolution
#define KeInitializeEvent(pEvt, foo, foo2)
#define UnlockObject(Object)
struct _ICMP_PACKET_CONTEXT ICMP_PACKET_CONTEXT
#define ICMP_CODE_DU_NET_UNREACH
PIO_WORKITEM FinishWorker
HANDLE NTAPI PsGetCurrentProcessId(VOID)
struct ICMP_HEADER * PICMP_HEADER
#define ICMP_TYPE_SOURCE_QUENCH
NTSTATUS FileOpenAddress(PTDI_REQUEST Request, PTA_IP_ADDRESS AddrList, USHORT Protocol, BOOLEAN Shared, PVOID Options)
#define _In_reads_bytes_opt_(size)
KEVENT InitializationFinishedEvent
#define ICMP_CODE_DU_FRAG_DF_SET
#define RtlZeroMemory(Destination, Length)
#define IP_DEST_PROT_UNREACHABLE
static UINT32 GetReplyStatus(PICMP_HEADER IcmpHeader)
#define TDI_ADDRESS_LENGTH_IP
IO_WORKITEM_ROUTINE EndRequestHandler
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
VOID NTAPI KeInitializeDpc(IN PKDPC Dpc, IN PKDEFERRED_ROUTINE DeferredRoutine, IN PVOID DeferredContext)
VOID NTAPI KeClearEvent(IN PKEVENT Event)
#define IP_DEST_HOST_UNREACHABLE
#define ExFreePoolWithTag(_P, _T)
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS SourceAddress
struct icmp_echo_reply ICMP_ECHO_REPLY
_In_ NDIS_STATUS _In_ ULONG _In_ USHORT _In_opt_ PVOID _In_ ULONG DataSize
VOID NTAPI KeInitializeTimerEx(OUT PKTIMER Timer, IN TIMER_TYPE Type)
#define IP_TTL_EXPIRED_REASSEM
_In_ PIO_STACK_LOCATION IrpSp
#define _In_reads_bytes_(size)
#define LockObject(Object)