mirror of
https://github.com/reactos/reactos.git
synced 2024-06-01 10:11:43 +00:00
[AFD]
- Disassociate the connection from the address file before closing them svn path=/trunk/; revision=52083
This commit is contained in:
parent
e4c98f4e8e
commit
588db734b0
|
@ -460,7 +460,10 @@ AfdCloseSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
|||
ExFreePool( FCB->RemoteAddress );
|
||||
|
||||
if( FCB->Connection.Object )
|
||||
{
|
||||
TdiDisassociateAddressFile(FCB->Connection.Object);
|
||||
ObDereferenceObject(FCB->Connection.Object);
|
||||
}
|
||||
|
||||
if( FCB->AddressFile.Object )
|
||||
ObDereferenceObject(FCB->AddressFile.Object);
|
||||
|
|
|
@ -420,6 +420,55 @@ NTSTATUS TdiAssociateAddressFile(
|
|||
return Status;
|
||||
}
|
||||
|
||||
NTSTATUS TdiDisassociateAddressFile(
|
||||
PFILE_OBJECT ConnectionObject)
|
||||
/*
|
||||
* FUNCTION: Disassociates a connection endpoint from an address file object
|
||||
* ARGUMENTS:
|
||||
* ConnectionObject = Connection endpoint file object
|
||||
* RETURNS:
|
||||
* Status of operation
|
||||
*/
|
||||
{
|
||||
PDEVICE_OBJECT DeviceObject;
|
||||
IO_STATUS_BLOCK Iosb;
|
||||
NTSTATUS Status;
|
||||
KEVENT Event;
|
||||
PIRP Irp;
|
||||
|
||||
AFD_DbgPrint(MAX_TRACE, ("Called. ConnectionObject (0x%X)\n", ConnectionObject));
|
||||
|
||||
if (!ConnectionObject) {
|
||||
AFD_DbgPrint(MIN_TRACE, ("Bad connection object.\n"));
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
DeviceObject = IoGetRelatedDeviceObject(ConnectionObject);
|
||||
if (!DeviceObject) {
|
||||
AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n"));
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
KeInitializeEvent(&Event, NotificationEvent, FALSE);
|
||||
|
||||
Irp = TdiBuildInternalDeviceControlIrp(TDI_DISASSOCIATE_ADDRESS, /* Sub function */
|
||||
DeviceObject, /* Device object */
|
||||
ConnectionObject, /* File object */
|
||||
&Event, /* Event */
|
||||
&Iosb); /* Status */
|
||||
if (!Irp)
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
|
||||
TdiBuildDisassociateAddress(Irp,
|
||||
DeviceObject,
|
||||
ConnectionObject,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
Status = TdiCall(Irp, DeviceObject, &Event, &Iosb);
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
NTSTATUS TdiListen
|
||||
( PIRP *Irp,
|
||||
|
@ -1229,7 +1278,7 @@ NTSTATUS TdiDisconnect(
|
|||
}
|
||||
|
||||
Irp = TdiBuildInternalDeviceControlIrp
|
||||
( TDI_SEND_DATAGRAM, /* Sub function */
|
||||
( TDI_DISCONNECT, /* Sub function */
|
||||
DeviceObject, /* Device object */
|
||||
TransportObject, /* File object */
|
||||
&Event, /* Event */
|
||||
|
|
|
@ -360,6 +360,9 @@ NTSTATUS TdiAssociateAddressFile(
|
|||
HANDLE AddressHandle,
|
||||
PFILE_OBJECT ConnectionObject);
|
||||
|
||||
NTSTATUS TdiDisassociateAddressFile(
|
||||
PFILE_OBJECT ConnectionObject);
|
||||
|
||||
NTSTATUS TdiListen
|
||||
( PIRP *Irp,
|
||||
PFILE_OBJECT ConnectionObject,
|
||||
|
|
Loading…
Reference in a new issue