Query OID SSID from Filter Restart, NDIS Filter Driver

Hi,

I have some issues trying to get the ssid. The underlying miniport says in
NDIS_RESTART_GENERAL_ATTRIBUTES that is supporting OID_802_11_SSID.
But when I query it, I get, on the callback, 0xC00000BB =
STATUS_NOT_SUPPORTED.

Adapter is Intel(R) Wireless WiFi Link 4965AG.
OID_802_11_SSID - is mandatory.

code:
FilterRestart()…

p_ndis_request =
NdisAllocateMemoryWithTagPriority(p_module_context->NdisFilterModuleHandle,

sizeof(NDIS_OID_REQUEST),
POOL_TAG,

HighPoolPriority);
if(NULL == p_ndis_request){
status = NDIS_STATUS_RESOURCES;
break;
}
NdisZeroMemory(p_ndis_request, sizeof(NDIS_OID_REQUEST));

//fill ndis request structure
p_ndis_request->Header.Type = NDIS_OBJECT_TYPE_OID_REQUEST;
p_ndis_request->Header.Revision = NDIS_OID_REQUEST_REVISION_1;
p_ndis_request->Header.Size =
NDIS_SIZEOF_OID_REQUEST_REVISION_1;//sizeof(NDIS_OID_REQUEST) - STATUS
invalid OID
p_ndis_request->Timeout = 10;

//requesting SSID
p_ndis_request->RequestType = NdisRequestQueryInformation;
p_ndis_request->DATA.QUERY_INFORMATION.Oid = OID_802_11_SSID;

//set buffer to receive the result, required from NON paged
memory pool
p_ndis_request->DATA.QUERY_INFORMATION.InformationBufferLength =
sizeof(NDIS_802_11_SSID);
p_ndis_request->DATA.QUERY_INFORMATION.InformationBuffer =
&p_module_context->SSID;

//Zero buffer

//NdisZeroMemory(p_ndis_request->DATA.QUERY_INFORMATION.InformationBuffer,
//
p_ndis_request->DATA.QUERY_INFORMATION.InformationBufferLength);

p_request_context =
(PFILTER_REQUEST_CONTEXT)(&p_ndis_request->SourceReserved[0]);
p_request_context->_first = (DWORD)OID_SSID_SOURCE_RESERVED;

p_ndis_request->RequestId = (PVOID)OID_SSID_FILTER_REQUEST_ID;
p_ndis_request->RequestHandle =
p_module_context->NdisFilterModuleHandle;

status =
NdisFOidRequest(p_module_context->NdisFilterModuleHandle, p_ndis_request);

Thank you,

The OID_802_11_xyz family of OIDs are basically NDIS 5 OIDs. They are replaced with OID_DOT11_abc OIDs on Vista and later platforms using NDIS 6 “Native Wi-Fi” miniports.

Good luck,

Thomas F. Divine
http://www.pcausa.com

From: Neagoe Gabriel
Sent: Friday, October 15, 2010 5:05 AM
To: Windows System Software Devs Interest List
Subject: [ntdev] Query OID SSID from Filter Restart, NDIS Filter Driver

Hi,

I have some issues trying to get the ssid. The underlying miniport says in NDIS_RESTART_GENERAL_ATTRIBUTES that is supporting OID_802_11_SSID.
But when I query it, I get, on the callback, 0xC00000BB = STATUS_NOT_SUPPORTED.

Adapter is Intel(R) Wireless WiFi Link 4965AG.
OID_802_11_SSID - is mandatory.

code:
FilterRestart()…

p_ndis_request = NdisAllocateMemoryWithTagPriority(p_module_context->NdisFilterModuleHandle,
sizeof(NDIS_OID_REQUEST),
POOL_TAG,
HighPoolPriority);
if(NULL == p_ndis_request){
status = NDIS_STATUS_RESOURCES;
break;
}
NdisZeroMemory(p_ndis_request, sizeof(NDIS_OID_REQUEST));

//fill ndis request structure
p_ndis_request->Header.Type = NDIS_OBJECT_TYPE_OID_REQUEST;
p_ndis_request->Header.Revision = NDIS_OID_REQUEST_REVISION_1;
p_ndis_request->Header.Size = NDIS_SIZEOF_OID_REQUEST_REVISION_1;//sizeof(NDIS_OID_REQUEST) - STATUS invalid OID
p_ndis_request->Timeout = 10;

//requesting SSID
p_ndis_request->RequestType = NdisRequestQueryInformation;
p_ndis_request->DATA.QUERY_INFORMATION.Oid = OID_802_11_SSID;

//set buffer to receive the result, required from NON paged memory pool
p_ndis_request->DATA.QUERY_INFORMATION.InformationBufferLength = sizeof(NDIS_802_11_SSID);
p_ndis_request->DATA.QUERY_INFORMATION.InformationBuffer = &p_module_context->SSID;

//Zero buffer
//NdisZeroMemory(p_ndis_request->DATA.QUERY_INFORMATION.InformationBuffer,
// p_ndis_request->DATA.QUERY_INFORMATION.InformationBufferLength);

p_request_context = (PFILTER_REQUEST_CONTEXT)(&p_ndis_request->SourceReserved[0]);
p_request_context->_first = (DWORD)OID_SSID_SOURCE_RESERVED;

p_ndis_request->RequestId = (PVOID)OID_SSID_FILTER_REQUEST_ID;
p_ndis_request->RequestHandle = p_module_context->NdisFilterModuleHandle;

status = NdisFOidRequest(p_module_context->NdisFilterModuleHandle, p_ndis_request);

Thank you,
— NTDEV is sponsored by OSR For our schedule of WDF, WDM, debugging and other seminars visit: http://www.osr.com/seminars To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer

IIRC, this is a bug in their NDIS6 driver. It claims to support some ndis5
OIDs, but actually does not.
– pa

“Neagoe Gabriel” wrote in message news:xxxxx@ntdev…
> Hi,
>
> I have some issues trying to get the ssid. The underlying miniport says in
> NDIS_RESTART_GENERAL_ATTRIBUTES that is supporting OID_802_11_SSID.
> But when I query it, I get, on the callback, 0xC00000BB =
> STATUS_NOT_SUPPORTED.
>
> Adapter is Intel(R) Wireless WiFi Link 4965AG.
> OID_802_11_SSID - is mandatory.
>
> code:
> FilterRestart()…
> …
> p_ndis_request =
> NdisAllocateMemoryWithTagPriority(p_module_context->NdisFilterModuleHandle,
>
> sizeof(NDIS_OID_REQUEST),
> POOL_TAG,
>
> HighPoolPriority);
> if(NULL == p_ndis_request){
> status = NDIS_STATUS_RESOURCES;
> break;
> }
> NdisZeroMemory(p_ndis_request, sizeof(NDIS_OID_REQUEST));
>
> //fill ndis request structure
> p_ndis_request->Header.Type = NDIS_OBJECT_TYPE_OID_REQUEST;
> p_ndis_request->Header.Revision = NDIS_OID_REQUEST_REVISION_1;
> p_ndis_request->Header.Size =
> NDIS_SIZEOF_OID_REQUEST_REVISION_1;//sizeof(NDIS_OID_REQUEST) - STATUS
> invalid OID
> p_ndis_request->Timeout = 10;
>
> //requesting SSID
> p_ndis_request->RequestType = NdisRequestQueryInformation;
> p_ndis_request->DATA.QUERY_INFORMATION.Oid = OID_802_11_SSID;
>
> //set buffer to receive the result, required from NON paged
> memory pool
> p_ndis_request->DATA.QUERY_INFORMATION.InformationBufferLength
> =
> sizeof(NDIS_802_11_SSID);
> p_ndis_request->DATA.QUERY_INFORMATION.InformationBuffer =
> &p_module_context->SSID;
>
> //Zero buffer
>
> //NdisZeroMemory(p_ndis_request->DATA.QUERY_INFORMATION.InformationBuffer,
> //
> p_ndis_request->DATA.QUERY_INFORMATION.InformationBufferLength);
>
> p_request_context =
> (PFILTER_REQUEST_CONTEXT)(&p_ndis_request->SourceReserved[0]);
> p_request_context->_first = (DWORD)OID_SSID_SOURCE_RESERVED;
>
> p_ndis_request->RequestId = (PVOID)OID_SSID_FILTER_REQUEST_ID;
> p_ndis_request->RequestHandle =
> p_module_context->NdisFilterModuleHandle;
>
> status =
> NdisFOidRequest(p_module_context->NdisFilterModuleHandle, p_ndis_request);
> …
>
> Thank you,
>