-/* $Id$
+/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* FILE: drivers/net/afd/afd/connect.c
* UPDATE HISTORY:
* 20040708 Created
*/
+
#include "afd.h"
-NTSTATUS NTAPI
+NTSTATUS
+NTAPI
AfdGetConnectOptions(PDEVICE_OBJECT DeviceObject, PIRP Irp,
- PIO_STACK_LOCATION IrpSp)
+ PIO_STACK_LOCATION IrpSp)
{
PFILE_OBJECT FileObject = IrpSp->FileObject;
PAFD_FCB FCB = FileObject->FsContext;
UINT BufferSize = IrpSp->Parameters.DeviceIoControl.OutputBufferLength;
+ UNREFERENCED_PARAMETER(DeviceObject);
+
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
if (FCB->ConnectOptionsSize == 0)
NTSTATUS
NTAPI
AfdSetConnectOptions(PDEVICE_OBJECT DeviceObject, PIRP Irp,
- PIO_STACK_LOCATION IrpSp)
+ PIO_STACK_LOCATION IrpSp)
{
PFILE_OBJECT FileObject = IrpSp->FileObject;
PAFD_FCB FCB = FileObject->FsContext;
- PVOID ConnectOptions = LockRequest(Irp, IrpSp);
+ PVOID ConnectOptions = LockRequest(Irp, IrpSp, FALSE, NULL);
UINT ConnectOptionsSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
+ UNREFERENCED_PARAMETER(DeviceObject);
+
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
-
+
if (!ConnectOptions)
return UnlockAndMaybeComplete(FCB, STATUS_NO_MEMORY, Irp, 0);
if (FCB->ConnectOptions)
{
- ExFreePool(FCB->ConnectOptions);
+ ExFreePoolWithTag(FCB->ConnectOptions, TAG_AFD_CONNECT_OPTIONS);
FCB->ConnectOptions = NULL;
FCB->ConnectOptionsSize = 0;
FCB->FilledConnectOptions = 0;
}
- FCB->ConnectOptions = ExAllocatePool(PagedPool, ConnectOptionsSize);
+ FCB->ConnectOptions = ExAllocatePoolWithTag(PagedPool,
+ ConnectOptionsSize,
+ TAG_AFD_CONNECT_OPTIONS);
+
if (!FCB->ConnectOptions)
return UnlockAndMaybeComplete(FCB, STATUS_NO_MEMORY, Irp, 0);
NTSTATUS
NTAPI
AfdSetConnectOptionsSize(PDEVICE_OBJECT DeviceObject, PIRP Irp,
- PIO_STACK_LOCATION IrpSp)
+ PIO_STACK_LOCATION IrpSp)
{
PFILE_OBJECT FileObject = IrpSp->FileObject;
PAFD_FCB FCB = FileObject->FsContext;
- PUINT ConnectOptionsSize = LockRequest(Irp, IrpSp);
+ PUINT ConnectOptionsSize = LockRequest(Irp, IrpSp, FALSE, NULL);
UINT BufferSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
+ UNREFERENCED_PARAMETER(DeviceObject);
+
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
-
+
if (!ConnectOptionsSize)
return UnlockAndMaybeComplete(FCB, STATUS_NO_MEMORY, Irp, 0);
if (FCB->ConnectOptions)
{
- ExFreePool(FCB->ConnectOptions);
+ ExFreePoolWithTag(FCB->ConnectOptions, TAG_AFD_CONNECT_OPTIONS);
FCB->ConnectOptionsSize = 0;
FCB->FilledConnectOptions = 0;
}
- FCB->ConnectOptions = ExAllocatePool(PagedPool, *ConnectOptionsSize);
+ FCB->ConnectOptions = ExAllocatePoolWithTag(PagedPool,
+ *ConnectOptionsSize,
+ TAG_AFD_CONNECT_OPTIONS);
+
if (!FCB->ConnectOptions) return UnlockAndMaybeComplete(FCB, STATUS_NO_MEMORY, Irp, 0);
FCB->ConnectOptionsSize = *ConnectOptionsSize;
return UnlockAndMaybeComplete(FCB, STATUS_SUCCESS, Irp, 0);
}
-NTSTATUS NTAPI
+NTSTATUS
+NTAPI
AfdGetConnectData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
- PIO_STACK_LOCATION IrpSp)
+ PIO_STACK_LOCATION IrpSp)
{
PFILE_OBJECT FileObject = IrpSp->FileObject;
PAFD_FCB FCB = FileObject->FsContext;
UINT BufferSize = IrpSp->Parameters.DeviceIoControl.OutputBufferLength;
+ UNREFERENCED_PARAMETER(DeviceObject);
+
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
if (FCB->ConnectDataSize == 0)
{
PFILE_OBJECT FileObject = IrpSp->FileObject;
PAFD_FCB FCB = FileObject->FsContext;
- PVOID ConnectData = LockRequest(Irp, IrpSp);
+ PVOID ConnectData = LockRequest(Irp, IrpSp, FALSE, NULL);
UINT ConnectDataSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
+ UNREFERENCED_PARAMETER(DeviceObject);
+
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
-
+
if (!ConnectData)
return UnlockAndMaybeComplete(FCB, STATUS_NO_MEMORY, Irp, 0);
if (FCB->ConnectData)
{
- ExFreePool(FCB->ConnectData);
+ ExFreePoolWithTag(FCB->ConnectData, TAG_AFD_CONNECT_DATA);
FCB->ConnectData = NULL;
FCB->ConnectDataSize = 0;
FCB->FilledConnectData = 0;
}
- FCB->ConnectData = ExAllocatePool(PagedPool, ConnectDataSize);
+ FCB->ConnectData = ExAllocatePoolWithTag(PagedPool,
+ ConnectDataSize,
+ TAG_AFD_CONNECT_DATA);
+
if (!FCB->ConnectData) return UnlockAndMaybeComplete(FCB, STATUS_NO_MEMORY, Irp, 0);
RtlCopyMemory(FCB->ConnectData,
{
PFILE_OBJECT FileObject = IrpSp->FileObject;
PAFD_FCB FCB = FileObject->FsContext;
- PUINT ConnectDataSize = LockRequest(Irp, IrpSp);
+ PUINT ConnectDataSize = LockRequest(Irp, IrpSp, FALSE, NULL);
UINT BufferSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
+ UNREFERENCED_PARAMETER(DeviceObject);
+
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
if (!ConnectDataSize)
return UnlockAndMaybeComplete(FCB, STATUS_NO_MEMORY, Irp, 0);
-
+
if (BufferSize < sizeof(UINT))
{
AFD_DbgPrint(MIN_TRACE,("Buffer too small\n"));
if (FCB->ConnectData)
{
- ExFreePool(FCB->ConnectData);
+ ExFreePoolWithTag(FCB->ConnectData, TAG_AFD_CONNECT_DATA);
FCB->ConnectDataSize = 0;
FCB->FilledConnectData = 0;
}
- FCB->ConnectData = ExAllocatePool(PagedPool, *ConnectDataSize);
+ FCB->ConnectData = ExAllocatePoolWithTag(PagedPool,
+ *ConnectDataSize,
+ TAG_AFD_CONNECT_DATA);
+
if (!FCB->ConnectData) return UnlockAndMaybeComplete(FCB, STATUS_NO_MEMORY, Irp, 0);
FCB->ConnectDataSize = *ConnectDataSize;
}
-NTSTATUS WarmSocketForConnection( PAFD_FCB FCB ) {
+NTSTATUS
+WarmSocketForConnection(PAFD_FCB FCB) {
NTSTATUS Status;
if( !FCB->TdiDeviceName.Length || !FCB->TdiDeviceName.Buffer ) {
return Status;
}
-NTSTATUS MakeSocketIntoConnection( PAFD_FCB FCB ) {
+NTSTATUS
+MakeSocketIntoConnection(PAFD_FCB FCB) {
NTSTATUS Status;
ASSERT(!FCB->Recv.Window);
/* Allocate the receive area and start receiving */
if (!FCB->Recv.Window)
{
- FCB->Recv.Window = ExAllocatePool( PagedPool, FCB->Recv.Size );
+ FCB->Recv.Window = ExAllocatePoolWithTag(PagedPool,
+ FCB->Recv.Size,
+ TAG_AFD_DATA_BUFFER);
+
if( !FCB->Recv.Window ) return STATUS_NO_MEMORY;
}
if (!FCB->Send.Window)
{
- FCB->Send.Window = ExAllocatePool( PagedPool, FCB->Send.Size );
+ FCB->Send.Window = ExAllocatePoolWithTag(PagedPool,
+ FCB->Send.Size,
+ TAG_AFD_DATA_BUFFER);
+
if( !FCB->Send.Window ) return STATUS_NO_MEMORY;
}
FCB->State = SOCKET_STATE_CONNECTED;
Status = TdiReceive( &FCB->ReceiveIrp.InFlightRequest,
- FCB->Connection.Object,
- TDI_RECEIVE_NORMAL,
- FCB->Recv.Window,
- FCB->Recv.Size,
- &FCB->ReceiveIrp.Iosb,
- ReceiveComplete,
- FCB );
+ FCB->Connection.Object,
+ TDI_RECEIVE_NORMAL,
+ FCB->Recv.Window,
+ FCB->Recv.Size,
+ ReceiveComplete,
+ FCB );
if( Status == STATUS_PENDING ) Status = STATUS_SUCCESS;
return Status;
}
-static NTSTATUS NTAPI StreamSocketConnectComplete
-( PDEVICE_OBJECT DeviceObject,
- PIRP Irp,
- PVOID Context ) {
+static IO_COMPLETION_ROUTINE StreamSocketConnectComplete;
+static
+NTSTATUS
+NTAPI
+StreamSocketConnectComplete(PDEVICE_OBJECT DeviceObject, PIRP Irp,
+ PVOID Context) {
NTSTATUS Status = Irp->IoStatus.Status;
PAFD_FCB FCB = (PAFD_FCB)Context;
PLIST_ENTRY NextIrpEntry;
PIRP NextIrp;
- AFD_DbgPrint(MID_TRACE,("Called: FCB %x, FO %x\n",
- Context, FCB->FileObject));
+ AFD_DbgPrint(MID_TRACE,("Called: FCB %p, FO %p\n",
+ Context, FCB->FileObject));
/* I was wrong about this before as we can have pending writes to a not
* yet connected socket */
return STATUS_FILE_CLOSED;
AFD_DbgPrint(MID_TRACE,("Irp->IoStatus.Status = %x\n",
- Irp->IoStatus.Status));
+ Irp->IoStatus.Status));
ASSERT(FCB->ConnectIrp.InFlightRequest == Irp);
FCB->ConnectIrp.InFlightRequest = NULL;
if( FCB->State == SOCKET_STATE_CLOSED ) {
/* Cleanup our IRP queue because the FCB is being destroyed */
while( !IsListEmpty( &FCB->PendingIrpList[FUNCTION_CONNECT] ) ) {
- NextIrpEntry = RemoveHeadList(&FCB->PendingIrpList[FUNCTION_CONNECT]);
- NextIrp = CONTAINING_RECORD(NextIrpEntry, IRP, Tail.Overlay.ListEntry);
- NextIrp->IoStatus.Status = STATUS_FILE_CLOSED;
- NextIrp->IoStatus.Information = 0;
- if( NextIrp->MdlAddress ) UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) );
+ NextIrpEntry = RemoveHeadList(&FCB->PendingIrpList[FUNCTION_CONNECT]);
+ NextIrp = CONTAINING_RECORD(NextIrpEntry, IRP, Tail.Overlay.ListEntry);
+ NextIrp->IoStatus.Status = STATUS_FILE_CLOSED;
+ NextIrp->IoStatus.Information = 0;
+ if( NextIrp->MdlAddress ) UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) );
(void)IoSetCancelRoutine(NextIrp, NULL);
- IoCompleteRequest( NextIrp, IO_NETWORK_INCREMENT );
+ IoCompleteRequest( NextIrp, IO_NETWORK_INCREMENT );
}
- SocketStateUnlock( FCB );
- return STATUS_FILE_CLOSED;
+ SocketStateUnlock( FCB );
+ return STATUS_FILE_CLOSED;
}
if( !NT_SUCCESS(Irp->IoStatus.Status) ) {
- FCB->PollState |= AFD_EVENT_CONNECT_FAIL;
+ FCB->PollState |= AFD_EVENT_CONNECT_FAIL;
FCB->PollStatus[FD_CONNECT_BIT] = Irp->IoStatus.Status;
- AFD_DbgPrint(MID_TRACE,("Going to bound state\n"));
- FCB->State = SOCKET_STATE_BOUND;
+ AFD_DbgPrint(MID_TRACE,("Going to bound state\n"));
+ FCB->State = SOCKET_STATE_BOUND;
PollReeval( FCB->DeviceExt, FCB->FileObject );
}
/* Succeed pending irps on the FUNCTION_CONNECT list */
while( !IsListEmpty( &FCB->PendingIrpList[FUNCTION_CONNECT] ) ) {
- NextIrpEntry = RemoveHeadList(&FCB->PendingIrpList[FUNCTION_CONNECT]);
- NextIrp = CONTAINING_RECORD(NextIrpEntry, IRP, Tail.Overlay.ListEntry);
- AFD_DbgPrint(MID_TRACE,("Completing connect %x\n", NextIrp));
- NextIrp->IoStatus.Status = Status;
- NextIrp->IoStatus.Information = NT_SUCCESS(Status) ? ((ULONG_PTR)FCB->Connection.Handle) : 0;
- if( NextIrp->MdlAddress ) UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) );
+ NextIrpEntry = RemoveHeadList(&FCB->PendingIrpList[FUNCTION_CONNECT]);
+ NextIrp = CONTAINING_RECORD(NextIrpEntry, IRP, Tail.Overlay.ListEntry);
+ AFD_DbgPrint(MID_TRACE,("Completing connect %p\n", NextIrp));
+ NextIrp->IoStatus.Status = Status;
+ NextIrp->IoStatus.Information = NT_SUCCESS(Status) ? ((ULONG_PTR)FCB->Connection.Handle) : 0;
+ if( NextIrp->MdlAddress ) UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) );
(void)IoSetCancelRoutine(NextIrp, NULL);
- IoCompleteRequest( NextIrp, IO_NETWORK_INCREMENT );
+ IoCompleteRequest( NextIrp, IO_NETWORK_INCREMENT );
}
if( NT_SUCCESS(Status) ) {
- Status = MakeSocketIntoConnection( FCB );
+ Status = MakeSocketIntoConnection( FCB );
- if( !NT_SUCCESS(Status) ) {
- SocketStateUnlock( FCB );
- return Status;
- }
+ if( !NT_SUCCESS(Status) ) {
+ SocketStateUnlock( FCB );
+ return Status;
+ }
FCB->FilledConnectData = MIN(FCB->ConnectReturnInfo->UserDataLength, FCB->ConnectDataSize);
if (FCB->FilledConnectData)
FCB->FilledConnectOptions);
}
- if( !IsListEmpty( &FCB->PendingIrpList[FUNCTION_SEND] ) ) {
- NextIrpEntry = RemoveHeadList(&FCB->PendingIrpList[FUNCTION_SEND]);
- NextIrp = CONTAINING_RECORD(NextIrpEntry, IRP,
- Tail.Overlay.ListEntry);
- AFD_DbgPrint(MID_TRACE,("Launching send request %x\n", NextIrp));
- Status = AfdConnectedSocketWriteData
- ( DeviceObject,
- NextIrp,
- IoGetCurrentIrpStackLocation( NextIrp ),
- FALSE );
- }
-
- if( Status == STATUS_PENDING )
- Status = STATUS_SUCCESS;
+ if( !IsListEmpty( &FCB->PendingIrpList[FUNCTION_SEND] ) ) {
+ NextIrpEntry = RemoveHeadList(&FCB->PendingIrpList[FUNCTION_SEND]);
+ NextIrp = CONTAINING_RECORD(NextIrpEntry, IRP,
+ Tail.Overlay.ListEntry);
+ AFD_DbgPrint(MID_TRACE,("Launching send request %p\n", NextIrp));
+ Status = AfdConnectedSocketWriteData
+ ( DeviceObject,
+ NextIrp,
+ IoGetCurrentIrpStackLocation( NextIrp ),
+ FALSE );
+ }
+
+ if( Status == STATUS_PENDING )
+ Status = STATUS_SUCCESS;
}
SocketStateUnlock( FCB );
/* Return the socket object for ths request only if it is a connected or
stream type. */
-NTSTATUS NTAPI
+NTSTATUS
+NTAPI
AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp,
- PIO_STACK_LOCATION IrpSp) {
+ PIO_STACK_LOCATION IrpSp) {
NTSTATUS Status = STATUS_INVALID_PARAMETER;
PFILE_OBJECT FileObject = IrpSp->FileObject;
PAFD_FCB FCB = FileObject->FsContext;
PAFD_CONNECT_INFO ConnectReq;
- AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
+ AFD_DbgPrint(MID_TRACE,("Called on %p\n", FCB));
+
+ UNREFERENCED_PARAMETER(DeviceObject);
if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
- if( !(ConnectReq = LockRequest( Irp, IrpSp )) )
- return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp,
- 0 );
+ if( !(ConnectReq = LockRequest( Irp, IrpSp, FALSE, NULL )) )
+ return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp,
+ 0 );
AFD_DbgPrint(MID_TRACE,("Connect request:\n"));
#if 0
OskitDumpBuffer
- ( (PCHAR)ConnectReq,
- IrpSp->Parameters.DeviceIoControl.InputBufferLength );
+ ( (PCHAR)ConnectReq,
+ IrpSp->Parameters.DeviceIoControl.InputBufferLength );
#endif
if( FCB->Flags & AFD_ENDPOINT_CONNECTIONLESS )
{
- if( FCB->RemoteAddress ) ExFreePool( FCB->RemoteAddress );
- FCB->RemoteAddress =
- TaCopyTransportAddress( &ConnectReq->RemoteAddress );
+ if (FCB->RemoteAddress)
+ {
+ ExFreePoolWithTag(FCB->RemoteAddress, TAG_AFD_TRANSPORT_ADDRESS);
+ }
- if( !FCB->RemoteAddress )
- Status = STATUS_NO_MEMORY;
- else
- Status = STATUS_SUCCESS;
+ FCB->RemoteAddress =
+ TaCopyTransportAddress( &ConnectReq->RemoteAddress );
- return UnlockAndMaybeComplete( FCB, Status, Irp, 0 );
+ if( !FCB->RemoteAddress )
+ Status = STATUS_NO_MEMORY;
+ else
+ Status = STATUS_SUCCESS;
+
+ return UnlockAndMaybeComplete( FCB, Status, Irp, 0 );
}
switch( FCB->State ) {
case SOCKET_STATE_CONNECTED:
- Status = STATUS_SUCCESS;
- break;
+ Status = STATUS_SUCCESS;
+ break;
case SOCKET_STATE_CONNECTING:
- return LeaveIrpUntilLater( FCB, Irp, FUNCTION_CONNECT );
+ return LeaveIrpUntilLater( FCB, Irp, FUNCTION_CONNECT );
case SOCKET_STATE_CREATED:
- if( FCB->LocalAddress ) ExFreePool( FCB->LocalAddress );
- FCB->LocalAddress =
- TaBuildNullTransportAddress( ConnectReq->RemoteAddress.Address[0].AddressType );
-
- if( FCB->LocalAddress ) {
- Status = WarmSocketForBind( FCB );
-
- if( NT_SUCCESS(Status) )
- FCB->State = SOCKET_STATE_BOUND;
- else
- return UnlockAndMaybeComplete( FCB, Status, Irp, 0 );
- } else
- return UnlockAndMaybeComplete
- ( FCB, STATUS_NO_MEMORY, Irp, 0 );
-
+ if (FCB->LocalAddress)
+ {
+ ExFreePoolWithTag(FCB->LocalAddress, TAG_AFD_TRANSPORT_ADDRESS);
+ }
+
+ FCB->LocalAddress =
+ TaBuildNullTransportAddress( ConnectReq->RemoteAddress.Address[0].AddressType );
+
+ if( FCB->LocalAddress ) {
+ Status = WarmSocketForBind( FCB, AFD_SHARE_WILDCARD );
+
+ if( NT_SUCCESS(Status) )
+ FCB->State = SOCKET_STATE_BOUND;
+ else
+ return UnlockAndMaybeComplete( FCB, Status, Irp, 0 );
+ } else
+ return UnlockAndMaybeComplete
+ ( FCB, STATUS_NO_MEMORY, Irp, 0 );
+
/* Drop through to SOCKET_STATE_BOUND */
case SOCKET_STATE_BOUND:
- if( FCB->RemoteAddress ) ExFreePool( FCB->RemoteAddress );
- FCB->RemoteAddress =
- TaCopyTransportAddress( &ConnectReq->RemoteAddress );
+ if (FCB->RemoteAddress)
+ {
+ ExFreePoolWithTag(FCB->RemoteAddress, TAG_AFD_TRANSPORT_ADDRESS);
+ }
- if( !FCB->RemoteAddress ) {
- Status = STATUS_NO_MEMORY;
- break;
- }
+ FCB->RemoteAddress =
+ TaCopyTransportAddress( &ConnectReq->RemoteAddress );
+
+ if( !FCB->RemoteAddress ) {
+ Status = STATUS_NO_MEMORY;
+ break;
+ }
- Status = WarmSocketForConnection( FCB );
+ Status = WarmSocketForConnection( FCB );
- if( !NT_SUCCESS(Status) )
- break;
+ if( !NT_SUCCESS(Status) )
+ break;
+
+ if (FCB->ConnectReturnInfo)
+ {
+ ExFreePoolWithTag(FCB->ConnectReturnInfo, TAG_AFD_TDI_CONNECTION_INFORMATION);
+ }
- if (FCB->ConnectReturnInfo) ExFreePool(FCB->ConnectReturnInfo);
- Status = TdiBuildConnectionInfo
- ( &FCB->ConnectReturnInfo,
- &ConnectReq->RemoteAddress );
+ Status = TdiBuildConnectionInfo
+ ( &FCB->ConnectReturnInfo,
+ &ConnectReq->RemoteAddress );
if( NT_SUCCESS(Status) )
{
- if (FCB->ConnectCallInfo) ExFreePool(FCB->ConnectCallInfo);
+ if (FCB->ConnectCallInfo)
+ {
+ ExFreePoolWithTag(FCB->ConnectCallInfo, TAG_AFD_TDI_CONNECTION_INFORMATION);
+ }
+
Status = TdiBuildConnectionInfo(&FCB->ConnectCallInfo,
- &ConnectReq->RemoteAddress);
+ &ConnectReq->RemoteAddress);
}
else break;
- if( NT_SUCCESS(Status) ) {
+ if( NT_SUCCESS(Status) ) {
FCB->ConnectCallInfo->UserData = FCB->ConnectData;
FCB->ConnectCallInfo->UserDataLength = FCB->ConnectDataSize;
FCB->ConnectCallInfo->Options = FCB->ConnectOptions;
FCB->ConnectCallInfo->OptionsLength = FCB->ConnectOptionsSize;
-
+
FCB->State = SOCKET_STATE_CONNECTING;
-
- AFD_DbgPrint(MID_TRACE,("Queueing IRP %x\n", Irp));
+
+ AFD_DbgPrint(MID_TRACE,("Queueing IRP %p\n", Irp));
Status = QueueUserModeIrp( FCB, Irp, FUNCTION_CONNECT );
if (Status == STATUS_PENDING)
{
FCB->Connection.Object,
FCB->ConnectCallInfo,
FCB->ConnectReturnInfo,
- &FCB->ConnectIrp.Iosb,
StreamSocketConnectComplete,
FCB );
}
-
+
if (Status != STATUS_PENDING)
FCB->State = SOCKET_STATE_BOUND;
-
+
SocketStateUnlock(FCB);
- return Status;
- }
- break;
+ return Status;
+ }
+ break;
default:
- AFD_DbgPrint(MIN_TRACE,("Inappropriate socket state %d for connect\n",
- FCB->State));
- break;
+ AFD_DbgPrint(MIN_TRACE,("Inappropriate socket state %u for connect\n",
+ FCB->State));
+ break;
}
return UnlockAndMaybeComplete( FCB, Status, Irp, 0 );