Why Interrupt Moderation is failing in NDIS Mini port ?

I am testing my NDIS Miniport network driver with HLK Studio . After running the NDISTest 6.5 - [2 Machine] - InterruptModeration test case , my application driver failed .

I can see the log error like :


Querying OID_GEN_INTERRUPT_MODERATION failed on the miniport. NDIS_STATUS (0x00000057)
Error Type: WIN32
Error Code: 0x50010
Error Text: The directory cannot be removed.


But i am handling OID_GEN_INTERRUPT_MODERATION query and set request in my miniport .

My miniport driver does not support interrupt moderation, so i specified NdisInterruptModerationNotSupported in the InterruptModeration member of the NDIS_INTERRUPT_MODERATION_PARAMETERS structure.

Then why this is error ? anything i am missing ? Please suggest possible solutions

On Dec 15, 2016, at 6:51 AM, xxxxx@gmail.com wrote:

I am testing my NDIS Miniport network driver with HLK Studio . After running the NDISTest 6.5 - [2 Machine] - InterruptModeration test case , my application driver failed .

I can see the log error like :


Querying OID_GEN_INTERRUPT_MODERATION failed on the miniport. NDIS_STATUS (0x00000057)

But i am handling OID_GEN_INTERRUPT_MODERATION query and set request in my miniport .

I don’t know the details of that request, but error 0x57 is ERROR_INVALID_PARAMETER. Are you returning an invalid parameter code in your driver?

Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.

No . I am sending valid code as return parameter . As per Microsoft document of OID_GEN_INTERRUPT_MODERATION :

For a query, if a miniport driver does not support interrupt moderation, the driver must specify NdisInterruptModerationNotSupported in the InterruptModeration member of the NDIS_INTERRUPT_MODERATION_PARAMETERS structure.

For a set, if the driver reported NdisInterruptModerationNotSupported in response to the OID_GEN_INTERRUPT_MODERATION query, the driver should return NDIS_STATUS_INVALID_DATA in response to the set request. The miniport driver receives an NDIS_INTERRUPT_MODERATION_PARAMETERS structure. If the InterruptModeration member of NDIS_INTERRUPT_MODERATION_PARAMETERS is set to NdisInterruptModerationEnabled, the miniport driver should enable interrupt moderation. Otherwise, it should disable interrupt moderation.

I am handling this in my code . I don’t know why this test failing ?

This is my handling :

case OID_GEN_INTERRUPT_MODERATION:

if (OidRequest->DATA.QUERY_INFORMATION.InformationBufferLength < sizeof(NDIS_INTERRUPT_MODERATION_PARAMETERS))
{
status = NDIS_STATUS_INVALID_LENGTH;
OidRequest->DATA.QUERY_INFORMATION.BytesNeeded = sizeof(NDIS_INTERRUPT_MODERATION_PARAMETERS);
} else
{
PNDIS_INTERRUPT_MODERATION_PARAMETERS pNdisInterruptModerationParameters = (PNDIS_INTERRUPT_MODERATION_PARAMETERS) OidRequest->DATA.QUERY_INFORMATION.InformationBuffer;
pNdisInterruptModerationParameters->Header.Type = NDIS_OBJECT_TYPE_DEFAULT;
pNdisInterruptModerationParameters->Header.Size = NDIS_SIZEOF_INTERRUPT_MODERATION_PARAMETERS_REVISION_1;
pNdisInterruptModerationParameters->Header.Revision = NDIS_INTERRUPT_MODERATION_PARAMETERS_REVISION_1;
pNdisInterruptModerationParameters->Flags = 0;
pNdisInterruptModerationParameters->InterruptModeration = NdisInterruptModerationNotSupported;
OidRequest->DATA.QUERY_INFORMATION.BytesWritten = NDIS_SIZEOF_INTERRUPT_MODERATION_PARAMETERS_REVISION_1;
}
break;