/*++

Copyright (c) 1989  Microsoft Corporation

Module Name:

    rxpnp.c

Abstract:

    This module implements the PNP notification handling routines for RDBSS

Revision History:

    Balan Sethu Raman     [SethuR]    10-Apr-1996

Notes:

--*/

#include "precomp.h"
#pragma  hdrstop

#include "tdikrnl.h"

HANDLE RxTdiNotificationHandle;

VOID
RxTdiBindTransportCallback(
    IN PUNICODE_STRING DeviceName
)
/*++

Routine Description:

    TDI calls this routine whenever a transport creates a new device object.

Arguments:

    DeviceName - the name of the newly created device object

--*/
{
   RX_BINDING_CONTEXT   BindingContext;

   BindingContext.pTransportName   = DeviceName;
   BindingContext.QualityOfService = 65534;

   //DbgPrint("$$$$$ Bind for transport %ws\n",DeviceName->Buffer);
   RxCeBindToTransport(&BindingContext);
}

VOID
RxTdiUnbindTransportCallback(
    IN PUNICODE_STRING DeviceName
)
/*++

Routine Description:

    TDI calls this routine whenever a transport deletes a device object

Arguments:

    DeviceName = the name of the deleted device object

--*/
{
   RX_BINDING_CONTEXT   BindingContext;

   BindingContext.pTransportName   = DeviceName;

   RxCeUnbindFromTransport(&BindingContext);
}

NTSTATUS
RxRegisterForPnpNotifications()
/*++

Routine Description:

    This routine registers with TDI for receiving transport notifications

--*/
{
    NTSTATUS status = STATUS_SUCCESS;

    if( RxTdiNotificationHandle == NULL ) {

        status = TdiRegisterNotificationHandler (
                                        RxTdiBindTransportCallback,
                                        RxTdiUnbindTransportCallback,
                                        &RxTdiNotificationHandle );
    }

    return status;
}

NTSTATUS
RxDeregisterForPnpNotifications()
/*++

Routine Description:

    This routine deregisters the TDI notification mechanism

Notes:



--*/
{
    NTSTATUS Status = STATUS_SUCCESS;

    if( RxTdiNotificationHandle != NULL ) {
        Status = TdiDeregisterNotificationHandler( RxTdiNotificationHandle );
        if( NT_SUCCESS( Status ) ) {
            RxTdiNotificationHandle = NULL;
        }
    }

    return Status;
}

