我想確定Windows CE環境中以太網適配器的鏈接速度。 OS的實際版本是支持NDIS6的WEC2013。如何檢索網絡adpater鏈接速度?
微型端口驅動程序在MiniportQueryInformation函數中提供OID_GET_LINK_SPEED。但我無法直接從用戶模式程序打開驅動程序。
如何在正常程序中從微型端口驅動程序查詢信息?
我想確定Windows CE環境中以太網適配器的鏈接速度。 OS的實際版本是支持NDIS6的WEC2013。如何檢索網絡adpater鏈接速度?
微型端口驅動程序在MiniportQueryInformation函數中提供OID_GET_LINK_SPEED。但我無法直接從用戶模式程序打開驅動程序。
如何在正常程序中從微型端口驅動程序查詢信息?
如果您只想獲得網絡適配器的鏈接速度,那麼,而不是查詢OID,GetIfEntry API可能是一條可行的路。返回的MIB_IFROW結構指示鏈接速度,鏈接狀態以及與適配器關聯的各種統計信息。
要直接從微型端口獲取此信息,請使用標準的Windows CE NDISUIO驅動程序。如果此驅動程序在您正在使用的設備上不可用,並且您無法修改操作系統映像(通過添加SYSGEN_NDISUIO並重新構建),則使用上述的GetIfEntry。
由於驅動程序支持OID_GEN_LINK_SPEED,它很可能是NDIS5.x實現(WEC2013中的NDIS6堆棧也實現了NDIS5.x接口,允許使用NDIS5.x驅動程序)。另一方面,真正的NDIS6微型端口支持OID_GEN_LINK_STATE而不是OID_GEN_LINK_SPEED。
下面是一個演示如何通過直接查詢OID_GEN_LINK_SPEED來獲取鏈接速度的示例。請注意,返回的鏈接速度爲100 bps單位。
#include <ndis.h>
#include <nuiouser.h>
// ...
void GetLinkSpeed()
{
HANDLE hNdisUio = CreateFile(
NDISUIO_DEVICE_NAME,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
NDISUIO_QUERY_OID query = { 0 };
query.Oid = OID_GEN_LINK_SPEED;
query.ptcDeviceName = L"NE20001"; // Adapter name
DeviceIoControl(
hNdisUio,
IOCTL_NDISUIO_QUERY_OID_VALUE,
&query,
sizeof(query),
&query,
sizeof(query),
NULL,
NULL
);
CloseHandle(hNdisUio);
DWORD speed = *((DWORD *)query.Data) * 100;
RETAILMSG(1, (L"Link speed: %u bps\r\n", speed));
}
所以用這種方法我必須改變設備並添加一個新的驅動程序NDISUIO它?有沒有辦法省略這個? – harper
對不起,我不知道任何ndisuio的替代品。但是您確定它尚未包含在您的設備中?如果您可以修改操作系統映像,則只需在Platform Builder中添加SYSGEN_NDISUIO即可。 –
不,不幸的是我沒有修改操作系統的能力。我只是一個簡單的應用程序,應該報告一些信息,包括鏈接速度。 – harper