⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ndisoid.c

📁 MICREL 网卡驱动 FOR CE 5.0
💻 C
📖 第 1 页 / 共 3 页
字号:
        *pulBytesRead = sizeof( NDIS_PM_PACKET_PATTERN ) +
            pPattern->MaskSize + pPattern->PatternSize;

#if DBG
DBG_PRINT( "Remove: %u"NEWLINE, *pulBytesRead );
#endif
        NdisStatus = NDIS_STATUS_SUCCESS;
    }
    else
    {
        *pulBytesRead = 0;
        NdisStatus = NDIS_STATUS_NOT_ACCEPTED;
    }

    return NdisStatus;
}  /* RemoveWakeUpPattern */
#endif

/* -------------------------------------------------------------------------- */

/*
    MiniportQueryInformation

    Description:
        This function is used by NDIS to query adapter information by
        pre-defined NDIS_OIDs.

    Parameters:
        NDIS_HANDLE hAdapaterContext
            Handle to adapter context containing adapter information.

        NDIS_OID Oid
            The NDIS_OID to process.

        PVOID pBuffer
            Pointer to NdisRequest->InformationBuffer into which store the
            result of the query.

        ULONG ulBufferLength
            The number of bytes in pBuffer.

        PULONG pulBytesWritten
            Buffer to store the number of bytes written into pBuffer.

        PULONG pulBytesNeeded
            Buffer to store the number of bytes needed to complete the request
            if the specified buffer is not big enough.

    Return (NDIS_STATUS):
        NDIS_STATUS_SUCCESS if successful; otherwise an error code indicating
        failure.
*/

NDIS_STATUS MiniportQueryInformation (
    IN  NDIS_HANDLE hAdapterContext,
    IN  NDIS_OID    Oid,
    IN  PVOID       pBuffer,
    IN  ULONG       ulBufferLength,
    OUT PULONG      pulBytesWritten,
    OUT PULONG      pulBytesNeeded )
{
    PNDIS_ADAPTER pAdapter = ( PNDIS_ADAPTER ) hAdapterContext;
    NDIS_STATUS   nsStatus = NDIS_STATUS_SUCCESS;
    PHARDWARE     pHardware = &pAdapter->m_Hardware;
    PPORT_CONFIG  pPort = &pHardware->m_Port[ MAIN_PORT ];
    ULONGLONG     qCounter;
    ULONG         ulGeneric;
    USHORT        usGeneric;
    UINT          uiMoveBytes = sizeof( ULONG );
    PVOID         pMoveSource = ( PVOID ) &ulGeneric;

    *pulBytesWritten = 0;
    *pulBytesNeeded = 0;

    switch ( Oid )
    {
        case OID_GEN_MEDIA_CONNECT_STATUS:
            ulGeneric = pAdapter->m_ulNdisMediaState;
            break;

        case OID_GEN_PROTOCOL_OPTIONS:

#ifdef DBG
            DBG_PRINT( "protocol options"NEWLINE );
#endif
            break;

        case OID_GEN_MAXIMUM_SEND_PACKETS:
            ulGeneric = pAdapter->m_TxBufInfo.cnAlloc >> 1;

#ifdef DBG
            DBG_PRINT( "max send packets: %d"NEWLINE, ulGeneric );
#endif
            break;

        // counters
        case OID_GEN_XMIT_OK:
            qCounter = AdapterReadCounter( pAdapter, OID_COUNTER_XMIT_OK );
            uiMoveBytes = sizeof( ULONGLONG );
            pMoveSource = ( PVOID ) &qCounter;
            break;

        case OID_GEN_RCV_OK:
            qCounter = AdapterReadCounter( pAdapter, OID_COUNTER_RCV_OK );
            uiMoveBytes = sizeof( ULONGLONG );
            pMoveSource = ( PVOID ) &qCounter;
            break;

        case OID_GEN_XMIT_ERROR:
            qCounter = AdapterReadCounter( pAdapter, OID_COUNTER_XMIT_ERROR );
            uiMoveBytes = sizeof( ULONGLONG );
            pMoveSource = ( PVOID ) &qCounter;
            break;

        case OID_GEN_RCV_ERROR:
            qCounter = AdapterReadCounter( pAdapter, OID_COUNTER_RCV_ERROR );
            uiMoveBytes = sizeof( ULONGLONG );
            pMoveSource = ( PVOID ) &qCounter;
            break;

        case OID_GEN_RCV_NO_BUFFER:
            qCounter = AdapterReadCounter( pAdapter,
                OID_COUNTER_RCV_NO_BUFFER );
            uiMoveBytes = sizeof( ULONGLONG );
            pMoveSource = ( PVOID ) &qCounter;
            break;

        case OID_GEN_DIRECTED_BYTES_XMIT:
            qCounter = AdapterReadCounter( pAdapter,
                OID_COUNTER_DIRECTED_BYTES_XMIT );
            uiMoveBytes = sizeof( ULONGLONG );
            pMoveSource = ( PVOID ) &qCounter;
            break;

        case OID_GEN_DIRECTED_FRAMES_XMIT:
            qCounter = AdapterReadCounter( pAdapter,
                OID_COUNTER_DIRECTED_FRAMES_XMIT );
            uiMoveBytes = sizeof( ULONGLONG );
            pMoveSource = ( PVOID ) &qCounter;
            break;

        case OID_GEN_BROADCAST_BYTES_XMIT:
            qCounter = AdapterReadCounter( pAdapter,
                OID_COUNTER_BROADCAST_BYTES_XMIT );
            uiMoveBytes = sizeof( ULONGLONG );
            pMoveSource = ( PVOID ) &qCounter;
            break;

        case OID_GEN_BROADCAST_FRAMES_XMIT:
            qCounter = AdapterReadCounter( pAdapter,
                OID_COUNTER_BROADCAST_FRAME_XMIT );
            uiMoveBytes = sizeof( ULONGLONG );
            pMoveSource = ( PVOID ) &qCounter;
            break;

        case OID_GEN_MULTICAST_FRAMES_XMIT:

#if defined( DEF_KS8842 )
            pPort = &pHardware->m_Port[ HOST_PORT ];
            qCounter = pPort->cnCounter[ MIB_COUNTER_RX_MULTICAST ];

#else
            qCounter = pPort->cnCounter[ MIB_COUNTER_TX_MULTICAST ];
#endif
            uiMoveBytes = sizeof( ULONGLONG );
            pMoveSource = ( PVOID ) &qCounter;
            break;

        case OID_GEN_DIRECTED_BYTES_RCV:
            qCounter = AdapterReadCounter( pAdapter,
                OID_COUNTER_DIRECTED_BYTES_RCV );
            uiMoveBytes = sizeof( ULONGLONG );
            pMoveSource = ( PVOID ) &qCounter;
            break;

        case OID_GEN_DIRECTED_FRAMES_RCV:
            qCounter = AdapterReadCounter( pAdapter,
                OID_COUNTER_DIRECTED_FRAMES_RCV );
            uiMoveBytes = sizeof( ULONGLONG );
            pMoveSource = ( PVOID ) &qCounter;
            break;

        case OID_GEN_BROADCAST_BYTES_RCV:
            qCounter = AdapterReadCounter( pAdapter,
                OID_COUNTER_BROADCAST_BYTES_RCV );
            uiMoveBytes = sizeof( ULONGLONG );
            pMoveSource = ( PVOID ) &qCounter;
            break;

        case OID_GEN_BROADCAST_FRAMES_RCV:
            qCounter = AdapterReadCounter( pAdapter,
                OID_COUNTER_BROADCAST_FRAMES_RCV );
            uiMoveBytes = sizeof( ULONGLONG );
            pMoveSource = ( PVOID ) &qCounter;
            break;

        case OID_GEN_MULTICAST_FRAMES_RCV:

#if defined( DEF_KS8842 )
            pPort = &pHardware->m_Port[ HOST_PORT ];
            qCounter = pPort->cnCounter[ MIB_COUNTER_TX_MULTICAST ];

#else
            qCounter = pPort->cnCounter[ MIB_COUNTER_RX_MULTICAST ];
#endif
            uiMoveBytes = sizeof( ULONGLONG );
            pMoveSource = ( PVOID ) &qCounter;
            break;

        case OID_GEN_RCV_CRC_ERROR:
            qCounter = AdapterReadCounter( pAdapter,
                OID_COUNTER_RCV_ERROR_CRC );
            uiMoveBytes = sizeof( ULONGLONG );
            pMoveSource = ( PVOID ) &qCounter;
            break;

        case OID_GEN_TRANSMIT_QUEUE_LENGTH:
            ulGeneric = AdapterTransmitQueueLength( pAdapter );

#ifdef DBG
            DBG_PRINT( "transmit queue len: %u"NEWLINE, ulGeneric );
#endif
            break;

        case OID_802_3_RCV_ERROR_ALIGNMENT:
            qCounter = pPort->cnCounter[ MIB_COUNTER_RX_ALIGNMENT_ERR ];

#if defined( DEF_KS8842 )
            pPort = &pHardware->m_Port[ OTHER_PORT ];
            qCounter += pPort->cnCounter[ MIB_COUNTER_RX_ALIGNMENT_ERR ];
#endif
            uiMoveBytes = sizeof( ULONGLONG );
            pMoveSource = ( PVOID ) &qCounter;
            break;

        case OID_802_3_XMIT_ONE_COLLISION:
            qCounter = pPort->cnCounter[ MIB_COUNTER_TX_SINGLE_COLLISION ];

#if defined( DEF_KS8842 )
            pPort = &pHardware->m_Port[ OTHER_PORT ];
            qCounter += pPort->cnCounter[ MIB_COUNTER_TX_SINGLE_COLLISION ];
#endif
            uiMoveBytes = sizeof( ULONGLONG );
            pMoveSource = ( PVOID ) &qCounter;
            break;

        case OID_802_3_XMIT_MORE_COLLISIONS:
            qCounter = pPort->cnCounter[ MIB_COUNTER_TX_MULTI_COLLISION ];

#if defined( DEF_KS8842 )
            pPort = &pHardware->m_Port[ OTHER_PORT ];
            qCounter += pPort->cnCounter[ MIB_COUNTER_TX_MULTI_COLLISION ];
#endif
            uiMoveBytes = sizeof( ULONGLONG );
            pMoveSource = ( PVOID ) &qCounter;
            break;

        case OID_802_3_XMIT_DEFERRED:
            qCounter = pPort->cnCounter[ MIB_COUNTER_TX_DEFERRED ];

#if defined( DEF_KS8842 )
            pPort = &pHardware->m_Port[ OTHER_PORT ];
            qCounter += pPort->cnCounter[ MIB_COUNTER_TX_DEFERRED ];
#endif
            uiMoveBytes = sizeof( ULONGLONG );
            pMoveSource = ( PVOID ) &qCounter;
            break;

        case OID_802_3_XMIT_MAX_COLLISIONS:
            qCounter = pPort->cnCounter[ MIB_COUNTER_TX_TOTAL_COLLISION ];

#if defined( DEF_KS8842 )
            pPort = &pHardware->m_Port[ OTHER_PORT ];
            qCounter += pPort->cnCounter[ MIB_COUNTER_TX_TOTAL_COLLISION ];
#endif
            uiMoveBytes = sizeof( ULONGLONG );
            pMoveSource = ( PVOID ) &qCounter;
            break;

        case OID_802_3_XMIT_LATE_COLLISIONS:
            qCounter = pPort->cnCounter[ MIB_COUNTER_TX_LATE_COLLISION ];

#if defined( DEF_KS8842 )
            pPort = &pHardware->m_Port[ OTHER_PORT ];
            qCounter += pPort->cnCounter[ MIB_COUNTER_TX_LATE_COLLISION ];
#endif
            uiMoveBytes = sizeof( ULONGLONG );
            pMoveSource = ( PVOID ) &qCounter;
            break;

        case OID_GEN_PHYSICAL_MEDIUM:
#if 0
            ulGeneric = ( ULONG ) NdisPhysicalMediumWirelessLan;
            break;
#else
            return NDIS_STATUS_FAILURE;
#endif

        case OID_GEN_SUPPORTED_LIST:
            pMoveSource = ( PVOID ) SupportedOids;
            uiMoveBytes = sizeof( SupportedOids );
            break;

        case OID_GEN_HARDWARE_STATUS:
        {
            NDIS_HARDWARE_STATUS HardwareStatus = NdisHardwareStatusReady;

#if 0
            HardwareStatus = NdisHardwareStatusNotReady;
            HardwareStatus = NdisHardwareStatusReset;
#endif
            pMoveSource = ( PVOID ) &HardwareStatus;
            uiMoveBytes = sizeof( NDIS_HARDWARE_STATUS );
            break;
        }

        case OID_GEN_MEDIA_SUPPORTED:
        case OID_GEN_MEDIA_IN_USE:
        {
            NDIS_MEDIUM Medium = NdisMedium802_3;

            pMoveSource = ( PVOID ) &Medium;
            uiMoveBytes = sizeof( NDIS_MEDIUM );
            break;
        }

        case OID_GEN_MAXIMUM_LOOKAHEAD:
            ulGeneric = NDIS_MAX_LOOKAHEAD;

#ifdef DBG
            DBG_PRINT( "max lookahead: %u"NEWLINE, ulGeneric );
#endif
            break;

        case OID_GEN_MAXIMUM_FRAME_SIZE:
            ulGeneric = (ULONG) (MAX_ETHERNET_BODY_SIZE);
            break;

        case OID_GEN_LINK_SPEED:
            ulGeneric = pAdapter->m_Hardware.m_ulTransmitRate;
            break;

        case OID_GEN_TRANSMIT_BUFFER_SPACE:
            ulGeneric = TX_BUF_SIZE;
            break;

        case OID_GEN_RECEIVE_BUFFER_SPACE:
            ulGeneric = RX_BUF_SIZE;
            break;

        case OID_GEN_TRANSMIT_BLOCK_SIZE:
            ulGeneric = MAX_ETHERNET_BODY_SIZE + ETHERNET_HEADER_SIZE;
            break;

        case OID_GEN_RECEIVE_BLOCK_SIZE:
            ulGeneric = MAX_ETHERNET_BODY_SIZE + ETHERNET_HEADER_SIZE;
            break;

        case OID_GEN_VENDOR_ID:

#ifdef DBG
            DBG_PRINT( "vendor id"NEWLINE );
#endif
            NdisMoveMemory( &ulGeneric,
                pAdapter->m_Hardware.m_bPermanentAddress, 3 );
            ulGeneric &= 0x00FFFFFF;
            break;

        case OID_GEN_VENDOR_DESCRIPTION:

#ifdef DBG
            DBG_PRINT( "vendor descrip"NEWLINE );
#endif
            AdapterGetDescription( &pMoveSource, &uiMoveBytes );
            break;

        case OID_GEN_VENDOR_DRIVER_VERSION:
            ulGeneric = (( USHORT ) DRIVER_MAJOR_VERSION << 16 ) |
                ( USHORT ) DRIVER_MINOR_VERSION;
            break;

        case OID_GEN_CURRENT_PACKET_FILTER:
            ulGeneric = pAdapter->m_ulPacketFilter;
            break;

        case OID_GEN_CURRENT_LOOKAHEAD:

#ifdef DBG
            DBG_PRINT( "get max lookahead: %u"NEWLINE,
                pAdapter->m_ulMaxLookAhead );
#endif
            ulGeneric = pAdapter->m_ulMaxLookAhead;
            break;

        case OID_GEN_DRIVER_VERSION:
            usGeneric = (( USHORT ) NDIS_MAJOR_VERSION << 8 ) |
                ( USHORT ) NDIS_MINOR_VERSION;
            pMoveSource = &usGeneric;
            uiMoveBytes = sizeof( usGeneric );
            break;

        case OID_GEN_MAXIMUM_TOTAL_SIZE:
            ulGeneric = MAX_ETHERNET_BODY_SIZE + ETHERNET_HEADER_SIZE;
            break;

        case OID_GEN_MAC_OPTIONS:
            ulGeneric = ( ULONG )( NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA |
                NDIS_MAC_OPTION_NO_LOOPBACK |
                NDIS_MAC_OPTION_RECEIVE_SERIALIZED );
#if 0
            ulGeneric |= NDIS_MAC_OPTION_FULL_DUPLEX;
            ulGeneric |= NDIS_MAC_OPTION_TRANSFERS_NOT_PEND;
#endif
            break;

        case OID_802_3_PERMANENT_ADDRESS:
            pMoveSource = ( PVOID ) pAdapter->m_Hardware.m_bPermanentAddress;
            uiMoveBytes = sizeof( pAdapter->m_Hardware.m_bPermanentAddress );
            break;

        case OID_802_3_CURRENT_ADDRESS:
            pMoveSource = ( PVOID ) pAdapter->m_Hardware.m_bOverrideAddress;
            uiMoveBytes = sizeof( pAdapter->m_Hardware.m_bOverrideAddress );
            break;

        case OID_802_3_MULTICAST_LIST:
            ulGeneric = ( ULONG ) pAdapter->m_Hardware.m_bMulticastListSize;
            break;

        case OID_802_3_MAXIMUM_LIST_SIZE:
            ulGeneric = MAX_MULTICAST_LIST;
            break;

#if (NDISVER >= 50)  ||  defined( UNDER_CE )
        case OID_PNP_CAPABILITIES:
        {
            uiMoveBytes = sizeof( NDIS_PNP_CAPABILITIES );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -