ReactOS  0.4.15-dev-3326-ga91f5e8
fileobjs.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

NTSTATUS FileOpenAddress (PTDI_REQUEST Request, PTA_IP_ADDRESS AddrList, USHORT Protocol, BOOLEAN Shared, PVOID Options)
 
NTSTATUS FileCloseAddress (PTDI_REQUEST Request)
 
NTSTATUS FileOpenConnection (PTDI_REQUEST Request, PVOID ClientContext)
 
NTSTATUS FileCloseConnection (PTDI_REQUEST Request)
 
NTSTATUS FileOpenControlChannel (PTDI_REQUEST Request)
 
NTSTATUS FileCloseControlChannel (PTDI_REQUEST Request)
 
VOID LogActiveObjects (VOID)
 

Variables

LIST_ENTRY AddressFileListHead
 
KSPIN_LOCK AddressFileListLock
 
LIST_ENTRY ConnectionEndpointListHead
 
KSPIN_LOCK ConnectionEndpointListLock
 

Function Documentation

◆ FileCloseAddress()

NTSTATUS FileCloseAddress ( PTDI_REQUEST  Request)

Definition at line 588 of file fileobjs.c.

590 {
591  PADDRESS_FILE AddrFile = Request->Handle.AddressHandle;
592  PCONNECTION_ENDPOINT Listener;
593 
594  if (!Request->Handle.AddressHandle) return STATUS_INVALID_PARAMETER;
595 
596  LockObject(AddrFile);
597 
598  if (InterlockedDecrement(&AddrFile->Sharers) != 0)
599  {
600  /* Still other guys have open handles to this, so keep it around */
601  UnlockObject(AddrFile);
602  return STATUS_SUCCESS;
603  }
604 
605  /* We have to close this listener because we started it */
606  Listener = AddrFile->Listener;
607  UnlockObject(AddrFile);
608  if( Listener )
609  {
610  TCPClose( Listener );
611  }
612 
613  DereferenceObject(AddrFile);
614 
615  TI_DbgPrint(MAX_TRACE, ("Leaving.\n"));
616 
617  return STATUS_SUCCESS;
618 }
#define TI_DbgPrint(_t_, _x_)
Definition: debug.h:45
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
LONG Sharers
Definition: titypes.h:121
_In_ WDFREQUEST Request
Definition: wdfdevice.h:547
#define DereferenceObject(Object)
Definition: titypes.h:24
NTSTATUS TCPClose(PCONNECTION_ENDPOINT Connection)
Definition: tcp.c:177
#define InterlockedDecrement
Definition: armddk.h:52
struct _CONNECTION_ENDPOINT * Listener
Definition: titypes.h:133
#define UnlockObject(Object)
Definition: titypes.h:44
#define MAX_TRACE
Definition: debug.h:16
#define STATUS_SUCCESS
Definition: shellext.h:65
#define LockObject(Object)
Definition: titypes.h:34

Referenced by DispEchoRequest(), EndRequestHandler(), and TiCloseFileObject().

◆ FileCloseConnection()

NTSTATUS FileCloseConnection ( PTDI_REQUEST  Request)

Definition at line 664 of file fileobjs.c.

666 {
667  PCONNECTION_ENDPOINT Connection;
668 
669  TI_DbgPrint(MID_TRACE, ("Called.\n"));
670 
671  Connection = Request->Handle.ConnectionContext;
672 
673  if (!Connection) return STATUS_INVALID_PARAMETER;
674 
675  TCPClose( Connection );
676 
677  Request->Handle.ConnectionContext = NULL;
678 
679  TI_DbgPrint(MAX_TRACE, ("Leaving.\n"));
680 
681  return STATUS_SUCCESS;
682 }
#define TI_DbgPrint(_t_, _x_)
Definition: debug.h:45
#define MID_TRACE
Definition: debug.h:15
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
_In_ WDFREQUEST Request
Definition: wdfdevice.h:547
NTSTATUS TCPClose(PCONNECTION_ENDPOINT Connection)
Definition: tcp.c:177
#define MAX_TRACE
Definition: debug.h:16
#define NULL
Definition: types.h:112
#define STATUS_SUCCESS
Definition: shellext.h:65

Referenced by TiCloseFileObject().

◆ FileCloseControlChannel()

NTSTATUS FileCloseControlChannel ( PTDI_REQUEST  Request)

Definition at line 735 of file fileobjs.c.

737 {
738  if (!Request->Handle.ControlChannel) return STATUS_INVALID_PARAMETER;
739 
740  DereferenceObject((PCONTROL_CHANNEL)Request->Handle.ControlChannel);
741 
742  Request->Handle.ControlChannel = NULL;
743 
744  return STATUS_SUCCESS;
745 }
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
_In_ WDFREQUEST Request
Definition: wdfdevice.h:547
#define DereferenceObject(Object)
Definition: titypes.h:24
#define NULL
Definition: types.h:112
#define STATUS_SUCCESS
Definition: shellext.h:65

Referenced by TiCloseFileObject().

◆ FileOpenAddress()

NTSTATUS FileOpenAddress ( PTDI_REQUEST  Request,
PTA_IP_ADDRESS  AddrList,
USHORT  Protocol,
BOOLEAN  Shared,
PVOID  Options 
)

Definition at line 399 of file fileobjs.c.

405 {
406  PADDRESS_FILE AddrFile;
407 
408  TI_DbgPrint(MID_TRACE, ("Called (Proto %d).\n", Protocol));
409 
410  /* If it's shared and has a port specified, look for a match */
411  if ((Shared != FALSE) && (Address->Address[0].Address[0].sin_port != 0))
412  {
413  AddrFile = AddrFindShared(NULL, Address->Address[0].Address[0].sin_port, Protocol);
414  if (AddrFile != NULL)
415  {
416  Request->Handle.AddressHandle = AddrFile;
417  return STATUS_SUCCESS;
418  }
419  }
420 
421  AddrFile = ExAllocatePoolWithTag(NonPagedPool, sizeof(ADDRESS_FILE),
422  ADDR_FILE_TAG);
423  if (!AddrFile) {
424  TI_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
426  }
427 
428  RtlZeroMemory(AddrFile, sizeof(ADDRESS_FILE));
429 
430  AddrFile->RefCount = 1;
431  AddrFile->Free = AddrFileFree;
432  AddrFile->Sharers = 1;
433 
434  /* Set our default options */
435  AddrFile->TTL = 128;
436  AddrFile->DF = 0;
437  AddrFile->BCast = 1;
438  AddrFile->HeaderIncl = 1;
439  AddrFile->ProcessId = PsGetCurrentProcessId();
440 
441  _SEH2_TRY {
442  PTEB Teb;
443 
444  Teb = PsGetCurrentThreadTeb();
445  if (Teb != NULL)
446  AddrFile->SubProcessTag = Teb->SubProcessTag;
448  AddrFile->SubProcessTag = 0;
449  } _SEH2_END;
450 
451  KeQuerySystemTime(&AddrFile->CreationTime);
452 
453  /* Make sure address is a local unicast address or 0 */
454  /* FIXME: IPv4 only */
455  AddrFile->Family = Address->Address[0].AddressType;
456  AddrFile->Address.Address.IPv4Address = Address->Address[0].Address[0].in_addr;
457  AddrFile->Address.Type = IP_ADDRESS_V4;
458 
459  if (!AddrIsUnspecified(&AddrFile->Address) &&
460  !AddrLocateInterface(&AddrFile->Address)) {
461  TI_DbgPrint(MIN_TRACE, ("Non-local address given (0x%X).\n", A2S(&AddrFile->Address)));
462  ExFreePoolWithTag(AddrFile, ADDR_FILE_TAG);
463  return STATUS_INVALID_ADDRESS;
464  }
465 
466  TI_DbgPrint(MID_TRACE, ("Opening address %s for communication (P=%d U=%d).\n",
467  A2S(&AddrFile->Address), Protocol, IPPROTO_UDP));
468 
469  /* Protocol specific handling */
470  switch (Protocol) {
471  case IPPROTO_TCP:
472  if (Address->Address[0].Address[0].sin_port)
473  {
474  /* The client specified an explicit port so we force a bind to this */
475  AddrFile->Port = TCPAllocatePort(Address->Address[0].Address[0].sin_port);
476 
477  /* Check for bind success */
478  if (AddrFile->Port == 0xffff)
479  {
480  ExFreePoolWithTag(AddrFile, ADDR_FILE_TAG);
482  }
483 
484  /* Sanity check */
485  ASSERT(Address->Address[0].Address[0].sin_port == AddrFile->Port);
486  }
487  else if (!AddrIsUnspecified(&AddrFile->Address))
488  {
489  /* The client is trying to bind to a local address so allocate a port now too */
490  AddrFile->Port = TCPAllocatePort(0);
491 
492  /* Check for bind success */
493  if (AddrFile->Port == 0xffff)
494  {
495  ExFreePoolWithTag(AddrFile, ADDR_FILE_TAG);
497  }
498  }
499  else
500  {
501  /* The client wants an unspecified port with an unspecified address so we wait to see what the TCP library gives us */
502  AddrFile->Port = 0;
503  }
504 
505  AddEntity(CO_TL_ENTITY, AddrFile, CO_TL_TCP);
506 
507  AddrFile->Send = NULL; /* TCPSendData */
508  break;
509 
510  case IPPROTO_UDP:
511  TI_DbgPrint(MID_TRACE,("Allocating udp port\n"));
512  AddrFile->Port =
513  UDPAllocatePort(Address->Address[0].Address[0].sin_port);
514 
515  if ((Address->Address[0].Address[0].sin_port &&
516  AddrFile->Port != Address->Address[0].Address[0].sin_port) ||
517  AddrFile->Port == 0xffff)
518  {
519  ExFreePoolWithTag(AddrFile, ADDR_FILE_TAG);
521  }
522 
523  TI_DbgPrint(MID_TRACE,("Setting port %d (wanted %d)\n",
524  AddrFile->Port,
525  Address->Address[0].Address[0].sin_port));
526 
527  AddEntity(CL_TL_ENTITY, AddrFile, CL_TL_UDP);
528 
529  AddrFile->Send = UDPSendDatagram;
530  break;
531 
532  case IPPROTO_ICMP:
533  AddrFile->Port = 0;
534  AddrFile->Send = ICMPSendDatagram;
535 
536  /* FIXME: Verify this */
537  AddEntity(ER_ENTITY, AddrFile, ER_ICMP);
538  break;
539 
540  default:
541  /* Use raw IP for all other protocols */
542  AddrFile->Port = 0;
543  AddrFile->Send = RawIPSendDatagram;
544 
545  /* FIXME: Verify this */
546  AddEntity(CL_TL_ENTITY, AddrFile, 0);
547  break;
548  }
549 
550  TI_DbgPrint(MID_TRACE, ("IP protocol number for address file object is %d.\n",
551  Protocol));
552 
553  TI_DbgPrint(MID_TRACE, ("Port number for address file object is %d.\n",
554  WN2H(AddrFile->Port)));
555 
556  /* Set protocol */
557  AddrFile->Protocol = Protocol;
558 
559  /* Initialize receive and transmit queues */
560  InitializeListHead(&AddrFile->ReceiveQueue);
561  InitializeListHead(&AddrFile->TransmitQueue);
562 
563  /* Initialize spin lock that protects the address file object */
565 
566  /* Return address file object */
567  Request->Handle.AddressHandle = AddrFile;
568 
569  /* Add address file to global list */
572  &AddrFile->ListEntry,
574 
575  TI_DbgPrint(MAX_TRACE, ("Leaving.\n"));
576 
577  return STATUS_SUCCESS;
578 }
#define KeQuerySystemTime(t)
Definition: env_spec_w32.h:570
BOOLEAN AddrIsUnspecified(PIP_ADDRESS Address)
Definition: address.c:113
PADDRESS_FILE AddrFindShared(PIP_ADDRESS BindAddress, USHORT Port, USHORT Protocol)
Definition: fileobjs.c:190
#define TI_DbgPrint(_t_, _x_)
Definition: debug.h:45
IPv4_RAW_ADDRESS IPv4Address
Definition: ip.h:26
NTSTATUS ICMPSendDatagram(PADDRESS_FILE AddrFile, PTDI_CONNECTION_INFORMATION ConnInfo, PCHAR BufferData, ULONG DataSize, PULONG DataUsed)
Definition: icmp.c:29
UINT UDPAllocatePort(UINT HintPort)
Definition: udp.c:384
#define MID_TRACE
Definition: debug.h:15
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
UCHAR TTL
Definition: titypes.h:122
DATAGRAM_SEND_ROUTINE Send
Definition: titypes.h:128
LONG Sharers
Definition: titypes.h:121
LONG RefCount
Definition: titypes.h:114
USHORT Protocol
Definition: titypes.h:119
_In_ USHORT _In_ ULONG Protocol
Definition: wsk.h:182
NTSTATUS ExInitializeResourceLite(PULONG res)
Definition: env_spec_w32.h:641
_In_ WDFREQUEST Request
Definition: wdfdevice.h:547
HANDLE ProcessId
Definition: titypes.h:137
#define STATUS_ADDRESS_ALREADY_EXISTS
Definition: ntstatus.h:654
#define ADDR_FILE_TAG
Definition: tags.h:11
_SEH2_TRY
Definition: create.c:4226
#define FALSE
Definition: types.h:117
#define IP_ADDRESS_V4
Definition: ip.h:32
ERESOURCE Resource
Definition: titypes.h:116
static WCHAR Address[46]
Definition: ping.c:68
#define CO_TL_ENTITY
Definition: tdiinfo.h:45
NTSTATUS UDPSendDatagram(PADDRESS_FILE AddrFile, PTDI_CONNECTION_INFORMATION ConnInfo, PCHAR BufferData, ULONG DataSize, PULONG DataUsed)
Definition: udp.c:150
UINT TCPAllocatePort(const UINT HintPort)
Definition: tcp.c:623
union IP_ADDRESS::@975 Address
#define ASSERT(a)
Definition: mode.c:44
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:85
PLIST_ENTRY NTAPI ExInterlockedInsertTailList(IN OUT PLIST_ENTRY ListHead, IN OUT PLIST_ENTRY ListEntry, IN OUT PKSPIN_LOCK Lock)
Definition: interlocked.c:140
#define ER_ICMP
Definition: tdiinfo.h:59
NTSTATUS RawIPSendDatagram(PADDRESS_FILE AddrFile, PTDI_CONNECTION_INFORMATION ConnInfo, PCHAR Buffer, ULONG DataSize, PULONG DataUsed)
Definition: rawip.c:171
PVOID NTAPI PsGetCurrentThreadTeb(VOID)
Definition: thread.c:785
#define WN2H(w)
Definition: addrconv.c:35
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
VOID AddrFileFree(PVOID Object)
Definition: fileobjs.c:302
UINT HeaderIncl
Definition: titypes.h:125
LIST_ENTRY AddressFileListHead
Definition: fileobjs.c:21
KSPIN_LOCK AddressFileListLock
Definition: fileobjs.c:22
LIST_ENTRY ListEntry
Definition: titypes.h:113
PVOID SubProcessTag
Definition: titypes.h:138
#define CL_TL_ENTITY
Definition: tdiinfo.h:43
Definition: compat.h:694
UCHAR Type
Definition: ip.h:24
_SEH2_END
Definition: create.c:4400
PIP_INTERFACE AddrLocateInterface(PIP_ADDRESS MatchAddress)
Definition: interface.c:89
#define MAX_TRACE
Definition: debug.h:16
#define STATUS_INVALID_ADDRESS
Definition: ntstatus.h:557
IP_ADDRESS Address
Definition: titypes.h:117
#define InitializeListHead(ListHead)
Definition: env_spec_w32.h:944
UINT BCast
Definition: titypes.h:124
#define ER_ENTITY
Definition: tdiinfo.h:46
HANDLE NTAPI PsGetCurrentProcessId(VOID)
Definition: process.c:1123
#define NULL
Definition: types.h:112
OBJECT_FREE_ROUTINE Free
Definition: titypes.h:115
VOID AddEntity(ULONG EntityType, PVOID Context, ULONG Flags)
Definition: info.c:15
LIST_ENTRY TransmitQueue
Definition: titypes.h:130
USHORT Family
Definition: titypes.h:118
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
#define MIN_TRACE
Definition: debug.h:14
LIST_ENTRY ReceiveQueue
Definition: titypes.h:129
USHORT Port
Definition: titypes.h:120
#define CL_TL_UDP
Definition: tdiinfo.h:52
#define _SEH2_EXCEPT(...)
Definition: pseh2_64.h:40
#define STATUS_SUCCESS
Definition: shellext.h:65
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1099
#define CO_TL_TCP
Definition: tdiinfo.h:57
PCHAR A2S(PIP_ADDRESS Address)
Definition: address.c:17
LARGE_INTEGER CreationTime
Definition: titypes.h:139

Referenced by DispEchoRequest(), and TiCreateFileObject().

◆ FileOpenConnection()

NTSTATUS FileOpenConnection ( PTDI_REQUEST  Request,
PVOID  ClientContext 
)

Definition at line 629 of file fileobjs.c.

632 {
634  PCONNECTION_ENDPOINT Connection;
635 
636  TI_DbgPrint(MID_TRACE, ("Called.\n"));
637 
639 
640  if( !Connection ) return STATUS_NO_MEMORY;
641 
642  Status = TCPSocket( Connection, AF_INET, SOCK_STREAM, IPPROTO_TCP );
643 
644  if( !NT_SUCCESS(Status) ) {
645  DereferenceObject( Connection );
646  return Status;
647  }
648 
649  /* Return connection endpoint file object */
650  Request->Handle.ConnectionContext = Connection;
651 
652  TI_DbgPrint(MAX_TRACE, ("Leaving.\n"));
653 
654  return STATUS_SUCCESS;
655 }
#define TI_DbgPrint(_t_, _x_)
Definition: debug.h:45
#define MID_TRACE
Definition: debug.h:15
LONG NTSTATUS
Definition: precomp.h:26
NTSTATUS TCPSocket(PCONNECTION_ENDPOINT Connection, UINT Family, UINT Type, UINT Proto)
Definition: tcp.c:153
_In_ WDFREQUEST Request
Definition: wdfdevice.h:547
#define DereferenceObject(Object)
Definition: titypes.h:24
Status
Definition: gdiplustypes.h:24
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
_In_ PVOID ClientContext
Definition: netioddk.h:55
#define MAX_TRACE
Definition: debug.h:16
#define STATUS_NO_MEMORY
Definition: ntstatus.h:260
#define AF_INET
Definition: tcpip.h:117
#define STATUS_SUCCESS
Definition: shellext.h:65
#define SOCK_STREAM
Definition: tcpip.h:118
PCONNECTION_ENDPOINT TCPAllocateConnectionEndpoint(PVOID ClientContext)
Definition: tcp.c:107

Referenced by TiCreateFileObject().

◆ FileOpenControlChannel()

NTSTATUS FileOpenControlChannel ( PTDI_REQUEST  Request)

Definition at line 691 of file fileobjs.c.

693 {
694  PCONTROL_CHANNEL ControlChannel;
695  TI_DbgPrint(MID_TRACE, ("Called.\n"));
696 
697  ControlChannel = ExAllocatePoolWithTag(NonPagedPool, sizeof(*ControlChannel),
699 
700  if (!ControlChannel) {
701  TI_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
703  }
704 
705  RtlZeroMemory(ControlChannel, sizeof(CONTROL_CHANNEL));
706 
707  /* Make sure address is a local unicast address or 0 */
708 
709  /* Locate address entry. If specified address is 0, a random address is chosen */
710 
711  /* Initialize receive and transmit queues */
712  InitializeListHead(&ControlChannel->ListEntry);
713 
714  /* Initialize spin lock that protects the address file object */
715  KeInitializeSpinLock(&ControlChannel->Lock);
716 
717  ControlChannel->RefCount = 1;
718  ControlChannel->Free = ControlChannelFree;
719 
720  /* Return address file object */
721  Request->Handle.ControlChannel = ControlChannel;
722 
723  TI_DbgPrint(MAX_TRACE, ("Leaving.\n"));
724 
725  return STATUS_SUCCESS;
726 }
#define TI_DbgPrint(_t_, _x_)
Definition: debug.h:45
#define MID_TRACE
Definition: debug.h:15
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
VOID ControlChannelFree(PVOID Object)
Definition: fileobjs.c:376
OBJECT_FREE_ROUTINE Free
Definition: titypes.h:283
_In_ WDFREQUEST Request
Definition: wdfdevice.h:547
FORCEINLINE VOID KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock)
Definition: kefuncs.h:238
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
LIST_ENTRY ListEntry
Definition: titypes.h:281
#define MAX_TRACE
Definition: debug.h:16
#define InitializeListHead(ListHead)
Definition: env_spec_w32.h:944
#define CONTROL_CHANNEL_TAG
Definition: tags.h:12
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
#define MIN_TRACE
Definition: debug.h:14
#define STATUS_SUCCESS
Definition: shellext.h:65
KSPIN_LOCK Lock
Definition: titypes.h:284

Referenced by TiCreateFileObject().

◆ LogActiveObjects()

VOID LogActiveObjects ( VOID  )

Definition at line 109 of file fileobjs.c.

110 {
111 #ifdef LOG_OBJECTS
112  PLIST_ENTRY CurrentEntry;
113  KIRQL OldIrql;
114  PADDRESS_FILE AddrFile;
116 
117  DbgPrint("----------- TCP/IP Active Object Dump -------------\n");
118 
120 
121  CurrentEntry = AddressFileListHead.Flink;
122  while (CurrentEntry != &AddressFileListHead)
123  {
124  AddrFile = CONTAINING_RECORD(CurrentEntry, ADDRESS_FILE, ListEntry);
125 
126  DbgPrint("Address File (%s, %d, %d) @ 0x%p | Ref count: %d | Sharers: %d\n",
127  A2S(&AddrFile->Address), WN2H(AddrFile->Port), AddrFile->Protocol,
128  AddrFile, AddrFile->RefCount, AddrFile->Sharers);
129  DbgPrint("\tListener: ");
130  if (AddrFile->Listener == NULL)
131  DbgPrint("<None>\n");
132  else
133  DbgPrint("0x%p\n", AddrFile->Listener);
134  DbgPrint("\tAssociated endpoints: ");
135  if (AddrFile->Connection == NULL)
136  DbgPrint("<None>\n");
137  else
138  {
139  Conn = AddrFile->Connection;
140  while (Conn)
141  {
142  DbgPrint("0x%p ", Conn);
143  Conn = Conn->Next;
144  }
145  DbgPrint("\n");
146  }
147 
148  CurrentEntry = CurrentEntry->Flink;
149  }
150 
152 
154 
155  CurrentEntry = ConnectionEndpointListHead.Flink;
156  while (CurrentEntry != &ConnectionEndpointListHead)
157  {
158  Conn = CONTAINING_RECORD(CurrentEntry, CONNECTION_ENDPOINT, ListEntry);
159 
160  DbgPrint("Connection @ 0x%p | Ref count: %d\n", Conn, Conn->RefCount);
161  DbgPrint("\tPCB: ");
162  if (Conn->SocketContext == NULL)
163  DbgPrint("<None>\n");
164  else
165  {
166  DbgPrint("0x%p\n", Conn->SocketContext);
168  }
169  DbgPrint("\tPacket queue status: %s\n", IsListEmpty(&Conn->PacketQueue) ? "Empty" : "Not Empty");
170  DbgPrint("\tRequest lists: Connect: %s | Recv: %s | Send: %s | Shutdown: %s | Listen: %s\n",
171  IsListEmpty(&Conn->ConnectRequest) ? "Empty" : "Not Empty",
172  IsListEmpty(&Conn->ReceiveRequest) ? "Empty" : "Not Empty",
173  IsListEmpty(&Conn->SendRequest) ? "Empty" : "Not Empty",
174  IsListEmpty(&Conn->ShutdownRequest) ? "Empty" : "Not Empty",
175  IsListEmpty(&Conn->ListenRequest) ? "Empty" : "Not Empty");
176  DbgPrint("\tSend shutdown: %s\n", Conn->SendShutdown ? "Yes" : "No");
177  DbgPrint("\tReceive shutdown: %s\n", Conn->ReceiveShutdown ? "Yes" : "No");
178  if (Conn->ReceiveShutdown) DbgPrint("\tReceive shutdown status: 0x%x\n", Conn->ReceiveShutdownStatus);
179  DbgPrint("\tClosing: %s\n", Conn->Closing ? "Yes" : "No");
180 
181  CurrentEntry = CurrentEntry->Flink;
182  }
183 
185 
186  DbgPrint("---------------------------------------------------\n");
187 #endif
188 }
#define DbgPrint
Definition: hal.h:12
LONG Sharers
Definition: titypes.h:121
LONG RefCount
Definition: titypes.h:114
USHORT Protocol
Definition: titypes.h:119
NTSTATUS ReceiveShutdownStatus
Definition: titypes.h:266
VOID TcpipReleaseSpinLock(PKSPIN_LOCK SpinLock, KIRQL Irql)
Definition: lock.c:26
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
Definition: rtlfuncs.h:57
VOID TcpipAcquireSpinLock(PKSPIN_LOCK SpinLock, PKIRQL Irql)
Definition: lock.c:18
LIST_ENTRY PacketQueue
Definition: titypes.h:256
struct _CONNECTION_ENDPOINT * Next
Definition: titypes.h:269
UCHAR KIRQL
Definition: env_spec_w32.h:591
BOOLEAN SendShutdown
Definition: titypes.h:264
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)
Definition: Messaging.c:560
KIRQL OldIrql
Definition: mm.h:1502
struct _LIST_ENTRY * Flink
Definition: typedefs.h:121
#define WN2H(w)
Definition: addrconv.c:35
LIST_ENTRY ShutdownRequest
Definition: titypes.h:254
LIST_ENTRY ReceiveRequest
Definition: titypes.h:252
Definition: typedefs.h:119
struct _CONNECTION_ENDPOINT * Listener
Definition: titypes.h:133
LIST_ENTRY AddressFileListHead
Definition: fileobjs.c:21
KSPIN_LOCK AddressFileListLock
Definition: fileobjs.c:22
void LibTCPDumpPcb(PVOID SocketContext)
Definition: rostcp.c:39
BOOLEAN ReceiveShutdown
Definition: titypes.h:265
IP_ADDRESS Address
Definition: titypes.h:117
LIST_ENTRY ConnectRequest
Definition: titypes.h:250
LIST_ENTRY ListenRequest
Definition: titypes.h:251
#define NULL
Definition: types.h:112
LIST_ENTRY SendRequest
Definition: titypes.h:253
KSPIN_LOCK ConnectionEndpointListLock
Definition: fileobjs.c:26
struct _CONNECTION_ENDPOINT * Connection
Definition: titypes.h:131
USHORT Port
Definition: titypes.h:120
PCHAR A2S(PIP_ADDRESS Address)
Definition: address.c:17
LIST_ENTRY ConnectionEndpointListHead
Definition: fileobjs.c:25

Referenced by IPTimeoutDpcFn().

Variable Documentation

◆ AddressFileListHead

LIST_ENTRY AddressFileListHead

Definition at line 21 of file fileobjs.c.

Referenced by DriverEntry(), and TiUnload().

◆ AddressFileListLock

KSPIN_LOCK AddressFileListLock

Definition at line 22 of file fileobjs.c.

Referenced by DriverEntry(), and TiUnload().

◆ ConnectionEndpointListHead

LIST_ENTRY ConnectionEndpointListHead

Definition at line 25 of file fileobjs.c.

Referenced by DriverEntry(), LogActiveObjects(), and TCPAllocateConnectionEndpoint().

◆ ConnectionEndpointListLock

KSPIN_LOCK ConnectionEndpointListLock