diff options
| author | Adam Shapiro <[email protected]> | 2016-02-04 12:57:08 -0800 |
|---|---|---|
| committer | Adam Shapiro <[email protected]> | 2016-02-04 12:57:08 -0800 |
| commit | 921231effe018f3939f5b67fc7e44560aa6f3998 (patch) | |
| tree | 8b9b459a02222a9ce98a89bd6956eb8beb2757d9 /network/wlan/ihvsample/adapters.cpp | |
| parent | c4ba9c629505328d040d318a6193b966d7dbc800 (diff) | |
Moved Native WIFI IHV Service Sample
Moves sample to unique folder, in order to add another WIFI sample
GitHub repository
Diffstat (limited to 'network/wlan/ihvsample/adapters.cpp')
| -rw-r--r-- | network/wlan/ihvsample/adapters.cpp | 439 |
1 files changed, 0 insertions, 439 deletions
diff --git a/network/wlan/ihvsample/adapters.cpp b/network/wlan/ihvsample/adapters.cpp deleted file mode 100644 index 919e47a6..00000000 --- a/network/wlan/ihvsample/adapters.cpp +++ /dev/null @@ -1,439 +0,0 @@ -/*++ - -Copyright (c) 2005 Microsoft Corporation - -Abstract: - - Sample IHV Extensibility DLL to extend - 802.11 LWF driver for third party protocols. - - ---*/ - -#include "precomp.h" - -LIST_ENTRY g_AdaptersList = {0}; - - - -// -// Copied Macros from wdm.h -// - -#define CONTAINING_RECORD(address, type, field) ((type *)( \ - (PCHAR)(address) - \ - (ULONG_PTR)(&((type *)0)->field))) - - -#define InitializeListHead(ListHead) (\ - (ListHead)->Flink = (ListHead)->Blink = (ListHead)) - - - -#define RemoveEntryList(Entry) {\ - PLIST_ENTRY _EX_Blink;\ - PLIST_ENTRY _EX_Flink;\ - _EX_Flink = (Entry)->Flink;\ - _EX_Blink = (Entry)->Blink;\ - _EX_Blink->Flink = _EX_Flink;\ - _EX_Flink->Blink = _EX_Blink;\ - } - - -#define InsertTailList(ListHead,Entry) {\ - PLIST_ENTRY _EX_Blink;\ - PLIST_ENTRY _EX_ListHead;\ - _EX_ListHead = (ListHead);\ - _EX_Blink = _EX_ListHead->Blink;\ - (Entry)->Flink = _EX_ListHead;\ - (Entry)->Blink = _EX_Blink;\ - _EX_Blink->Flink = (Entry);\ - _EX_ListHead->Blink = (Entry);\ - } - - - - -// -// Initialize the AdapterList data structure. -// -VOID -InitAdapterDetailsList -( - VOID -) -{ - EnterCriticalSection( &g_csSynch ); - - // Assuming that memory in g_AdaptersList - // could be garbage - just initialize the - // fields appropriately. - - InitializeListHead( &g_AdaptersList ); - - LeaveCriticalSection( &g_csSynch ); - - return; -} - - - - -// -// Free the AdapterList data structure - contention is not supported. -// -VOID -DeinitAdapterDetailsList -( - VOID -) -{ - EnterCriticalSection( &g_csSynch ); - - // ASSERT that the list is empty. The call - // to InitializeListHead is not really required - // if the following conditions are true. - ASSERT(g_AdaptersList.Flink == &g_AdaptersList ); - ASSERT(g_AdaptersList.Blink == &g_AdaptersList ); - - // clear the memory any way. - InitializeListHead( &g_AdaptersList ); - - LeaveCriticalSection( &g_csSynch ); - - return; -} - - - - - -// -// Add a single adapter to the list. Starting refcount is one. -// -DWORD -InitAdapterDetails -( - HANDLE hDot11SvcHandle, - PHANDLE phIhvExtAdapter -) -{ - DWORD dwResult = ERROR_SUCCESS; - BOOL bLocked = FALSE; - PADAPTER_DETAILS pAdapterDetails = NULL; - HANDLE hIhvExtAdapter = NULL; - - - // acquire global lock. - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - // verify state. this check prevents new adapters from - // being added when service is being deinited. - if (!g_bAllowInit) - { - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - // allocate memory. - pAdapterDetails = (PADAPTER_DETAILS) PrivateMemoryAlloc( sizeof( ADAPTER_DETAILS ) ); - if ( !pAdapterDetails ) - { - dwResult = ERROR_OUTOFMEMORY; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - // add the new object to the list. if anything fails - // in this function the object would be automatically - // dereferenced and removed from the list. - InsertTailList( &g_AdaptersList, &(pAdapterDetails->Link) ); - - // initialize fields that are used by object lifetime management. - hIhvExtAdapter = (HANDLE) &(pAdapterDetails->Link); - pAdapterDetails->dwRefCount = 1; - pAdapterDetails->hDot11SvcHandle = hDot11SvcHandle; - pAdapterDetails->NicState = nic_state_initialized; - - - // Event that gets triggered - // once UI response is received. - pAdapterDetails->hUIResponse = - CreateEvent - ( - NULL, - FALSE, // Auto Reset - FALSE, // Start in non-signaled state. - NULL - ); - if ( !(pAdapterDetails->hUIResponse) ) - { - dwResult = GetLastError( ); - BAIL_ON_WIN32_ERROR( dwResult ); - } - - - // fill out-params. release responsibility to - // for deiniting object to caller. - (*phIhvExtAdapter) = hIhvExtAdapter; - hIhvExtAdapter = NULL; - -error: - if ( hIhvExtAdapter ) - { - // something failed after adding the object to - // the global list. so it needs to be removed. - DerefenceAdapterDetails( hIhvExtAdapter ); - } - if ( bLocked ) - { - // leave global lock. - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} - - - - - - -// -// Add a reference to a particular adapter and find the pointer to the context. -// -DWORD -ReferenceAdapterDetails -( - HANDLE hIhvExtAdapter, - PADAPTER_DETAILS* ppAdapterDetails -) -{ - DWORD dwResult = ERROR_NOT_FOUND; - BOOL bLocked = FALSE; - PLIST_ENTRY pEntry = NULL; - PADAPTER_DETAILS pAdapterDetails = NULL; - - ASSERT( ppAdapterDetails ); - - // acquire global lock. - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - - // search the global list of adapters for a match. - for - ( - pEntry = g_AdaptersList.Flink; - pEntry != &g_AdaptersList; - pEntry = pEntry->Flink - ) - { - // Get the adapter data structure for current entry. - pAdapterDetails = CONTAINING_RECORD( pEntry, ADAPTER_DETAILS, Link ); - ASSERT( pAdapterDetails ); - - // conditions could be converted to an ASSERT. - if - ( - ( pAdapterDetails->NicState == nic_state_uninitialized ) || - ( pAdapterDetails->NicState >= nic_state_max ) - ) - { - ASSERTFAILURE(); - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - // if match found - bail with success. - if ( hIhvExtAdapter == ((HANDLE) pEntry) ) - { - (pAdapterDetails->dwRefCount)++; - (*ppAdapterDetails) = pAdapterDetails; - - dwResult = ERROR_SUCCESS; - BAIL( ); - } - } - -error: - if ( bLocked ) - { - // release global lock. - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} - - - - - -// -// Find adapter context pointer using UI request GUID. -// -DWORD -ReferenceAdapterDetailsByUIRequestGuid -( - GUID* pguidUIRequest, - PADAPTER_DETAILS* ppAdapterDetails, - HANDLE* phIhvExtAdapter -) -{ - DWORD dwResult = ERROR_NOT_FOUND; - BOOL bLocked = FALSE; - PLIST_ENTRY pEntry = NULL; - PADAPTER_DETAILS pAdapterDetails = NULL; - - ASSERT( ppAdapterDetails ); - ASSERT( phIhvExtAdapter ); - - // acquire global lock. - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - // look for adapter with matching ui request guid in the global list. - for - ( - pEntry = g_AdaptersList.Flink; - pEntry != &g_AdaptersList; - pEntry = pEntry->Flink - ) - { - // get the current adapter's context info. - pAdapterDetails = CONTAINING_RECORD( pEntry, ADAPTER_DETAILS, Link ); - ASSERT( pAdapterDetails ); - - // could be an ASSERT. - if - ( - ( pAdapterDetails->NicState == nic_state_uninitialized ) || - ( pAdapterDetails->NicState >= nic_state_max ) - ) - { - ASSERTFAILURE(); - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - // if match found, bail with success. - if ( pAdapterDetails->currentGuidUIRequest == (*pguidUIRequest) ) - { - (pAdapterDetails->dwRefCount)++; - (*ppAdapterDetails) = pAdapterDetails; - (*phIhvExtAdapter) = (HANDLE) pEntry; - - dwResult = ERROR_SUCCESS; - BAIL( ); - } - } - -error: - if ( bLocked ) - { - // leave global lock. - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} - - - - - - -// -// Dereference an adapter - resources will be freed when the refcount -// goes to zero. -// -VOID -DerefenceAdapterDetails -( - HANDLE hIhvExtAdapter -) -{ - DWORD dwResult = ERROR_SUCCESS; - BOOL bLocked = FALSE; - PADAPTER_DETAILS pAdapterDetails = NULL; - BOOL bOk = TRUE; - - - // acquire global lock. - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - // trying to reference the adapter. the part of the - // code that increments the refcount is not useful - // here, we are only using the algorithm to find - // the context pointer. the refcount would be decremented - // after the function call if the call succeeds. - dwResult = - ReferenceAdapterDetails - ( - hIhvExtAdapter, - &pAdapterDetails - ); - BAIL_ON_WIN32_ERROR( dwResult ); - - ASSERT( pAdapterDetails ); - - // Undoing the refcount increment in the previous call. - (pAdapterDetails->dwRefCount)--; - - // could be an ASSERT - the adapter - // context should not be in this state. - if ( 0 == pAdapterDetails->dwRefCount ) - { - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - // performing the intended dereferencing. - (pAdapterDetails->dwRefCount)--; - - // checking if the adapter entry can go. - if ( pAdapterDetails->dwRefCount ) - { - BAIL( ); - } - - // Since this was the last reference, - // it is time to deinitialize the memory. - - // remove the adapter from the global list. - RemoveEntryList( &(pAdapterDetails->Link) ); - - // Close handle to the UI response event. - if ( pAdapterDetails->hUIResponse ) - { - bOk = CloseHandle( pAdapterDetails->hUIResponse ); - ASSERT( bOk ); - } - - // free the UI response memory. - if ( pAdapterDetails->pbResponse ) - { - PrivateMemoryFree( pAdapterDetails->pbResponse ); - pAdapterDetails->pbResponse = NULL; - } - - // frees the connection specific data in the adapter data structure. - FreeOnexData( &(pAdapterDetails->pOnexData) ); - - // frees the profiles. - FreeIhvConnectivityProfile( &(pAdapterDetails->pConnectivityProfile) ); - FreeIhvSecurityProfile( &(pAdapterDetails->pSecurityProfile) ); - - // frees the context. - SecureZeroMemory( pAdapterDetails, sizeof( ADAPTER_DETAILS ) ); - PrivateMemoryFree( pAdapterDetails ); - -error: - if ( bLocked ) - { - // release global lock. - LeaveCriticalSection( &g_csSynch ); - } - ASSERT( ERROR_SUCCESS == dwResult ); - return; -} - |
