以下是一个邦定枚举适配器的代码,希望大家帮忙讲解一下。谢谢各位朋友了! #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;
}
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;
}
我也在看这本书.
同样是在这个函数出了错!告诉我Enume adapter failed
你的能正常运行吗?