NdisOidRequest with NdisRequestSetInformation RequestType return NDIS_STATUS_INVALID_OID
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