<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>dast.blog();</title>
        <link>http://geekswithblogs.net/dastblog/Default.aspx</link>
        <description>"Find a job you love, and you will never have to work a day in your life."</description>
        <language>de-AT</language>
        <copyright>Daniel Strigl</copyright>
        <generator>Subtext Version 0.0.0.0</generator>
        <image>
            <title>dast.blog();</title>
            <url>http://geekswithblogs.net/images/RSS2Image.gif</url>
            <link>http://geekswithblogs.net/dastblog/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>New Site ...</title>
            <category>Sonstiges</category>
            <link>http://geekswithblogs.net/dastblog/archive/2008/10/22/126035.aspx</link>
            <description>&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;
This blog is no longer updated, please visit my new site at &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://danielstrigl.com"&gt;http://danielstrigl.com&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126035"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126035" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dastblog/aggbug/126035.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Daniel Strigl</dc:creator>
            <guid>http://geekswithblogs.net/dastblog/archive/2008/10/22/126035.aspx</guid>
            <pubDate>Wed, 22 Oct 2008 23:42:23 GMT</pubDate>
            <comments>http://geekswithblogs.net/dastblog/archive/2008/10/22/126035.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dastblog/comments/commentRss/126035.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Combine Matlab and DirectShow</title>
            <category>Bakkalaureatsarbeit</category>
            <category>Programmieren</category>
            <link>http://geekswithblogs.net/dastblog/archive/2007/05/25/112747.aspx</link>
            <description>&lt;p&gt;Some weeks ago I had the idea to combine Matlab and DirectShow, and here's the result ...&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/6637/o_MatlabVideoFilter.png" /&gt;&lt;/p&gt;
&lt;p&gt;... a DirectShow filter that will use Matlab to transform a video stream.&lt;/p&gt;
&lt;p&gt;The filter will accept the path to a M-File and the Variable Names of the Input and Output Frame.&lt;/p&gt;
&lt;p&gt;When the DirectShow Filter Graph starts the "Matlab Video Filter" starts the Matlab Command Shell automatically in the background. For each frame the "Matlab Video Filter" load the Input Frame to a Matlab matrix, put the matrix to the Matlab Command Shell, execute the M-File, get the transformed matrix back from the Matlab Command Shell and copy it to the Output Frame.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;The M-File used in the screenshot uses the "Canny Edge Filter" to extract the edges of the video stream and plot the histogram of the Input Frame:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;table width="100%" cellspacing="1" cellpadding="5" border="0" bgcolor="#000000" align="" summary=""&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td bgcolor="#cccccc" style="font-family: Courier New;"&gt; FrameOut = im2uint8(edge(FrameIn, 'canny'));&lt;br /&gt;
            imhist(FrameIn); &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;There are two versions of the "Matlab Video Filter", one for 8 Bit Grayscale video streams and one for RGB 24 video streams.&lt;/p&gt;
&lt;p&gt;Both Microsoft Visual Studio 2005 projects of the filters can be found here: &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://homepage.uibk.ac.at/~csaf3425/MatlabVideo8BitGrayscale.zip"&gt;MatlabVideo8BitGrayscale.zip&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://homepage.uibk.ac.at/~csaf3425/MatlabVideoRgb24.zip"&gt;MatlabVideoRgb24.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=112747"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=112747" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dastblog/aggbug/112747.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Daniel Strigl</dc:creator>
            <guid>http://geekswithblogs.net/dastblog/archive/2007/05/25/112747.aspx</guid>
            <pubDate>Fri, 25 May 2007 09:13:37 GMT</pubDate>
            <comments>http://geekswithblogs.net/dastblog/archive/2007/05/25/112747.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dastblog/comments/commentRss/112747.aspx</wfw:commentRss>
        </item>
        <item>
            <title>My second DirectShow filter</title>
            <category>Bakkalaureatsarbeit</category>
            <category>Programmieren</category>
            <link>http://geekswithblogs.net/dastblog/archive/2007/05/11/112415.aspx</link>
            <description>&lt;p&gt;Today I have finished my second DirectShow filter, a Transform filter to convert a RGB video stream to Grayscale.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/6617/o_RGBtoGrayscale.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The whole Microsoft Visual Studio 2005 project can be downloaded from &lt;a href="http://homepage.uibk.ac.at/~csaf3425/RGBtoGrayscale.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=112415"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=112415" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dastblog/aggbug/112415.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Daniel Strigl</dc:creator>
            <guid>http://geekswithblogs.net/dastblog/archive/2007/05/11/112415.aspx</guid>
            <pubDate>Fri, 11 May 2007 15:01:04 GMT</pubDate>
            <comments>http://geekswithblogs.net/dastblog/archive/2007/05/11/112415.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dastblog/comments/commentRss/112415.aspx</wfw:commentRss>
        </item>
        <item>
            <title>My first DirectShow filter</title>
            <category>Bakkalaureatsarbeit</category>
            <category>Programmieren</category>
            <link>http://geekswithblogs.net/dastblog/archive/2007/05/04/112241.aspx</link>
            <description>&lt;p&gt; This week I have created my first DirectShow filter, a simple TransInPlace filter that will add a logo to a video stream.&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/6593/o_LogoPainting.png" /&gt;&lt;/p&gt;
&lt;p&gt;The whole Microsoft Visual Studio 2005 project can be downloaded from &lt;a href="http://homepage.uibk.ac.at/~csaf3425/LogoPainting.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=112241"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=112241" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dastblog/aggbug/112241.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Daniel Strigl</dc:creator>
            <guid>http://geekswithblogs.net/dastblog/archive/2007/05/04/112241.aspx</guid>
            <pubDate>Fri, 04 May 2007 12:14:15 GMT</pubDate>
            <comments>http://geekswithblogs.net/dastblog/archive/2007/05/04/112241.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dastblog/comments/commentRss/112241.aspx</wfw:commentRss>
        </item>
        <item>
            <title>How to scan for wireless access points on a Pocket PC?</title>
            <category>Bakkalaureatsarbeit</category>
            <category>Programmieren</category>
            <link>http://geekswithblogs.net/dastblog/archive/2006/11/30/100038.aspx</link>
            <description>&lt;p&gt;
I have also written a little Win32 console application in C++ that will show how to do it, to run it you have 
to install the &lt;a title="" href="http://www.symbolictools.de/public/pocketconsole/index.htm"&gt;PocketConsole&lt;/a&gt; from 
&lt;a title="" href="http://www.symbolictools.de"&gt;SymbolicTools&lt;/a&gt;:
&lt;/p&gt;

&lt;textarea language="cpp" name="code2006113001"&gt;
// accesspoints.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include &lt;windows.h&gt;
#include &lt;commctrl.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;ntddndis.h&gt;
#include &lt;nuiouser.h&gt;
#include &lt;winioctl.h&gt;
#include "strconv.h"

int _tmain(int argc, _TCHAR* argv[])
{
    if (argc &lt; 2)
    {
        printf("Usage: accesspoints &lt;adapter name&gt; [delay in ms]\n");
        printf("       &lt;adapter name&gt; name of the wireless adapter\n");
        printf("       [delay in ms]  delay between scan and list query\n");
        return -1;
    }

    LPCTSTR pszAdapter = argv[1];

    HANDLE hDevice = CreateFile(
        NDISUIO_DEVICE_NAME, GENERIC_READ, 
        FILE_SHARE_READ | FILE_SHARE_WRITE, 
        NULL, OPEN_EXISTING, 
        FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
        NULL);

    if (hDevice == INVALID_HANDLE_VALUE)
    {
        DWORD dwError = GetLastError();

        printf("Function \"CreateFile\" failed (0x%08x).\n", dwError);
        return -2;
    }

    DWORD dwBytesReturned = 0;

    NDISUIO_QUERY_OID NDISUIOQueryOid = {0};
    NDISUIOQueryOid.ptcDeviceName = (PTCHAR) pszAdapter;
    NDISUIOQueryOid.Oid = OID_GEN_PHYSICAL_MEDIUM;

    if (!DeviceIoControl(
        hDevice, IOCTL_NDISUIO_QUERY_OID_VALUE,
        &amp;NDISUIOQueryOid, sizeof(NDISUIOQueryOid),
        &amp;NDISUIOQueryOid, sizeof(NDISUIOQueryOid),
        &amp;dwBytesReturned, NULL))
    {
        DWORD dwError = GetLastError();

        CloseHandle(hDevice);
        printf("Function \"DeviceIoControl\" (OID_GEN_PHYSICAL_MEDIUM) failed (0x%08x).\n", 
            dwError);
        return -3;
    }

    if (*((PNDIS_PHYSICAL_MEDIUM) NDISUIOQueryOid.Data) != NdisPhysicalMediumWirelessLan)
    {
        CloseHandle(hDevice);
        printf("Device \"%s\" is no wireless adapter.\n", CTtoA(pszAdapter));
        return -4;
    }

    CTtoW deviceName(pszAdapter);

	if (!DeviceIoControl(
        hDevice, IOCTL_NDISUIO_OPEN_DEVICE,
        (LPVOID)(LPCWSTR) deviceName,
        deviceName.GetLength() * sizeof(WCHAR),
        NULL, 0, &amp;dwBytesReturned, NULL))
    {
        DWORD dwError = GetLastError();

        CloseHandle(hDevice);
        printf("Function \"DeviceIoControl\" (IOCTL_NDISUIO_OPEN_DEVICE) failed (0x%08x).\n", 
            dwError);
        return -5;
    }

    NDISUIO_SET_OID NDISUIOSetOid = {0};  
    NDISUIOSetOid.ptcDeviceName = (PTCHAR) pszAdapter;  
    NDISUIOSetOid.Oid = OID_802_11_BSSID_LIST_SCAN;  

    if (!DeviceIoControl(  
        hDevice, IOCTL_NDISUIO_SET_OID_VALUE,   
        &amp;NDISUIOSetOid, sizeof(NDISUIOSetOid),   
        NULL, 0,   
        &amp;dwBytesReturned, NULL))  
    {  
        DWORD dwError = GetLastError();  
  
        CloseHandle(hDevice);  
        printf("Function \"DeviceIoControl\" (OID_802_11_BSSID_LIST_SCAN) failed (0x%08x).\n",   
            dwError);  
        return -6;  
    }  

    if (argc &gt;= 3)
    {
        Sleep((DWORD)_ttoi(argv[2]));
    }

    for (int i = 1;; ++i)
    {
        const DWORD queryMemSize = sizeof(NDISUIO_QUERY_OID) + sizeof(NDIS_WLAN_BSSID_EX) * i;
        PNDISUIO_QUERY_OID pNDISUIOQueryOid = (PNDISUIO_QUERY_OID) malloc(queryMemSize);

        pNDISUIOQueryOid-&gt;ptcDeviceName = (PTCHAR) pszAdapter;
        pNDISUIOQueryOid-&gt;Oid = OID_802_11_BSSID_LIST;

        if (!DeviceIoControl(
            hDevice, IOCTL_NDISUIO_QUERY_OID_VALUE, 
            pNDISUIOQueryOid, queryMemSize, 
            pNDISUIOQueryOid, queryMemSize, 
            &amp;dwBytesReturned, NULL))
        {
            DWORD dwError = GetLastError();

            free(pNDISUIOQueryOid);

            if (dwError == ERROR_INVALID_USER_BUFFER ||
                dwError == ERROR_INSUFFICIENT_BUFFER)
                continue;

            CloseHandle(hDevice);
            printf("Function \"DeviceIoControl\" (OID_802_11_BSSID_LIST) failed (0x%08x).\n", 
                dwError);
            return -7;
        }

        PNDIS_802_11_BSSID_LIST_EX pBssidList = (PNDIS_802_11_BSSID_LIST_EX) pNDISUIOQueryOid-&gt;Data;

        const int accessPointsCnt = (int) pBssidList-&gt;NumberOfItems;

        printf("Found %d access point(s).\n", accessPointsCnt);

        PNDIS_WLAN_BSSID_EX pBssid = pBssidList-&gt;Bssid;

        for (int j = 0; j &lt; accessPointsCnt; ++j)
        {
            printf("\n");

            printf("MacAddress        : %02X-%02X-%02X-%02X-%02X-%02X\n",
                pBssid-&gt;MacAddress[0], pBssid-&gt;MacAddress[1],
                pBssid-&gt;MacAddress[2], pBssid-&gt;MacAddress[3],
                pBssid-&gt;MacAddress[4], pBssid-&gt;MacAddress[5]);

            char* pSSID = (char*) malloc(pBssid-&gt;Ssid.SsidLength + 1);
            memcpy(pSSID, pBssid-&gt;Ssid.Ssid, pBssid-&gt;Ssid.SsidLength);
            pSSID[pBssid-&gt;Ssid.SsidLength] = '\0';
            printf("Ssid              : %s\n", pSSID);
            free(pSSID);

            printf("Privacy           : %s\n", pBssid-&gt;Privacy ? "Yes" : "No");
            printf("Rssi              : %ld dBm\n", pBssid-&gt;Rssi);
            printf("NetworkTypeInUse  : %s\n", 
                pBssid-&gt;NetworkTypeInUse == Ndis802_11FH ? "Ndis802_11FH" : 
                pBssid-&gt;NetworkTypeInUse == Ndis802_11DS ? "Ndis802_11DS" :
                "&lt;unknown&gt;");
            printf("BeaconPeriod      : %lu Kusec\n", pBssid-&gt;Configuration.BeaconPeriod);
            printf("ATIMWindow        : %lu Kusec\n", pBssid-&gt;Configuration.ATIMWindow);

            if (pBssid-&gt;NetworkTypeInUse == Ndis802_11DS)
            {
                printf("DSConfig          : %lu kHz\n", pBssid-&gt;Configuration.DSConfig);
            }
            else if (pBssid-&gt;NetworkTypeInUse == Ndis802_11FH)
            {
                printf("HopPattern        : %lu\n", pBssid-&gt;Configuration.FHConfig.HopPattern);
                printf("HopSet            : %lu\n", pBssid-&gt;Configuration.FHConfig.HopSet);
                printf("DwellTime         : %lu Kusec\n", pBssid-&gt;Configuration.FHConfig.DwellTime);
            }

            printf("InfrastructureMode: %s\n",
                pBssid-&gt;InfrastructureMode == Ndis802_11IBSS ? "Ndis802_11IBSS" :
                pBssid-&gt;InfrastructureMode == Ndis802_11Infrastructure ? "Ndis802_11Infrastructure" :
                pBssid-&gt;InfrastructureMode == Ndis802_11AutoUnknown ? "Ndis802_11AutoUnknown" :
                "&lt;unknown&gt;");

            printf("SupportedRates    : [0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x]\n",
                pBssid-&gt;SupportedRates[0], pBssid-&gt;SupportedRates[1], pBssid-&gt;SupportedRates[2], 
                pBssid-&gt;SupportedRates[3], pBssid-&gt;SupportedRates[4], pBssid-&gt;SupportedRates[5], 
                pBssid-&gt;SupportedRates[6], pBssid-&gt;SupportedRates[7]);   

            printf("                    BSSBasicRateSet (Mbps):");
            for (int n = 0; n &lt; 8; ++n)
            {
                if (pBssid-&gt;SupportedRates[n] &amp; 0x80)
                    printf(" %.1f", (pBssid-&gt;SupportedRates[n] &amp; 0x7f) * 0.5f);
            }
            printf("\n");

            printf("                    Others (Mbps):");
            for (int n = 0; n &lt; 8; ++n)
            {
                if (!(pBssid-&gt;SupportedRates[n] &amp; 0x80))
                    printf(" %.1f", (pBssid-&gt;SupportedRates[n] &amp; 0x7f) * 0.5f);
            }
            printf("\n");

            if (pBssid-&gt;Length &gt;= sizeof(NDIS_802_11_BSSID_LIST_EX) &amp;&amp; pBssid-&gt;IELength &gt; 0)
            {
                printf("IEs               : [");
                for (ULONG n = 0; n &lt; pBssid-&gt;IELength; ++n)
                {
                    printf("0x%02x", pBssid-&gt;IEs[n]);
                    if (n &lt; pBssid-&gt;IELength - 1)
                        printf(", ");
                }
                printf("]\n");
            }
            
            pBssid = (PNDIS_WLAN_BSSID_EX) ((LPBYTE) pBssid + pBssid-&gt;Length);
        }

        free(pNDISUIOQueryOid);

        CloseHandle(hDevice);

        return accessPointsCnt;
    }
}
&lt;/textarea&gt;

&lt;p&gt;
The following image shows the output of the application running on our HP iPAQ hx2490b:
&lt;/p&gt;

&lt;p&gt;
&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/5831/o_accesspoints.gif"&gt;
&lt;/p&gt;

&lt;SCRIPT language="javascript" src="http://homepage.uibk.ac.at/~csaf3425/scripts/SyntaxHighlighter/shCore.js"&gt;&lt;/SCRIPT&gt;
&lt;SCRIPT language="javascript" src="http://homepage.uibk.ac.at/~csaf3425/scripts/SyntaxHighlighter/shBrushCpp.js"&gt;&lt;/SCRIPT&gt;
&lt;SCRIPT language="javascript"&gt;
    dp.SyntaxHighlighter.HighlightAll('code2006113001', true, true);
&lt;/SCRIPT&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=100038"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=100038" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dastblog/aggbug/100038.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Daniel Strigl</dc:creator>
            <guid>http://geekswithblogs.net/dastblog/archive/2006/11/30/100038.aspx</guid>
            <pubDate>Thu, 30 Nov 2006 23:31:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/dastblog/archive/2006/11/30/100038.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dastblog/comments/commentRss/100038.aspx</wfw:commentRss>
        </item>
        <item>
            <title>My own WiFi Status Monitor</title>
            <category>Bakkalaureatsarbeit</category>
            <category>Programmieren</category>
            <link>http://geekswithblogs.net/dastblog/archive/2007/01/03/102624.aspx</link>
            <description>&lt;p&gt;
I have written a little MFC application that display some properties about the current association, like
&lt;ul&gt;
  &lt;li&gt;the value of the received signal strength indication (RSSI),&lt;/li&gt;
  &lt;li&gt;the service set identifier (SSID) of the BSS,&lt;/li&gt;
  &lt;li&gt;the media access control (MAC) address of the access point and&lt;/li&gt;
  &lt;li&gt;the IP address associated with the WiFi adapter.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
You will find the application under &lt;a href="http://homepage.uibk.ac.at/~csaf3425/WiFiStatus.zip"&gt;WiFiStatus.zip&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/5993/o_wifistatus1.gif"&gt;
&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/5993/o_wifistatus2.gif"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=102624"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=102624" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dastblog/aggbug/102624.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Daniel Strigl</dc:creator>
            <guid>http://geekswithblogs.net/dastblog/archive/2007/01/03/102624.aspx</guid>
            <pubDate>Wed, 03 Jan 2007 20:31:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/dastblog/archive/2007/01/03/102624.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dastblog/comments/commentRss/102624.aspx</wfw:commentRss>
        </item>
        <item>
            <title>How to connect to an WEP encrypted access point using NDISUIO?</title>
            <category>Bakkalaureatsarbeit</category>
            <category>Programmieren</category>
            <link>http://geekswithblogs.net/dastblog/archive/2007/01/02/102516.aspx</link>
            <description>&lt;p&gt;
The steps to connect to an WEP encrypted access point using NDISUIO are:
&lt;ul&gt;
  &lt;li&gt;Disassociate from the current service set (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799389.aspx"&gt;OID_802_11_DISASSOCIATE&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Set network mode to &lt;b&gt;Ndis802_11Infrastructure&lt;/b&gt; (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799395.aspx"&gt;OID_802_11_INFRASTRUCTURE_MODE&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Set privacy filter mode to &lt;b&gt;Ndis802_11PrivFilterAcceptAll&lt;/b&gt; (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799387.aspx"&gt;OID_802_11_PRIVACY_FILTER&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Set the Wired Equivalent Privacy (WEP) keys (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799380.aspx"&gt;OID_802_11_ADD_WEP&lt;/a&gt;).
  &lt;li&gt;Set authentication mode to &lt;b&gt;Ndis802_11AuthModeOpen&lt;/b&gt;, &lt;b&gt;Ndis802_11AuthModeShared&lt;/b&gt; or &lt;b&gt;Ndis802_11AuthModeAutoSwitch&lt;/b&gt; (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799406.aspx"&gt;OID_802_11_AUTHENTICATION_MODE&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Set encryption mode to &lt;b&gt;Ndis802_11Encryption1Enabled&lt;/b&gt; (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799412.aspx"&gt;OID_802_11_ENCRYPTION_STATUS&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Set the service set identifier (SSID) to associate with (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799388.aspx"&gt;OID_802_11_SSID&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Optional:&lt;/b&gt; If you want to connect to a specific access point, set the media access control (MAC) address of the access point (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799396.aspx"&gt;OID_802_11_BSSID&lt;/a&gt;).
  &lt;li&gt;Wait for the &lt;b&gt;NDISUIO_NOTIFICATION_MEDIA_CONNECT&lt;/b&gt; event (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms898830.aspx"&gt;IOCTL_NDISUIO_REQUEST_NOTIFICATION&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
If &amp;quot;Using DHCP&amp;quot; is chosen for the wireless network adapter you have also to renew the IP address.
&lt;/p&gt;

&lt;p&gt;
I have written a console application that will show how to connect to an WEP encrypted access point using NDISUIO and a small console application to renew the IP address:
&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://homepage.uibk.ac.at/~csaf3425/wepwirelessnet.zip"&gt;wepwirelessnet.zip&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://homepage.uibk.ac.at/~csaf3425/dhcp.zip"&gt;dhcp.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/5989/o_wepwirelessnet.gif"&gt;
&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/5989/o_wifiadapterinfo.gif"&gt;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=102516"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=102516" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dastblog/aggbug/102516.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Daniel Strigl</dc:creator>
            <guid>http://geekswithblogs.net/dastblog/archive/2007/01/02/102516.aspx</guid>
            <pubDate>Tue, 02 Jan 2007 21:23:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/dastblog/archive/2007/01/02/102516.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dastblog/comments/commentRss/102516.aspx</wfw:commentRss>
        </item>
        <item>
            <title>How to connect to an open access point using NDISUIO?</title>
            <category>Bakkalaureatsarbeit</category>
            <category>Programmieren</category>
            <link>http://geekswithblogs.net/dastblog/archive/2006/12/23/101954.aspx</link>
            <description>&lt;p&gt;
The steps to connect to an open access point without any encryption using NDISUIO are (see also &lt;a href="http://msdn2.microsoft.com/en-us/library/aa504146.aspx"&gt;802.11 Network Association&lt;/a&gt;):
&lt;ul&gt;
  &lt;li&gt;Disassociate from the current service set (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799389.aspx"&gt;OID_802_11_DISASSOCIATE&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Set network mode to &lt;b&gt;Ndis802_11Infrastructure&lt;/b&gt; (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799395.aspx"&gt;OID_802_11_INFRASTRUCTURE_MODE&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Set privacy filter mode to &lt;b&gt;Ndis802_11PrivFilterAcceptAll&lt;/b&gt; (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799387.aspx"&gt;OID_802_11_PRIVACY_FILTER&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Set authentication mode to &lt;b&gt;Ndis802_11AuthModeOpen&lt;/b&gt; (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799406.aspx"&gt;OID_802_11_AUTHENTICATION_MODE&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Set encryption mode to &lt;b&gt;Ndis802_11EncryptionDisabled&lt;/b&gt; (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799412.aspx"&gt;OID_802_11_ENCRYPTION_STATUS&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Set the service set identifier (SSID) to associate with (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799388.aspx"&gt;OID_802_11_SSID&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Optional:&lt;/b&gt; If you want to connect to a specific access point, set the media access control (MAC) address of the access point (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799396.aspx"&gt;OID_802_11_BSSID&lt;/a&gt;).
  &lt;li&gt;Wait for the &lt;b&gt;NDISUIO_NOTIFICATION_MEDIA_CONNECT&lt;/b&gt; event (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms898830.aspx"&gt;IOCTL_NDISUIO_REQUEST_NOTIFICATION&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
If &amp;quot;Using DHCP&amp;quot; is chosen for the wireless network adapter you have also to renew the IP address.
&lt;/p&gt;

&lt;p&gt;
I have written a console application that will show how to connect to an open access point using NDISUIO and a small console application to renew the IP address:
&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://homepage.uibk.ac.at/~csaf3425/openwirelessnet.zip"&gt;openwirelessnet.zip&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://homepage.uibk.ac.at/~csaf3425/dhcp.zip"&gt;dhcp.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/5966/o_openwirelessnet.gif"&gt;
&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/5966/o_wifiadapterinfo.gif"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=101954"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=101954" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dastblog/aggbug/101954.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Daniel Strigl</dc:creator>
            <guid>http://geekswithblogs.net/dastblog/archive/2006/12/23/101954.aspx</guid>
            <pubDate>Sat, 23 Dec 2006 21:40:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/dastblog/archive/2006/12/23/101954.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dastblog/comments/commentRss/101954.aspx</wfw:commentRss>
        </item>
        <item>
            <title>How to get supported authentication and encryption capabilities of an wireless adapter?</title>
            <category>Bakkalaureatsarbeit</category>
            <category>Programmieren</category>
            <link>http://geekswithblogs.net/dastblog/archive/2006/12/26/102080.aspx</link>
            <description>&lt;p&gt;
The following sample application, written in C++, will show how to do it:
&lt;/p&gt;

&lt;textarea language="cpp" name="code2006122601"&gt;
// capability.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include &lt;windows.h&gt;
#include &lt;commctrl.h&gt;
#include &lt;ntddndis.h&gt;
#include &lt;nuiouser.h&gt;
#include &lt;winioctl.h&gt;

#define OID_802_11_CAPABILITY 0x0d010122

typedef enum 
{
    Ndis802_11AuthModeWPA2 = Ndis802_11AuthModeWPANone + 1,
    Ndis802_11AuthModeWPA2PSK,
};

typedef struct _NDIS_802_11_AUTHENTICATION_ENCRYPTION 
{
    NDIS_802_11_AUTHENTICATION_MODE AuthModeSupported;
    NDIS_802_11_ENCRYPTION_STATUS EncryptStatusSupported;
} NDIS_802_11_AUTHENTICATION_ENCRYPTION, 
 *PNDIS_802_11_AUTHENTICATION_ENCRYPTION;

typedef struct _NDIS_802_11_CAPABILITY 
{
    ULONG Length;
    ULONG Version;
    ULONG NoOfPMKIDs;
    ULONG NoOfAuthEncryptPairSupported;
    NDIS_802_11_AUTHENTICATION_ENCRYPTION
        AuthenticationEncryptionSupported[1];
} NDIS_802_11_CAPABILITY, *PNDIS_802_11_CAPABILITY;

int _tmain(int argc, _TCHAR* argv[])
{
    if (argc &lt; 2)
    {
        printf("Usage: capability &lt;adapter name&gt;\n");
        printf("       &lt;adapter name&gt; name of the wireless adapter\n");
        return -1;
    }

    LPCTSTR pszAdapter = argv[1];

    HANDLE hDevice = CreateFile(
        NDISUIO_DEVICE_NAME, GENERIC_READ, 
        FILE_SHARE_READ | FILE_SHARE_WRITE, 
        NULL, OPEN_EXISTING, 
        FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
        NULL);

    if (hDevice == INVALID_HANDLE_VALUE)
    {
        DWORD dwError = GetLastError();

        printf("Function \"CreateFile\" failed (0x%08x).\n", dwError);
        return -2;
    }

    DWORD dwBytesReturned = 0;

    BYTE buf[512];
    PNDISUIO_QUERY_OID pNDISUIOQueryOid = (PNDISUIO_QUERY_OID) buf;
    pNDISUIOQueryOid-&gt;ptcDeviceName = (PTCHAR) pszAdapter;
    pNDISUIOQueryOid-&gt;Oid = OID_802_11_CAPABILITY;

    if (!DeviceIoControl(
        hDevice, IOCTL_NDISUIO_QUERY_OID_VALUE, 
        pNDISUIOQueryOid, sizeof(buf), 
        pNDISUIOQueryOid, sizeof(buf), 
        &amp;dwBytesReturned, NULL))
    {
        DWORD dwError = GetLastError();

        CloseHandle(hDevice);
        printf("Function \"DeviceIoControl\" (OID_802_11_CAPABILITY) failed (0x%08x).\n", 
            dwError);
        return -3;
    }

    PNDIS_802_11_CAPABILITY pCap = (PNDIS_802_11_CAPABILITY) pNDISUIOQueryOid-&gt;Data;

    if (pCap-&gt;Version != 2) 
    {
        CloseHandle(hDevice);
        printf("Unsupported OID_802_11_CAPABILITY data (ver %d).\n", pCap-&gt;Version);
        return -4;
    }

    for (ULONG i = 0; i &lt; pCap-&gt;NoOfAuthEncryptPairSupported; ++i)
    {
        NDIS_802_11_AUTHENTICATION_MODE authMode = 
            pCap-&gt;AuthenticationEncryptionSupported[i].AuthModeSupported;
        NDIS_802_11_ENCRYPTION_STATUS encStat = 
            pCap-&gt;AuthenticationEncryptionSupported[i].EncryptStatusSupported;

        if (authMode == Ndis802_11AuthModeOpen &amp;&amp; 
            encStat == Ndis802_11EncryptionDisabled)
        {
            printf("Open System: none\n");
        }
        else if (authMode == Ndis802_11AuthModeOpen &amp;&amp; 
                 encStat == Ndis802_11Encryption1Enabled)
        {
            printf("Open System: WEP\n");
        }
        else if (authMode == Ndis802_11AuthModeShared &amp;&amp; 
                 encStat == Ndis802_11EncryptionDisabled)
        {
            printf("Shared Key: none\n");
        }
        else if (authMode == Ndis802_11AuthModeShared &amp;&amp; 
                 encStat == Ndis802_11Encryption1Enabled)
        {
            printf("Shared Key: WEP\n");
        }
        else if (authMode == Ndis802_11AuthModeWPA &amp;&amp; 
                 encStat == Ndis802_11Encryption2Enabled)
        {
            printf("WPA: TKIP\n");
        }
        else if (authMode == Ndis802_11AuthModeWPA &amp;&amp; 
                 encStat == Ndis802_11Encryption3Enabled)
        {
            printf("WPA: AES\n");
        }
        else if (authMode == Ndis802_11AuthModeWPAPSK &amp;&amp; 
                 encStat == Ndis802_11Encryption2Enabled)
        {
            printf("WPA-PSK: TKIP\n");
        }
        else if (authMode == Ndis802_11AuthModeWPAPSK &amp;&amp; 
                 encStat == Ndis802_11Encryption3Enabled)
        {
            printf("WPA-PSK: AES\n");
        }
        else if (authMode == Ndis802_11AuthModeWPANone &amp;&amp; 
                 encStat == Ndis802_11EncryptionDisabled)
        {
            printf("WPA-None: none\n");
        }
        else if (authMode == Ndis802_11AuthModeWPANone &amp;&amp; 
                 encStat == Ndis802_11Encryption2Enabled)
        {
            printf("WPA-None: TKIP\n");
        }
        else if (authMode == Ndis802_11AuthModeWPANone &amp;&amp; 
                 encStat == Ndis802_11Encryption3Enabled)
        {
            printf("WPA-None: AES\n");
        }
        else if (authMode == Ndis802_11AuthModeWPA2 &amp;&amp; 
                 encStat == Ndis802_11Encryption2Enabled)
        {
            printf("WPA2: TKIP\n");
        }
        else if (authMode == Ndis802_11AuthModeWPA2 &amp;&amp; 
                 encStat == Ndis802_11Encryption3Enabled)
        {
            printf("WPA2: AES\n");
        }
        else if (authMode == Ndis802_11AuthModeWPA2PSK &amp;&amp; 
                 encStat == Ndis802_11Encryption2Enabled)
        {
            printf("WPA-PSK2: TKIP\n");
        }
        else if (authMode == Ndis802_11AuthModeWPA2PSK &amp;&amp; 
                 encStat == Ndis802_11Encryption3Enabled)
        {
            printf("WPA-PSK2: AES\n");
        }
        else
        {
            printf("&lt;unknown&gt; (auth = %d, encr = %d)\n", 
                authMode, encStat);
        }
    }

    CloseHandle(hDevice);

    return 0;
}
&lt;/textarea&gt;

&lt;p&gt;
The following image shows the supported authentication and encryption capabilities of our HP iPAQ hx2490b:
&lt;/p&gt;

&lt;p&gt;
&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/5978/o_capability.gif"&gt;
&lt;/p&gt;

&lt;SCRIPT language="javascript" src="http://homepage.uibk.ac.at/~csaf3425/scripts/SyntaxHighlighter/shCore.js"&gt;&lt;/SCRIPT&gt;
&lt;SCRIPT language="javascript" src="http://homepage.uibk.ac.at/~csaf3425/scripts/SyntaxHighlighter/shBrushCpp.js"&gt;&lt;/SCRIPT&gt;
&lt;SCRIPT language="javascript"&gt;
    dp.SyntaxHighlighter.HighlightAll('code2006122601', true, true);
&lt;/SCRIPT&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=102080"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=102080" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dastblog/aggbug/102080.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Daniel Strigl</dc:creator>
            <guid>http://geekswithblogs.net/dastblog/archive/2006/12/26/102080.aspx</guid>
            <pubDate>Wed, 27 Dec 2006 02:52:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/dastblog/archive/2006/12/26/102080.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dastblog/comments/commentRss/102080.aspx</wfw:commentRss>
        </item>
        <item>
            <title>How to list installed network adapters on a Pocket PC and detect if they are wireless?</title>
            <category>Bakkalaureatsarbeit</category>
            <category>Programmieren</category>
            <link>http://geekswithblogs.net/dastblog/archive/2006/11/24/98747.aspx</link>
            <description>&lt;p&gt;
I have written a little Win32 console application in C++ that will show how to do it, to run it you have 
to install the &lt;a title="" href="http://www.symbolictools.de/public/pocketconsole/index.htm"&gt;PocketConsole&lt;/a&gt; from 
&lt;a title="" href="http://www.symbolictools.de"&gt;SymbolicTools&lt;/a&gt;:
&lt;/p&gt;

&lt;textarea language="cpp" name="code2006112403"&gt;
// adapters.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include &lt;windows.h&gt;
#include &lt;commctrl.h&gt;
#include &lt;iphlpapi.h&gt;
#include &lt;time.h&gt;
#include &lt;ntddndis.h&gt;
#include &lt;nuiouser.h&gt;
#include &lt;winioctl.h&gt;
#include "strconv.h"

/*
 * Windows CE does not have a localtime() function, so create a substitute.
 * See SQLite WinCE Port [http://sourceforge.net/projects/sqlite-wince/].
 */
struct tm* localtime(const time_t* t)
{
    static struct tm y;
    FILETIME uTm, lTm;
    SYSTEMTIME pTm;
    __int64 t64;
    t64 = *t;
    t64 = (t64 + 11644473600) * 10000000;
    uTm.dwLowDateTime = (DWORD)(t64 &amp; 0xFFFFFFFF);
    uTm.dwHighDateTime= (DWORD)(t64 &gt;&gt; 32);
    FileTimeToLocalFileTime(&amp;uTm, &amp;lTm);
    FileTimeToSystemTime(&amp;lTm, &amp;pTm);
    y.tm_year = pTm.wYear - 1900;
    y.tm_mon = pTm.wMonth - 1;
    y.tm_wday = pTm.wDayOfWeek;
    y.tm_mday = pTm.wDay;
    y.tm_hour = pTm.wHour;
    y.tm_min = pTm.wMinute;
    y.tm_sec = pTm.wSecond;
    return &amp;y;
}

BOOL IsWireless(LPCTSTR pszAdapter, LPBOOL pbIsWireless)
{
    HANDLE hDevice = CreateFile(
        NDISUIO_DEVICE_NAME, GENERIC_READ, 
        FILE_SHARE_READ | FILE_SHARE_WRITE, 
        NULL, OPEN_EXISTING, 
        FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
        NULL);

    if (hDevice == INVALID_HANDLE_VALUE)
    {
        DWORD dwError = GetLastError();

        printf("Function \"CreateFile\" failed (0x%08x).\n", dwError);
        return FALSE;
    }

    DWORD dwBytesReturned = 0;
    NDISUIO_QUERY_OID NDISUIOQueryOid;
    NDISUIOQueryOid.ptcDeviceName = (PTCHAR) pszAdapter;
    NDISUIOQueryOid.Oid = OID_802_11_WEP_STATUS;

    *pbIsWireless = DeviceIoControl(
        hDevice, IOCTL_NDISUIO_QUERY_OID_VALUE, 
        &amp;NDISUIOQueryOid, sizeof(NDISUIOQueryOid), 
        &amp;NDISUIOQueryOid, sizeof(NDISUIOQueryOid), 
        &amp;dwBytesReturned, NULL);

    CloseHandle(hDevice);

    return TRUE;
}

int _tmain(int argc, _TCHAR* argv[])
{
    DWORD dwRetVal;
    ULONG ulOutBufLen = 0;

    if ((dwRetVal = GetAdaptersInfo(NULL, &amp;ulOutBufLen)) != ERROR_BUFFER_OVERFLOW)
    {
        if (dwRetVal == ERROR_NO_DATA)
            printf("No adapter information exists for the local computer.\n");
        else
            printf("Function \"GetAdaptersInfo\" failed (0x%08x).\n", dwRetVal);

        return -1;
    }

    IP_ADAPTER_INFO* pAdapterInfo = (IP_ADAPTER_INFO*) malloc(ulOutBufLen);

    if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &amp;ulOutBufLen)) != ERROR_SUCCESS)
    {
        free(pAdapterInfo);

        if (dwRetVal == ERROR_NO_DATA)
            printf("No adapter information exists for the local computer.\n");
        else
            printf("Function \"GetAdaptersInfo\" failed (0x%08x).\n", dwRetVal);

        return -2;
    }

    while (pAdapterInfo != NULL)
    {
        printf("Adapter Name    : %s\n", pAdapterInfo-&gt;AdapterName);
        printf("Description     : %s\n", pAdapterInfo-&gt;Description);
        printf("MAC Address     : %02X-%02X-%02X-%02X-%02X-%02X\n",
            pAdapterInfo-&gt;Address[0], pAdapterInfo-&gt;Address[1],
            pAdapterInfo-&gt;Address[2], pAdapterInfo-&gt;Address[3],
            pAdapterInfo-&gt;Address[4], pAdapterInfo-&gt;Address[5]);
        printf("IP Address      : %s\n", 
            pAdapterInfo-&gt;IpAddressList.IpAddress.String);
        printf("Subnet Mask     : %s\n", 
            pAdapterInfo-&gt;IpAddressList.IpMask.String);
        printf("Gateway         : %s\n", 
            pAdapterInfo-&gt;GatewayList.IpAddress.String);

        BOOL bIsWireless;
        printf("Is Wireless     : %s\n",
            IsWireless(CAtoT(pAdapterInfo-&gt;AdapterName), &amp;bIsWireless) ? 
            bIsWireless ? "Yes" : "No" : "&lt;unknown&gt;");

        if (pAdapterInfo-&gt;DhcpEnabled) 
        {
            printf("DHCP Enabled    : Yes\n");
            printf("DHCP Server     : %s\n", 
                pAdapterInfo-&gt;DhcpServer.IpAddress.String);

            struct tm* t = localtime(&amp;(pAdapterInfo-&gt;LeaseObtained));
            printf("Lease Obtained  : %02d.%02d.%04d %02d:%02d:%02d\n", 
                t-&gt;tm_mday, t-&gt;tm_mon + 1, t-&gt;tm_year + 1900,
                t-&gt;tm_hour, t-&gt;tm_min, t-&gt;tm_sec);

            t = localtime(&amp;(pAdapterInfo-&gt;LeaseExpires));
            printf("Lease Expires   : %02d.%02d.%04d %02d:%02d:%02d\n", 
                t-&gt;tm_mday, t-&gt;tm_mon + 1, t-&gt;tm_year + 1900,
                t-&gt;tm_hour, t-&gt;tm_min, t-&gt;tm_sec);
        }
        else
        {
            printf("DHCP Enabled    : No\n");
        }
    
        if (pAdapterInfo-&gt;HaveWins) 
        {
            printf("Have WINS       : Yes\n");
            printf("Pri. WINS Server: %s\n", 
                pAdapterInfo-&gt;PrimaryWinsServer.IpAddress.String);
            printf("Sec. WINS Server: %s\n", 
                pAdapterInfo-&gt;SecondaryWinsServer.IpAddress.String);
        }
        else
        {
            printf("Have WINS       : No\n");
        }

        if (pAdapterInfo-&gt;Next != NULL)
            printf("\n");

        pAdapterInfo = pAdapterInfo-&gt;Next;
    }

    free(pAdapterInfo);

    return 0;
}
&lt;/textarea&gt;

&lt;p&gt;
The following image shows the output of the application running on our HP iPAQ hx2490b:
&lt;/p&gt;

&lt;p&gt;
&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/5808/o_adapters.gif"&gt;
&lt;/p&gt;

&lt;SCRIPT language="javascript" src="http://homepage.uibk.ac.at/~csaf3425/scripts/SyntaxHighlighter/shCore.js"&gt;&lt;/SCRIPT&gt;
&lt;SCRIPT language="javascript" src="http://homepage.uibk.ac.at/~csaf3425/scripts/SyntaxHighlighter/shBrushCpp.js"&gt;&lt;/SCRIPT&gt;
&lt;SCRIPT language="javascript"&gt;
    dp.SyntaxHighlighter.HighlightAll('code2006112403', true, true);
&lt;/SCRIPT&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=98747"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=98747" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dastblog/aggbug/98747.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Daniel Strigl</dc:creator>
            <guid>http://geekswithblogs.net/dastblog/archive/2006/11/24/98747.aspx</guid>
            <pubDate>Fri, 24 Nov 2006 23:02:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/dastblog/archive/2006/11/24/98747.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dastblog/comments/commentRss/98747.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>