26 if (
FCB->ConnectOptionsSize == 0)
60 if (
FCB->ConnectOptions)
64 FCB->ConnectOptionsSize = 0;
65 FCB->FilledConnectOptions = 0;
72 if (!
FCB->ConnectOptions)
79 FCB->ConnectOptionsSize = ConnectOptionsSize;
98 if (!ConnectOptionsSize)
107 if (
FCB->ConnectOptions)
110 FCB->ConnectOptionsSize = 0;
111 FCB->FilledConnectOptions = 0;
120 FCB->ConnectOptionsSize = *ConnectOptionsSize;
138 if (
FCB->ConnectDataSize == 0)
172 if (
FCB->ConnectData)
176 FCB->ConnectDataSize = 0;
177 FCB->FilledConnectData = 0;
190 FCB->ConnectDataSize = ConnectDataSize;
209 if (!ConnectDataSize)
218 if (
FCB->ConnectData)
221 FCB->ConnectDataSize = 0;
222 FCB->FilledConnectData = 0;
231 FCB->ConnectDataSize = *ConnectDataSize;
241 if( !
FCB->TdiDeviceName.Length || !
FCB->TdiDeviceName.Buffer ) {
247 &
FCB->Connection.Handle,
248 &
FCB->Connection.Object );
252 FCB->Connection.Object );
282 if (!
FCB->Recv.Window)
291 if (!
FCB->Send.Window)
301 FCB->SharedData.ConnectTime = 0;
304 FCB->Connection.Object,
339 FCB->SendIrp.InFlightRequest =
NULL;
349 if (NextIrp->MdlAddress)
355 if (
FCB->OnConnectSendBuffer)
358 FCB->OnConnectSendBuffer =
NULL;
359 FCB->OnConnectSendBufferSize = 0;
387 Irp->IoStatus.Status));
390 FCB->ConnectIrp.InFlightRequest =
NULL;
409 if (NextIrp->MdlAddress)
445 FCB->FilledConnectData =
MIN(
FCB->ConnectReturnInfo->UserDataLength,
FCB->ConnectDataSize);
446 if (
FCB->FilledConnectData)
449 FCB->ConnectReturnInfo->UserData,
450 FCB->FilledConnectData);
453 FCB->FilledConnectOptions =
MIN(
FCB->ConnectReturnInfo->OptionsLength,
FCB->ConnectOptionsSize);
454 if (
FCB->FilledConnectOptions)
457 FCB->ConnectReturnInfo->Options,
458 FCB->FilledConnectOptions);
464 Tail.Overlay.ListEntry);
476 if (
FCB->OnConnectSendBuffer)
479 PVOID sendBuffer =
FCB->OnConnectSendBuffer;
480 UINT sendBufferLength =
FCB->OnConnectSendBufferSize;
504 if (NextIrp->MdlAddress)
544 if (
FCB->RemoteAddress)
552 if( !
FCB->RemoteAddress )
560 switch(
FCB->SharedData.State)
570 if (
FCB->LocalAddress)
578 if(
FCB->LocalAddress ) {
592 if (
FCB->RemoteAddress)
600 if( !
FCB->RemoteAddress ) {
610 if (
FCB->ConnectReturnInfo)
616 ( &
FCB->ConnectReturnInfo,
621 if (
FCB->ConnectCallInfo)
633 FCB->ConnectCallInfo->UserData =
FCB->ConnectData;
634 FCB->ConnectCallInfo->UserDataLength =
FCB->ConnectDataSize;
635 FCB->ConnectCallInfo->Options =
FCB->ConnectOptions;
636 FCB->ConnectCallInfo->OptionsLength =
FCB->ConnectOptionsSize;
645 FCB->Connection.Object,
646 FCB->ConnectCallInfo,
647 FCB->ConnectReturnInfo,
663 FCB->SharedData.State));
701 if (
FCB->OnConnectSendBuffer)
704 FCB->OnConnectSendBuffer =
NULL;
705 FCB->OnConnectSendBufferSize = 0;
715 if (!
FCB->OnConnectSendBuffer)
724 FCB->SharedData.State));
725 if (
FCB->RemoteAddress)
733 if(!
FCB->RemoteAddress)
741 switch (
FCB->SharedData.State)
751 if (
FCB->RemoteAddress)
758 if (!
FCB->RemoteAddress)
768 if (
FCB->ConnectReturnInfo)
778 if (
FCB->ConnectCallInfo)
790 FCB->ConnectCallInfo->UserData =
FCB->ConnectData ?
FCB->ConnectData :
FCB->OnConnectSendBuffer;
791 FCB->ConnectCallInfo->UserDataLength =
FCB->ConnectData ?
FCB->ConnectDataSize :
FCB->OnConnectSendBufferSize;
792 FCB->ConnectCallInfo->Options =
FCB->ConnectOptions;
793 FCB->ConnectCallInfo->OptionsLength =
FCB->ConnectOptionsSize;
801 FCB->Connection.Object,
802 FCB->ConnectCallInfo,
803 FCB->ConnectReturnInfo,
817 FCB->SharedData.State));
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
#define SOCKET_STATE_CLOSED
IO_COMPLETION_ROUTINE ReceiveComplete
#define SOCKET_STATE_CONNECTED
#define SOCKET_STATE_CREATED
struct _AFD_FCB * PAFD_FCB
#define TAG_AFD_TDI_CONNECTION_INFORMATION
#define TAG_AFD_SUPER_CONNECT_BUFFER
#define TAG_AFD_CONNECT_OPTIONS
#define TAG_AFD_CONNECT_DATA
#define FUNCTION_CONNECTEX
#define SOCKET_STATE_CONNECTING
#define SOCKET_STATE_BOUND
#define TAG_AFD_DATA_BUFFER
#define TAG_AFD_TRANSPORT_ADDRESS
#define NT_SUCCESS(StatCode)
_In_ PIO_STACK_LOCATION IrpSp
NTSTATUS WarmSocketForBind(PAFD_FCB FCB, ULONG ShareType)
NTSTATUS MakeSocketIntoConnection(PAFD_FCB FCB)
NTSTATUS NTAPI AfdSetConnectData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS NTAPI AfdSetConnectDataSize(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS NTAPI AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
static IO_COMPLETION_ROUTINE StreamSocketConnectSendComplete
NTSTATUS NTAPI AfdStreamSocketSuperConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS NTAPI AfdGetConnectOptions(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS NTAPI AfdGetConnectData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS NTAPI AfdSetConnectOptions(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS WarmSocketForConnection(PAFD_FCB FCB)
static IO_COMPLETION_ROUTINE StreamSocketConnectComplete
NTSTATUS NTAPI AfdSetConnectOptionsSize(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
PVOID LockRequest(PIRP Irp, PIO_STACK_LOCATION IrpSp, BOOLEAN Output, KPROCESSOR_MODE *LockMode)
VOID UnlockRequest(PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSTATUS QueueUserModeIrp(PAFD_FCB FCB, PIRP Irp, UINT Function)
NTSTATUS LostSocket(PIRP Irp)
NTSTATUS NTAPI UnlockAndMaybeComplete(PAFD_FCB FCB, NTSTATUS Status, PIRP Irp, UINT Information)
VOID SocketStateUnlock(PAFD_FCB FCB)
NTSTATUS LeaveIrpUntilLater(PAFD_FCB FCB, PIRP Irp, UINT Function)
BOOLEAN SocketAcquireStateLock(PAFD_FCB FCB)
void OskitDumpBuffer(PCHAR Data, UINT Len)
VOID PollReeval(PAFD_DEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject)
NTSTATUS NTAPI AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp, BOOLEAN Short)
#define AFD_DbgPrint(_t_, _x_)
#define IO_NETWORK_INCREMENT
#define ExAllocatePoolWithTag(hernya, size, tag)
#define IsListEmpty(ListHead)
#define RemoveHeadList(ListHead)
IoSetCancelRoutine(Irp, CancelRoutine)
#define ExFreePoolWithTag(_P, _T)
#define AFD_SHARE_WILDCARD
#define UNREFERENCED_PARAMETER(P)
#define IoCompleteRequest
#define STATUS_FILE_CLOSED
#define AFD_EVENT_CONNECT_FAIL
#define AFD_ENDPOINT_CONNECTIONLESS
#define AFD_EVENT_CONNECT
#define STATUS_BUFFER_TOO_SMALL
TRANSPORT_ADDRESS RemoteAddress
TRANSPORT_ADDRESS RemoteAddress
union _IO_STACK_LOCATION::@1669 Parameters
struct _IO_STACK_LOCATION::@1669::@1670 DeviceIoControl
#define TDI_RECEIVE_NORMAL
NTSTATUS TdiOpenConnectionEndpointFile(PUNICODE_STRING DeviceName, PHANDLE ConnectionHandle, PFILE_OBJECT *ConnectionObject)
Opens a connection endpoint file object.
NTSTATUS TdiConnect(PIRP *PendingIrp, PFILE_OBJECT ConnectionObject, PTDI_CONNECTION_INFORMATION ConnectionCallInfo, PTDI_CONNECTION_INFORMATION ConnectionReturnInfo, PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID CompletionContext)
Connect a connection endpoint to a remote peer.
NTSTATUS TdiAssociateAddressFile(HANDLE AddressHandle, PFILE_OBJECT ConnectionObject)
Associates a connection endpoint to an address file object.
NTSTATUS TdiBuildConnectionInfo(PTDI_CONNECTION_INFORMATION *ConnectionInfo, PTRANSPORT_ADDRESS Name)
NTSTATUS TdiQueryMaxDatagramLength(PFILE_OBJECT FileObject, PUINT MaxDatagramLength)
NTSTATUS TdiReceive(PIRP *Irp, PFILE_OBJECT ConnectionObject, USHORT Flags, PCHAR Buffer, UINT BufferLength, PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID CompletionContext)
PTRANSPORT_ADDRESS TaBuildNullTransportAddress(UINT AddressType)
PTRANSPORT_ADDRESS TaCopyTransportAddress(PTRANSPORT_ADDRESS OtherAddress)
NTSTATUS TdiSend(PIRP *Irp, PFILE_OBJECT ConnectionObject, USHORT Flags, PCHAR Buffer, UINT BufferLength, PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID CompletionContext)
#define RtlCopyMemory(Destination, Source, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_INVALID_PARAMETER
#define STATUS_NO_SUCH_DEVICE
_In_ PDEVICE_OBJECT DeviceObject
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize