以下是一个邦定枚举适配器的代码,希望大家帮忙讲解一下。谢谢各位朋友了!    #define MAX_ADAPTERS 10
    class CPROTOAdapters
    {
        publilc : 
            BOOL EnumAdapters(HANDLE hControlDevice);
            int m_nAdapters;
            LPWSTR m_pwszAdapterName[MAX_ADAPTERS];
            LPWSTR m_pwszSymbolicLink[MAX_ADAPTERS];
        protected:
            char m_buffer[MAX_ADAPTERS*256];
    }
    BOOL CPROTOAdapters::EnumAdapters(HANDLE hControlDevice)
    {
        DWORD dwBufferLength=sizeof(m_buffer);
        BOOL bRet=::DeviceIoControl(hControlDevice,
                                    IOCTL_ENUM_ADAPTERS,
                                    NULL,
                                    0,
                                    m_buffer,
                                    dwBufferLength,
                                    &dwBufferLength,
                                    NULL);//问题一:此函数是做什么用的?作用是什么?各位朋友谁有关于此函数的讲解!
        if(!bRet)
        {
            return FALSE;
        }
        m_nAdapters=(ULONG)((ULONG*)m_buffer)[0];
        //下面从m_buffer中获取适配器名称和连接名称
         //指向设备名称!
         WCHAR* pwsz=(WCHAR*)((ULONG*)m_buffer+1);
        int i=0;
        m_pwszAdapterName[i]=pwsz;
        while(*(pwsz++)!=NULL)
        {
            while(*(pwsz++)!=NULL)
            {
                ;
            }//问题二:此处的循环起什么作用啊?为什么要加这样那个一个没有操作的循环啊?
              //pwsz指向“\DosDevices\Packet_{}”,加12是为了去掉“\DosDevices”
              m_pwszSymbolicLink[i]=pwsz+12;
            while(*(pwsz++)!=NULL)
            {
                ;
            }
            if(++i>=MAX_ADAPTERS)
                break;
            m_pwszAdapterName[i]=pwsz;
        }
        return TRUE;
    }