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;