void NxAdapter::ReportWakeReasonMediaChange()

in netcx/adapter/nxadapter.cpp [4140:4177]


void NxAdapter::ReportWakeReasonMediaChange(
    NET_IF_MEDIA_CONNECT_STATE Reason
) const
{
    Verifier_VerifyNetPowerUpTransition(GetPrivateGlobals(), GetNxDeviceFromHandle(m_device));

    LogInfo(FLAG_POWER,
        "NETADAPTER %p reported wake. Reason: Media state change (%!NET_IF_MEDIA_CONNECT_STATE!)",
            GetFxObject(),
            Reason);

    NDIS_PM_WAKE_REASON wakeReason;
    wakeReason.Header.Type = NDIS_OBJECT_TYPE_DEFAULT;
    wakeReason.Header.Revision = NDIS_PM_WAKE_REASON_REVISION_1;
    wakeReason.Header.Size = NDIS_SIZEOF_PM_WAKE_REASON_REVISION_1;
    switch (Reason)
    {
    case MediaConnectStateDisconnected:
        wakeReason.WakeReason = NdisWakeReasonMediaDisconnect;
        break;
    case MediaConnectStateConnected:
        wakeReason.WakeReason = NdisWakeReasonMediaConnect;
        break;
    default:
        Verifier_ReportViolation(
            GetPrivateGlobals(),
            VerifierAction_BugcheckAlways,
            FailureCode_InvalidNetAdapterWakeReasonMediaChange,
            0,
            0);
    }
    wakeReason.InfoBufferOffset = 0;
    wakeReason.InfoBufferSize = 0;
    auto wakeIndication = MakeNdisStatusIndication(
        m_ndisAdapterHandle, NDIS_STATUS_PM_WAKE_REASON, wakeReason);

    NdisMIndicateStatusEx(m_ndisAdapterHandle, &wakeIndication);
}