Network UI Sample Application Ethman (Compact 2013)
10/26/2015
This sample shows you how to display an icon in the notification area that indicates network information, such as IP address and wireless network availability, and provides a basic configuration dialog box for 802.11 adapters if no previous configuration is available.
The source code is located in %_WINCEROOT%\Public\Common\Oak\Drivers\Netsamp\Ethman.
Prerequisites
- Windows Embedded Compact 2013
- Microsoft Visual Studio 2013 or Microsoft Visual Studio 2015
- Network UI Sample Application Connmc (SYSGEN_CONNMC)
- At least one wired or wireless network controller with the proper NDIS miniport driver
Using the Sample
To build and run the sample using an in-proc server
Create an OS design in Platform Builder.
Include the Network User Interface catalog item (SYSGEN_CONNMC) in the OS design.
For more information, see Network User Interface Catalog Items and Sysgen Variables.
Build the OS design into a run-time image.
Download the run-time image onto the device.
How the Sample Works
Click the icon in the notification area of the taskbar to start Ethman from the sample shell. Ethman interacts with the automatic configuration subsystem, and uses the wlanapi interface to retrieve and set 802.11 parameters, such as signal strength and a visible Service Set Identifier (SSID) list.
It uses the Network Driver Interface Specification (NDIS) User-mode I/O (NDISUIO) interface to register for notifications of adapter insertion or removal.
It loads a wrapper into the user process to communicate with the LAN driver. The wlanapi interface is exposed in the header file wlanapi.h.
The following table shows the Ethman functions that are exported by NetUI. A sample of these functions and their return values are contained in Ethman.h in the %_WINCEROOT%\Public\Common\Oak\Drivers\Netsamp\Ethman directory.
Function |
Description |
Parameters |
---|---|---|
AddNetUISystrayIcon |
Adds an icon to the system tray for a network adapter. |
|
RemoveNetUISystrayIcon |
Removes an icon from the tray for a network adapter. |
|
IsPropSheetDialogMessage |
Netui currently maintains a list that associates a property sheet with each of the HWNDs returned in AddNetUISystrayIcon. Because ethman actually has the message pump, it is necessary to provide this function which should call into PropSheet_IsDialogMessage and return this result. |
|
ClosePropSheetDialogIfReady |
For a modeless property sheet, the message pump must call into PropSheet_GetCurrentPageHwnd to determine if the property sheet should be destroyed. This function must look up the property sheet of the associated hWnd and destroy the window if necessary. |
|
UpdateConnectionStatus |
Update the status of a given tray icon to either by connected or not connected. |
|
Note
When Ethman adds a wireless adapter, a dialog box appears that offers options for the user to set the wireless properties. These properties are then set in the wzcuip.c file for use by the operating system.
The following code example shows the network UI code that is used by ethman.dll to populate its simple wireless dialog box. In this example, rdBSSIDList is used to show visible networks and rdStSSIDList is used to show preferred networks.
HRESULT RefreshWirelessInfo(HWND hwndDlg)
{
HRESULT hr = S_OK;
DWORD dwError = ERROR_SUCCESS;
SystrayIcon *pSysIcon = NULL;
// Get the notification icon for the given window
hr = GetDeviceSystrayIcon(hwndDlg, &pSysIcon);
if(FAILED(hr) || !pSysIcon)
{
DEBUGMSG(ZONE_ERROR, (TEXT("NETUIQC: Error getting systray icon struct")));
goto exit;
}
// If the zero config data has already been deleted, then do not delete it.
// This should not ever get called, but it is best to be certain.
// If it does get called, the refresh thread will exit quietly and
// the notification should resume the next time around.
if(pSysIcon->WLanInfo.IntfEntry.bInitialized == FALSE)
{
hr = E_FAIL;
goto exit;
}
pfnWZCDeleteIntfObj(&pSysIcon->WLanInfo.IntfEntry);
pSysIcon->WLanInfo.IntfEntry.wszGuid = pSysIcon->ptcDeviceName;
// GetWireless Info
if ((dwError = pfnWZCQueryInterface(
NULL,
INTF_ALL,
&pSysIcon->WLanInfo.IntfEntry,
&pSysIcon->WLanInfo.dwOIDFlags)) != ERROR_SUCCESS)
{
DEBUGMSG(ZONE_ERROR,(TEXT("NETUIQC: WZCQueryInterface failed 0x%X\r\n"),dwError));
hr = E_FAIL;
goto exit;
}
FillVisibleList(&pSysIcon->WLanInfo,(PWZC_802_11_CONFIG_LIST)pSysIcon->WLanInfo.IntfEntry.rdBSSIDList.pData);
FillPreferredList(&pSysIcon->WLanInfo,(PWZC_802_11_CONFIG_LIST)pSysIcon->WLanInfo.IntfEntry.rdStSSIDList.pData);
FillCurrentConfig(&pSysIcon->WLanInfo,&pSysIcon->WLanInfo.IntfEntry);
exit:
return hr;
} // RefreshWirelessInfo
See Also
Tasks
Network UI Sample Application Connmc
Network UI Sample Application Rnaapp
Concepts
Network User Interface Catalog Items and Sysgen Variables