mirror of
https://github.com/reactos/reactos.git
synced 2024-08-12 14:16:30 +00:00
Merge aicom-network-fixes up to 35538
svn path=/trunk/; revision=35550
This commit is contained in:
parent
16553f0003
commit
db4dc32f9f
|
@ -291,6 +291,7 @@ DWORD MsafdReturnWithErrno( NTSTATUS Status, LPINT Errno, DWORD Received,
|
|||
case STATUS_INVALID_CONNECTION: AFD_DbgPrint(MID_TRACE,("MSAFD: STATUS_INVALID_CONNECTION\n")); *Errno = WSAEAFNOSUPPORT; break;
|
||||
case STATUS_REMOTE_NOT_LISTENING: AFD_DbgPrint(MID_TRACE, ("MSAFD: STATUS_REMOTE_NOT_LISTENING\n")); *Errno = WSAECONNRESET; break;
|
||||
case STATUS_FILE_CLOSED: AFD_DbgPrint(MID_TRACE, ("MSAFD: STATUS_FILE_CLOSED\n")); *Errno = WSAENOTSOCK; break;
|
||||
case STATUS_INVALID_PARAMETER: DbgPrint("MSAFD: STATUS_INVALID_PARAMETER\n"); *Errno = WSAEINVAL; break;
|
||||
default:
|
||||
DbgPrint("MSAFD: Error %x is unknown\n", Status);
|
||||
*Errno = WSAEINVAL; break;
|
||||
|
|
|
@ -25,7 +25,7 @@ NTSTATUS WarmSocketForBind( PAFD_FCB FCB ) {
|
|||
}
|
||||
if( !FCB->LocalAddress ) {
|
||||
AFD_DbgPrint(MID_TRACE,("No local address\n"));
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
Status = TdiOpenAddressFile(&FCB->TdiDeviceName,
|
||||
|
|
|
@ -84,7 +84,7 @@ AfdGetSockOrPeerName( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
|||
if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
|
||||
|
||||
if( FCB->AddressFile.Object == NULL) {
|
||||
return UnlockAndMaybeComplete( FCB, STATUS_UNSUCCESSFUL, Irp, 0,
|
||||
return UnlockAndMaybeComplete( FCB, STATUS_INVALID_PARAMETER, Irp, 0,
|
||||
NULL );
|
||||
}
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ PVOID LockRequest( PIRP Irp, PIO_STACK_LOCATION IrpSp ) {
|
|||
}
|
||||
|
||||
IrpSp->Parameters.DeviceIoControl.Type3InputBuffer =
|
||||
MmMapLockedPages( Irp->MdlAddress, KernelMode );
|
||||
MmGetSystemAddressForMdlSafe( Irp->MdlAddress, NormalPagePriority );
|
||||
|
||||
if( !IrpSp->Parameters.DeviceIoControl.Type3InputBuffer ) {
|
||||
IoFreeMdl( Irp->MdlAddress );
|
||||
|
@ -50,12 +50,13 @@ PVOID LockRequest( PIRP Irp, PIO_STACK_LOCATION IrpSp ) {
|
|||
}
|
||||
|
||||
VOID UnlockRequest( PIRP Irp, PIO_STACK_LOCATION IrpSp ) {
|
||||
if( !IrpSp->Parameters.DeviceIoControl.Type3InputBuffer || !Irp->MdlAddress ) return;
|
||||
PVOID Buffer = MmGetSystemAddressForMdlSafe( Irp->MdlAddress, NormalPagePriority );
|
||||
if( IrpSp->Parameters.DeviceIoControl.Type3InputBuffer == Buffer || Buffer == NULL ) {
|
||||
MmUnmapLockedPages( IrpSp->Parameters.DeviceIoControl.Type3InputBuffer, Irp->MdlAddress );
|
||||
MmUnlockPages( Irp->MdlAddress );
|
||||
IoFreeMdl( Irp->MdlAddress );
|
||||
}
|
||||
|
||||
MmUnmapLockedPages( IrpSp->Parameters.DeviceIoControl.Type3InputBuffer,
|
||||
Irp->MdlAddress );
|
||||
MmUnlockPages( Irp->MdlAddress );
|
||||
IoFreeMdl( Irp->MdlAddress );
|
||||
Irp->MdlAddress = NULL;
|
||||
}
|
||||
|
||||
|
@ -72,6 +73,7 @@ PAFD_WSABUF LockBuffers( PAFD_WSABUF Buf, UINT Count,
|
|||
UINT Size = sizeof(AFD_WSABUF) * (Count + Lock);
|
||||
PAFD_WSABUF NewBuf = ExAllocatePool( PagedPool, Size * 2 );
|
||||
PMDL NewMdl;
|
||||
BOOLEAN LockFailed = FALSE;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called(%08x)\n", NewBuf));
|
||||
|
||||
|
@ -117,9 +119,19 @@ PAFD_WSABUF LockBuffers( PAFD_WSABUF Buf, UINT Count,
|
|||
|
||||
if( MapBuf[i].Mdl ) {
|
||||
AFD_DbgPrint(MID_TRACE,("Probe and lock pages\n"));
|
||||
MmProbeAndLockPages( MapBuf[i].Mdl, KernelMode,
|
||||
Write ? IoModifyAccess : IoReadAccess );
|
||||
_SEH_TRY {
|
||||
MmProbeAndLockPages( MapBuf[i].Mdl, KernelMode,
|
||||
Write ? IoModifyAccess : IoReadAccess );
|
||||
} _SEH_HANDLE {
|
||||
LockFailed = TRUE;
|
||||
} _SEH_END;
|
||||
AFD_DbgPrint(MID_TRACE,("MmProbeAndLock finished\n"));
|
||||
|
||||
if( LockFailed ) {
|
||||
IoFreeMdl( MapBuf[i].Mdl );
|
||||
MapBuf[i].Mdl = NULL;
|
||||
LockFailed = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -252,7 +252,7 @@ NTSTATUS NTAPI ReceiveComplete
|
|||
} else if( FCB->State == SOCKET_STATE_LISTENING ) {
|
||||
AFD_DbgPrint(MIN_TRACE,("!!! LISTENER GOT A RECEIVE COMPLETE !!!\n"));
|
||||
SocketStateUnlock( FCB );
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
HandleEOFOnIrp( FCB, Irp->IoStatus.Status, Irp->IoStatus.Information );
|
||||
|
@ -285,7 +285,7 @@ AfdConnectedSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
|||
FCB->State != SOCKET_STATE_CONNECTING ) {
|
||||
AFD_DbgPrint(MID_TRACE,("Called recv on wrong kind of socket (s%x)\n",
|
||||
FCB->State));
|
||||
return UnlockAndMaybeComplete( FCB, STATUS_UNSUCCESSFUL,
|
||||
return UnlockAndMaybeComplete( FCB, STATUS_INVALID_PARAMETER,
|
||||
Irp, 0, NULL );
|
||||
}
|
||||
|
||||
|
@ -576,7 +576,7 @@ AfdPacketSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
|||
/* Check that the socket is bound */
|
||||
if( FCB->State != SOCKET_STATE_BOUND )
|
||||
return UnlockAndMaybeComplete
|
||||
( FCB, STATUS_UNSUCCESSFUL, Irp, 0, NULL );
|
||||
( FCB, STATUS_INVALID_PARAMETER, Irp, 0, NULL );
|
||||
if( !(RecvReq = LockRequest( Irp, IrpSp )) )
|
||||
return UnlockAndMaybeComplete
|
||||
( FCB, STATUS_NO_MEMORY, Irp, 0, NULL );
|
||||
|
|
|
@ -223,7 +223,7 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
|||
|
||||
/* Check that the socket is bound */
|
||||
if( FCB->State != SOCKET_STATE_BOUND )
|
||||
return UnlockAndMaybeComplete( FCB, STATUS_UNSUCCESSFUL, Irp,
|
||||
return UnlockAndMaybeComplete( FCB, STATUS_INVALID_PARAMETER, Irp,
|
||||
0, NULL );
|
||||
|
||||
if( !(SendReq = LockRequest( Irp, IrpSp )) )
|
||||
|
@ -398,7 +398,7 @@ AfdPacketSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
|||
/* Check that the socket is bound */
|
||||
if( FCB->State != SOCKET_STATE_BOUND )
|
||||
return UnlockAndMaybeComplete
|
||||
( FCB, STATUS_UNSUCCESSFUL, Irp, 0, NULL );
|
||||
( FCB, STATUS_INVALID_PARAMETER, Irp, 0, NULL );
|
||||
if( !(SendReq = LockRequest( Irp, IrpSp )) )
|
||||
return UnlockAndMaybeComplete
|
||||
( FCB, STATUS_NO_MEMORY, Irp, 0, NULL );
|
||||
|
|
Loading…
Reference in a new issue