NdisOidRequest with NdisRequestSetInformation RequestType return NDIS_STATUS_INVALID_OID

Xiaojie Ma 0 Reputation points
2024-06-24T11:02:48.5166667+00:00

HI,

I am test the ndisprot demo project of Windows-driver-samples, I install the ndis protocol driver with kernel mode and run the test application.

I change the application, i want to change the operate mode with OID_DOT11_CURRENT_OPERATION_MODE, so i write an function to distribute this oid. `

_Success_(return)
BOOL
SetOperateMode(
    _In_ HANDLE  Handle
)
{
    DWORD       BytesReturned;
    BOOLEAN     bSuccess;
    UCHAR       SetBuffer[sizeof(NDISPROT_SET_OID) + sizeof(DOT11_CURRENT_OPERATION_MODE)];
    PNDISPROT_SET_OID  pSetOid;
    PDOT11_CURRENT_OPERATION_MODE pOperateMode;

DEBUGP(("Trying to Set Operate Mode\n"));


pSetOid = (PNDISPROT_SET_OID)&SetBuffer[0];
pSetOid->Oid = OID_DOT11_CURRENT_OPERATION_MODE;
pSetOid->PortNumber = 0;

pOperateMode = (PDOT11_CURRENT_OPERATION_MODE)&SetBuffer[FIELD_OFFSET(NDISPROT_SET_OID, Data)];
pOperateMode->uCurrentOpMode = DOT11_OPERATION_MODE_WFD_GROUP_OWNER;

bSuccess = (BOOLEAN)DeviceIoControl(
    Handle,
    IOCTL_NDISPROT_SET_OID_VALUE,
    (LPVOID)&SetBuffer[0],
    sizeof(SetBuffer),
    (LPVOID)&SetBuffer[0],
    sizeof(SetBuffer),
    &BytesReturned,
    NULL);

if (bSuccess)
{
    DEBUGP(("SetOperateMode: IoControl success, BytesReturned = %d\n",
        BytesReturned));
}
else
{
    DEBUGP(("SetOperateMode: IoControl failed: %d\n", GetLastError()));
}

return (bSuccess);
}

`

But the DeviceIoControl return fail, and the LastError is 31. I cat the log of ndis protocol driver, it show that when the ndis protocol driver call NdisOidRequest api, it return NDIS_STATUS_PENDING, and NdisprotRequestComplete was called with NDIS_STATUS_INVALID_OID status.

And when i run NdisRequestQueryInformation with same oid OID_DOT11_CURRENT_OPERATION_MODE, it return NDIS_STATUS_SUCCESS.

I get the ndis log with traceview tool, it show that when i run query OID_DOT11_CURRENT_OPERATION_MODE, the ndis can redirecting miniport's OidRequest to WDI, and return NDIS_STATUS_SUCCESS

`

00960131	ndis	45012	42716	2	28223	06\24\2024-18:52:04:423	>Begin redirecting miniport's OidRequestHandler to WDI. Miniport=FFFFD282427EF1A0, Oid=0x0d010308(OID_DOT11_CURRENT_OPERATION_MODE), Request=FFFFD28264E25DA0


00960132	Unknown	45012	42716	2	28224	06\24\2024-18:52:04:423	Unknown( 13): GUID=30382edc-5f55-34ea-1982-f80fa9fe2d2c (No Format Information found).

00960133	ndis	45012	42716	2	28225	06\24\2024-18:52:04:423	ndisReferenceMiniportNoCheck:Miniport FFFFD282427EF1A0, Ref = 29

00960134	ndis	45012	42716	2	28226	06\24\2024-18:52:04:423	Completing OID 0x0d010308(OID_DOT11_CURRENT_OPERATION_MODE) via Request FFFFD28264E26620 for drivers {Miniport FFFFD282427EF1A0, Filter 0000000000000000, Open 0000000000000000} with Status 0x00000000(NDIS_STATUS_SUCCESS)

00960135	ndis	45012	42716	2	28227	06\24\2024-18:52:04:423	>Begin filter driver's OidRequestCompleteHandler. Filter=FFFFD2824B67F320, Oid=0x0d010308(OID_DOT11_CURRENT_OPERATION_MODE), Request=FFFFD28264E26620, Status=0x00000000(NDIS_STATUS_SUCCESS)

00960136	Unknown	45012	42716	2	28228	06\24\2024-18:52:04:423	Unknown( 13): GUID=30382edc-5f55-34ea-1982-f80fa9fe2d2c (No Format Information found).

00960137	ndis	45012	42716	2	28229	06\24\2024-18:52:04:423	LWF FFFFD2824B67F320 completed Oid 0x0d010308(OID_DOT11_CURRENT_OPERATION_MODE) via Request FFFFD28264E273F0 with Status 0x00000000(NDIS_STATUS_SUCCESS)

00960138	ndis	45012	42716	2	28230	06\24\2024-18:52:04:423	Completing OID 0x0d010308(OID_DOT11_CURRENT_OPERATION_MODE) via Request FFFFD28264E273F0 for drivers {Miniport 0000000000000000, Filter FFFFD2824B67F320, Open 0000000000000000} with Status 0x00000000(NDIS_STATUS_SUCCESS)

00960139	ndis	45012	42716	2	28231	06\24\2024-18:52:04:423	>Begin filter driver's OidRequestCompleteHandler. Filter=FFFFD2824A959B20, Oid=0x0d010308(OID_DOT11_CURRENT_OPERATION_MODE), Request=FFFFD28264E273F0, Status=0x00000000(NDIS_STATUS_SUCCESS)

00960140	Unknown	45012	42716	2	28232	06\24\2024-18:52:04:423	Unknown( 13): GUID=30382edc-5f55-34ea-1982-f80fa9fe2d2c (No Format Information found).

00960141	Unknown	45012	42716	2	28233	06\24\2024-18:52:04:423	Unknown( 13): GUID=30382edc-5f55-34ea-1982-f80fa9fe2d2c (No Format Information found).

00960142	ndis	45012	42716	2	28234	06\24\2024-18:52:04:423	LWF FFFFD2824A959B20 completed Oid 0x0d010308(OID_DOT11_CURRENT_OPERATION_MODE) via Compat Request FFFFD28264E25A70 (cloned from Request FFFFD28264E272E0) with Status 0x00000000(NDIS_STATUS_SUCCESS)

00960143	ndis	45012	42716	2	28235	06\24\2024-18:52:04:423	Completing OID 0x0d010308(OID_DOT11_CURRENT_OPERATION_MODE) via Request FFFFD28264E272E0 for drivers {Miniport 0000000000000000, Filter FFFFD2824A959B20, Open 0000000000000000} with Status 0x00000000(NDIS_STATUS_SUCCESS)

`

And i test other OID with NdisRequestSetInformation request type, i also return NDIS_STATUS_INVALID_OID. It can be sure that the wifi driver support these oid with Set request type by using the windows hotspot.

Please help me where I went wrong

Windows Network
Windows Network
Windows: A family of Microsoft operating systems that run across personal computers, tablets, laptops, phones, internet of things devices, self-contained mixed reality headsets, large collaboration screens, and other devices.Network: A group of devices that communicate either wirelessly or via a physical connection.
693 questions
Windows 11
Windows 11
A Microsoft operating system designed for productivity, creativity, and ease of use.
8,728 questions
Windows Driver Kit (WDK)
Windows Driver Kit (WDK)
A set of Microsoft tools that are used to develop, test, and deploy Windows drivers.
41 questions
0 comments No comments
{count} votes