Home › Forums › Discussions › General › OID_802_3_XMIT_ONE_COLLISION
- This topic has 5 replies, 2 voices, and was last updated 18 years, 7 months ago by 0lka.
-
AuthorPosts
-
February 18, 2006 at 3:43 pm #4994
У меня сетевой драйвер фильтр, сгенерированный Driver Studio
NDIS_STATUS Adapter::OnQuery(KNdisRequest& Request, NDIS_STATUS ReturnedStatus) //перехватывает запросы OID
NDIS_STATUS Adapter::OnSet(KNdisRequest& Request) //перехватывает установку OIDХочу получить статистику по коллизиям, ну к примеру OID_802_3_XMIT_ONE_COLLISION –
количество фреймов переданых с одним столкновением
Записываю в перехватчик отправки пакетов следующий код
NDIS_STATUS Adapter::OnSend(const KNdisPacket& Original, KNdisPacket& Repackaged)
{
.....
NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
KNdisRequest * Request = (KNdisRequest *) ExAllocatePool(NonPagedPool, sizeof(KNdisRequest));
ULONG * buff=(ULONG *)ExAllocatePool(NonPagedPool, sizeof(ULONG)); // выделяю память
Request->RequestType=NdisRequestQueryInformation; // тип запроса
Request->DATA.QUERY_INFORMATION.Oid = OID_802_3_XMIT_ONE_COLLISION; // указываю какой OID мне нужен
Request->DATA.QUERY_INFORMATION.InformationBuffer=buff; // указываю куда сложить значение
Request->DATA.QUERY_INFORMATION.InformationBufferLength=4; // размер буфера
OnQuery( Request,&Status); // можно ли вызывать перехватчик???
T.Trace("[%s]=%dn",KNDIS_GET_OID_NAME(Request.DATA.QUERY_INFORMATION.Oid), buff);
.....
}
В отладчике я ожидаю увидеть что то типа “[OID_802_3_XMIT_ONE_COLLISION]=12 “, но получаю “[OID_802_3_XMIT_ONE_COLLISION]=-458659865 “
Вообщем что то у меня совсем не выходит получить хоть какое нибудь корректное значение с помощью OID, может я что то не так делаю 🙁
February 18, 2006 at 4:17 pm #5970Даже вот беру прямо в перехватчике пишу
NDIS_STATUS Adapter::OnQuery(KNdisRequest& Request, NDIS_STATUS ReturnedStatus)
{
T.Trace("[%s]=%.8X n",KNDIS_GET_OID_NAME(Request.DATA.QUERY_INFORMATION.Oid),Request.DATA.QUERY_INFORMATION.InformationBuffer);
return ReturnedStatus;
}а в результате получаю совершенно непонятные и невероятные числа
February 19, 2006 at 8:30 am #5971А какой статус (NDIS_STATUS) возвращается? Нижележащий драйвер сетевой карты может просто не поддерживать этот OID…
May 1, 2006 at 11:14 pm #5972Проблема в том, что это драйвер-фильтр
я вижу все что проходит через этот фильтр, но я не могу (у меня не получаеться) запросить какие то данные с помощью OID.
Где можно выполнять запросы OID, в OnSend, OnReceive, OnInitialize, OnHalt?
Или нужно создать свою процедру, но где тогда её вызывать?
И как правильно запрашивать информацию о статистике Ethernet?May 2, 2006 at 9:43 am #5973Проблема в том, что это драйвер-фильтр
В смысле Intermediate?
Где можно выполнять запросы OID, в OnSend, OnReceive, OnInitialize, OnHalt?
В общем случае запросы можно делать как только нижележащий драйвер готов их обрабатывать и до того как он перестает это делать (то есть OnInitialize и OnHalt использовать пожалуй не очень разумно).
В общем случае нужно следить только за IRQL “Callers of NdisRequest can be running at IRQL <= DISPATCH_LEVEL" и руководстоваться тем когда эта самая статистика нужна.
May 16, 2006 at 5:32 pm #5974УРА!!!!
Получилось !!!
Спасибо 🙂 -
AuthorPosts
- You must be logged in to reply to this topic.