[ros-diffs] [cgutman] 39988: - Separate AfdGetSockOrPeerName into AfdGetSockName and AfdGetPeerName - Rewrite AfdGetPeerName - I will change SEH to SEH2 before merging
cgutman at svn.reactos.org
cgutman at svn.reactos.org
Thu Mar 12 22:14:04 CET 2009
Author: cgutman
Date: Fri Mar 13 00:14:03 2009
New Revision: 39988
URL: http://svn.reactos.org/svn/reactos?rev=39988&view=rev
Log:
- Separate AfdGetSockOrPeerName into AfdGetSockName and AfdGetPeerName
- Rewrite AfdGetPeerName
- I will change SEH to SEH2 before merging
Modified:
branches/aicom-network-fixes/drivers/network/afd/afd/info.c
branches/aicom-network-fixes/drivers/network/afd/afd/main.c
branches/aicom-network-fixes/drivers/network/afd/include/afd.h
Modified: branches/aicom-network-fixes/drivers/network/afd/afd/info.c
URL: http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/network/afd/afd/info.c?rev=39988&r1=39987&r2=39988&view=diff
==============================================================================
--- branches/aicom-network-fixes/drivers/network/afd/afd/info.c [iso-8859-1] (original)
+++ branches/aicom-network-fixes/drivers/network/afd/afd/info.c [iso-8859-1] Fri Mar 13 00:14:03 2009
@@ -13,7 +13,7 @@
#include "debug.h"
#include "pseh/pseh.h"
-NTSTATUS STDCALL
+NTSTATUS NTAPI
AfdGetInfo( PDEVICE_OBJECT DeviceObject, PIRP Irp,
PIO_STACK_LOCATION IrpSp ) {
NTSTATUS Status = STATUS_SUCCESS;
@@ -69,19 +69,20 @@
return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL );
}
-NTSTATUS STDCALL
-AfdGetSockOrPeerName( PDEVICE_OBJECT DeviceObject, PIRP Irp,
- PIO_STACK_LOCATION IrpSp, BOOLEAN Local ) {
+NTSTATUS NTAPI
+AfdGetSockName( PDEVICE_OBJECT DeviceObject, PIRP Irp,
+ PIO_STACK_LOCATION IrpSp ) {
NTSTATUS Status = STATUS_SUCCESS;
PFILE_OBJECT FileObject = IrpSp->FileObject;
PAFD_FCB FCB = FileObject->FsContext;
- PMDL Mdl = NULL, SysMdl = NULL;
- PTDI_CONNECTION_INFORMATION ConnInfo = NULL;
- PTRANSPORT_ADDRESS TransAddr = NULL;
-
- AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
+ PMDL Mdl = NULL;
if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
+
+ if( FCB->AddressFile.Object == NULL && FCB->Connection.Object == NULL ) {
+ return UnlockAndMaybeComplete( FCB, STATUS_INVALID_PARAMETER, Irp, 0,
+ NULL );
+ }
Mdl = IoAllocateMdl
( Irp->UserBuffer,
@@ -99,75 +100,69 @@
} _SEH_END;
if( NT_SUCCESS(Status) ) {
- if( Local ) {
- if( FCB->AddressFile.Object == NULL ) {
- return UnlockAndMaybeComplete( FCB, STATUS_INVALID_PARAMETER, Irp, 0,
- NULL );
- }
-
Status = TdiQueryInformation
- ( FCB->AddressFile.Object,
+ ( FCB->Connection.Object ? FCB->Connection.Object : FCB->AddressFile.Object,
TDI_QUERY_ADDRESS_INFO,
Mdl );
- } else {
- if( FCB->Connection.Object == NULL || (FCB->State != SOCKET_STATE_BOUND && FCB->State != SOCKET_STATE_CONNECTED) ) {
- return UnlockAndMaybeComplete( FCB, STATUS_INVALID_PARAMETER, Irp, 0,
- NULL );
- }
-
- if( NT_SUCCESS
- ( Status = TdiBuildNullConnectionInfo
- ( &ConnInfo,
- FCB->LocalAddress->Address[0].AddressType ) ) ) {
- SysMdl = IoAllocateMdl
- ( ConnInfo,
- sizeof( TDI_CONNECTION_INFORMATION ) +
- TaLengthOfTransportAddress
- ( ConnInfo->RemoteAddress ),
- FALSE,
- FALSE,
- NULL );
- }
-
- if( SysMdl ) {
- _SEH_TRY {
- MmProbeAndLockPages( SysMdl, Irp->RequestorMode, IoModifyAccess );
- } _SEH_HANDLE {
- AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n"));
- Status = _SEH_GetExceptionCode();
- } _SEH_END;
- } else Status = STATUS_NO_MEMORY;
-
- if( NT_SUCCESS(Status) ) {
- Status = TdiQueryInformation
- ( FCB->Connection.Object,
- TDI_QUERY_CONNECTION_INFO,
- SysMdl );
- }
-
- if( NT_SUCCESS(Status) ) {
- TransAddr =
- (PTRANSPORT_ADDRESS)MmGetSystemAddressForMdlSafe( Mdl, NormalPagePriority );
-
- if( TransAddr )
- RtlCopyMemory( TransAddr, ConnInfo->RemoteAddress,
- TaLengthOfTransportAddress
- ( ConnInfo->RemoteAddress ) );
- else Status = STATUS_INSUFFICIENT_RESOURCES;
- }
-
- if( ConnInfo ) ExFreePool( ConnInfo );
- if( SysMdl ) IoFreeMdl( SysMdl );
- if( TransAddr ) MmUnmapLockedPages( TransAddr, Mdl );
- MmUnlockPages( Mdl );
- IoFreeMdl( Mdl );
- }
- }
- } else {
- Status = STATUS_INSUFFICIENT_RESOURCES;
- }
-
- AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status));
+ }
+ } else
+ Status = STATUS_INSUFFICIENT_RESOURCES;
return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL );
}
+
+NTSTATUS NTAPI
+AfdGetPeerName( PDEVICE_OBJECT DeviceObject, PIRP Irp,
+ PIO_STACK_LOCATION IrpSp ) {
+ NTSTATUS Status = STATUS_SUCCESS;
+ PFILE_OBJECT FileObject = IrpSp->FileObject;
+ PAFD_FCB FCB = FileObject->FsContext;
+ PMDL Mdl = NULL;
+ PTDI_CONNECTION_INFORMATION ConnInfo = NULL;
+
+
+ if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
+
+ if (FCB->RemoteAddress == NULL) {
+ return UnlockAndMaybeComplete( FCB, STATUS_INVALID_PARAMETER, Irp, 0, NULL );
+ }
+
+ if(NT_SUCCESS(Status = TdiBuildNullConnectionInfo
+ (&ConnInfo,
+ FCB->RemoteAddress->Address[0].AddressType)))
+ {
+ Mdl = IoAllocateMdl(ConnInfo,
+ sizeof(TDI_CONNECTION_INFORMATION) +
+ TaLengthOfTransportAddress(ConnInfo->RemoteAddress),
+ FALSE,
+ FALSE,
+ NULL);
+
+ if (Mdl)
+ {
+ _SEH_TRY {
+ MmProbeAndLockPages(Mdl, Irp->RequestorMode, IoModifyAccess);
+ } _SEH_HANDLE {
+ AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n"));
+ Status = _SEH_GetExceptionCode();
+ } _SEH_END;
+
+ if (NT_SUCCESS(Status))
+ {
+ Status = TdiQueryInformation(FCB->Connection.Object,
+ TDI_QUERY_CONNECTION_INFO,
+ Mdl);
+
+ if (NT_SUCCESS(Status))
+ {
+ RtlCopyMemory(Irp->UserBuffer, ConnInfo->RemoteAddress, TaLengthOfTransportAddress
+ (ConnInfo->RemoteAddress));
+ }
+ }
+ }
+
+ ExFreePool(ConnInfo);
+ }
+
+ return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL );
+}
Modified: branches/aicom-network-fixes/drivers/network/afd/afd/main.c
URL: http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/network/afd/afd/main.c?rev=39988&r1=39987&r2=39988&view=diff
==============================================================================
--- branches/aicom-network-fixes/drivers/network/afd/afd/main.c [iso-8859-1] (original)
+++ branches/aicom-network-fixes/drivers/network/afd/afd/main.c [iso-8859-1] Fri Mar 13 00:14:03 2009
@@ -402,10 +402,10 @@
return AfdDisconnect( DeviceObject, Irp, IrpSp );
case IOCTL_AFD_GET_SOCK_NAME:
- return AfdGetSockOrPeerName( DeviceObject, Irp, IrpSp, TRUE );
+ return AfdGetSockName( DeviceObject, Irp, IrpSp );
case IOCTL_AFD_GET_PEER_NAME:
- return AfdGetSockOrPeerName( DeviceObject, Irp, IrpSp, FALSE );
+ return AfdGetPeerName( DeviceObject, Irp, IrpSp );
case IOCTL_AFD_GET_TDI_HANDLES:
AFD_DbgPrint(MIN_TRACE, ("IOCTL_AFD_GET_TDI_HANDLES\n"));
Modified: branches/aicom-network-fixes/drivers/network/afd/include/afd.h
URL: http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/network/afd/include/afd.h?rev=39988&r1=39987&r2=39988&view=diff
==============================================================================
--- branches/aicom-network-fixes/drivers/network/afd/include/afd.h [iso-8859-1] (original)
+++ branches/aicom-network-fixes/drivers/network/afd/include/afd.h [iso-8859-1] Fri Mar 13 00:14:03 2009
@@ -232,8 +232,12 @@
PIO_STACK_LOCATION IrpSp );
NTSTATUS STDCALL
-AfdGetSockOrPeerName( PDEVICE_OBJECT DeviceObject, PIRP Irp,
- PIO_STACK_LOCATION IrpSp, BOOLEAN Local );
+AfdGetSockName( PDEVICE_OBJECT DeviceObject, PIRP Irp,
+ PIO_STACK_LOCATION IrpSp );
+
+NTSTATUS STDCALL
+AfdGetPeerName( PDEVICE_OBJECT DeviceObject, PIRP Irp,
+ PIO_STACK_LOCATION IrpSp );
/* listen.c */
NTSTATUS AfdWaitForListen( PDEVICE_OBJECT DeviceObject, PIRP Irp,
More information about the Ros-diffs
mailing list