У меня сетевой драйвер фильтр, сгенерированный 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, может я что то не так делаю 🙁