ReactOS 0.4.15-dev-7788-g1ad9096
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 591 of file fileobjs.c.

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

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

◆ FileCloseConnection()

NTSTATUS FileCloseConnection ( PTDI_REQUEST  Request)

Definition at line 667 of file fileobjs.c.

669{
670 PCONNECTION_ENDPOINT Connection;
671
672 TI_DbgPrint(MID_TRACE, ("Called.\n"));
673
674 Connection = Request->Handle.ConnectionContext;
675
676 if (!Connection) return STATUS_INVALID_PARAMETER;
677
678 TCPClose( Connection );
679
680 Request->Handle.ConnectionContext = NULL;
681
682 TI_DbgPrint(MAX_TRACE, ("Leaving.\n"));
683
684 return STATUS_SUCCESS;
685}
#define MID_TRACE
Definition: debug.h:15
#define NULL
Definition: types.h:112

Referenced by TiCloseFileObject().

◆ FileCloseControlChannel()

NTSTATUS FileCloseControlChannel ( PTDI_REQUEST  Request)

Definition at line 738 of file fileobjs.c.

740{
741 if (!Request->Handle.ControlChannel) return STATUS_INVALID_PARAMETER;
742
743 DereferenceObject((PCONTROL_CHANNEL)Request->Handle.ControlChannel);
744
745 Request->Handle.ControlChannel = NULL;
746
747 return STATUS_SUCCESS;
748}

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

Referenced by DispEchoRequest(), and TiCreateFileObject().

◆ FileOpenConnection()

NTSTATUS FileOpenConnection ( PTDI_REQUEST  Request,
PVOID  ClientContext 
)

Definition at line 632 of file fileobjs.c.

635{
637 PCONNECTION_ENDPOINT Connection;
638
639 TI_DbgPrint(MID_TRACE, ("Called.\n"));
640
642
643 if( !Connection ) return STATUS_NO_MEMORY;
644
646
647 if( !NT_SUCCESS(Status) ) {
648 DereferenceObject( Connection );
649 return Status;
650 }
651
652 /* Return connection endpoint file object */
653 Request->Handle.ConnectionContext = Connection;
654
655 TI_DbgPrint(MAX_TRACE, ("Leaving.\n"));
656
657 return STATUS_SUCCESS;
658}
LONG NTSTATUS
Definition: precomp.h:26
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define SOCK_STREAM
Definition: tcpip.h:118
#define AF_INET
Definition: tcpip.h:117
Status
Definition: gdiplustypes.h:25
NTSTATUS TCPSocket(PCONNECTION_ENDPOINT Connection, UINT Family, UINT Type, UINT Proto)
Definition: tcp.c:153
PCONNECTION_ENDPOINT TCPAllocateConnectionEndpoint(PVOID ClientContext)
Definition: tcp.c:107
_In_ PVOID ClientContext
Definition: netioddk.h:55
#define STATUS_NO_MEMORY
Definition: ntstatus.h:260

Referenced by TiCreateFileObject().

◆ FileOpenControlChannel()

NTSTATUS FileOpenControlChannel ( PTDI_REQUEST  Request)

Definition at line 694 of file fileobjs.c.

696{
697 PCONTROL_CHANNEL ControlChannel;
698 TI_DbgPrint(MID_TRACE, ("Called.\n"));
699
700 ControlChannel = ExAllocatePoolWithTag(NonPagedPool, sizeof(*ControlChannel),
702
703 if (!ControlChannel) {
704 TI_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
706 }
707
708 RtlZeroMemory(ControlChannel, sizeof(CONTROL_CHANNEL));
709
710 /* Make sure address is a local unicast address or 0 */
711
712 /* Locate address entry. If specified address is 0, a random address is chosen */
713
714 /* Initialize receive and transmit queues */
715 InitializeListHead(&ControlChannel->ListEntry);
716
717 /* Initialize spin lock that protects the address file object */
718 KeInitializeSpinLock(&ControlChannel->Lock);
719
720 ControlChannel->RefCount = 1;
721 ControlChannel->Free = ControlChannelFree;
722
723 /* Return address file object */
724 Request->Handle.ControlChannel = ControlChannel;
725
726 TI_DbgPrint(MAX_TRACE, ("Leaving.\n"));
727
728 return STATUS_SUCCESS;
729}
#define CONTROL_CHANNEL_TAG
Definition: tags.h:12
#define KeInitializeSpinLock(sl)
Definition: env_spec_w32.h:604
VOID ControlChannelFree(PVOID Object)
Definition: fileobjs.c:376
OBJECT_FREE_ROUTINE Free
Definition: titypes.h:283
LIST_ENTRY ListEntry
Definition: titypes.h:281
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;
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}
VOID TcpipReleaseSpinLock(PKSPIN_LOCK SpinLock, KIRQL Irql)
Definition: lock.c:26
VOID TcpipAcquireSpinLock(PKSPIN_LOCK SpinLock, PKIRQL Irql)
Definition: lock.c:18
#define IsListEmpty(ListHead)
Definition: env_spec_w32.h:954
UCHAR KIRQL
Definition: env_spec_w32.h:591
LIST_ENTRY ConnectionEndpointListHead
Definition: fileobjs.c:25
KSPIN_LOCK ConnectionEndpointListLock
Definition: fileobjs.c:26
#define DbgPrint
Definition: hal.h:12
void LibTCPDumpPcb(PVOID SocketContext)
Definition: tcp.c:36
struct _CONNECTION_ENDPOINT * Connection
Definition: titypes.h:131
LIST_ENTRY PacketQueue
Definition: titypes.h:256
LIST_ENTRY ConnectRequest
Definition: titypes.h:250
NTSTATUS ReceiveShutdownStatus
Definition: titypes.h:266
BOOLEAN SendShutdown
Definition: titypes.h:264
LIST_ENTRY SendRequest
Definition: titypes.h:253
LIST_ENTRY ListenRequest
Definition: titypes.h:251
LIST_ENTRY ShutdownRequest
Definition: titypes.h:254
struct _CONNECTION_ENDPOINT * Next
Definition: titypes.h:269
BOOLEAN ReceiveShutdown
Definition: titypes.h:265
LIST_ENTRY ReceiveRequest
Definition: titypes.h:252
Definition: typedefs.h:120
struct _LIST_ENTRY * Flink
Definition: typedefs.h:121
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
Definition: kefuncs.h:778

Referenced by IPTimeoutDpcFn().

Variable Documentation

◆ AddressFileListHead

LIST_ENTRY AddressFileListHead
extern

Definition at line 21 of file fileobjs.c.

Referenced by DriverEntry(), and TiUnload().

◆ AddressFileListLock

KSPIN_LOCK AddressFileListLock
extern

Definition at line 22 of file fileobjs.c.

Referenced by DriverEntry(), and TiUnload().

◆ ConnectionEndpointListHead

LIST_ENTRY ConnectionEndpointListHead
extern

Definition at line 25 of file fileobjs.c.

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

◆ ConnectionEndpointListLock

KSPIN_LOCK ConnectionEndpointListLock
extern