📄 ndisoid.c
字号:
*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 + -