I am currently trying to pass " 2c_oidsndisrequest " HLK test for my network driver . When i run this test , my driver failed to pass this test case . Using HLK Logs i can see that error as
Errors :
Testing OID_GEN_SUPPORTED_LIST
- BytesNeeded is not a multiple of 4
Testing unknown length OID OID_802_3_MULTICAST_LIST
- Unable to clear multicast address list. NdisStatus = 0xC0010009
But i am handling these OID’s inside mini port driver is like this :
miniport.cpp
ULONG Id = 0 ;
MaximumListSize = 32;
SupportedOidsSize = 45;
SupportedOids = new NDIS_OID[SupportedOidsSize];
SupportedOids[Id++] = OID_GEN_SUPPORTED_LIST;
SupportedOids[Id++] = OID_802_3_MAXIMUM_LIST_SIZE;
etc…
NDIS_STATUS CMiniport::OidRequest(
__in PNDIS_OID_REQUEST OidRequest
) {
NDIS_STATUS status = NDIS_STATUS_SUCCESS;
if ((OidRequest->RequestType == NdisRequestQueryInformation) || (OidRequest->RequestType == NdisRequestQueryStatistics)) {
PVOID pInformation = NULL;
ULONG ulInformationLength = 0;
ULONG ulZerro = 0;
switch (OidRequest->DATA.QUERY_INFORMATION.Oid) {
case OID_GEN_SUPPORTED_LIST:
pInformation = (PVOID)SupportedOids;
ulInformationLength = sizeof(SupportedOids);
//OidRequest->DATA.QUERY_INFORMATION.BytesNeeded = sizeof(ULONG64);
break;
…
… etc … OID’s
…
…
case OID_802_3_MAXIMUM_LIST_SIZE:
pInformation = &MaximumListSize;
ulInformationLength = sizeof(MaximumListSize);
break;
default:
status = NDIS_STATUS_NOT_SUPPORTED;
break;
}
if (pInformation != NULL) {
if (OidRequest->DATA.QUERY_INFORMATION.InformationBufferLength < ulInformationLength) {
OidRequest->DATA.QUERY_INFORMATION.BytesNeeded = ulInformationLength;
status = NDIS_STATUS_BUFFER_TOO_SHORT;
}
else
{
NdisMoveMemory(OidRequest->DATA.QUERY_INFORMATION.InformationBuffer, pInformation, ulInformationLength);
OidRequest->DATA.QUERY_INFORMATION.BytesWritten = ulInformationLength;
status = NDIS_STATUS_SUCCESS;
}
}
}
else if (OidRequest->RequestType == NdisRequestSetInformation) {
switch (OidRequest->DATA.SET_INFORMATION.Oid) {
case OID_802_3_MULTICAST_LIST:
break;
}
}
return status;
}
I don’t know what mistake i made . i tried to add
OidRequest->DATA.QUERY_INFORMATION.BytesNeeded = sizeof(ULONG64);
as BytesNeeded in OID_GEN_SUPPORTED_LIST Oid’s .
I am not handling anything in OID_802_3_MULTICAST_LIST . just skip it . If i add NDIS_STATUS_NOT_SUPPORTED in OID_802_3_MULTICAST_LIST , still i got same error in HLK Test .
Any suggestions ?
Thanks