在编译虚拟网卡驱动tap-win32时,在AdapterCreate函数中,从注册表中读取MAC地址时,NdisReadConfiguration总是返回NDIS_STATUS_FAILTURE。
可是前面读取其他的数据如MTU、MediaStatus时都是成功返回的。
程序如下:/* Read MTU setting from registry */
{
NDIS_STRING key = NDIS_STRING_CONST("MTU");
//NdisReadConfiguration返回NDIS_STATUS_SUCCESS;
NdisReadConfiguration (&status, &parm, configHandle,
&key, NdisParameterInteger);
if (status == NDIS_STATUS_SUCCESS)
{
if (parm->ParameterType == NdisParameterInteger)
{
int mtu = parm->ParameterData.IntegerData;
if (mtu < MINIMUM_MTU)
mtu = MINIMUM_MTU;
if (mtu > MAXIMUM_MTU)
mtu = MAXIMUM_MTU;
l_Adapter->m_MTU = mtu;
}
}
}
/* Read optional MAC setting from registry */
{
NDIS_STRING key = NDIS_STRING_CONST("MAC");
ANSI_STRING mac_string;
//NdisReadConfiguration返回NDIS_STATUS_FAILTURE;
//MSDN上的解释是找不到指定的键;
NdisReadConfiguration (&status, &parm, configHandle,
&key, NdisParameterString);
if (status == NDIS_STATUS_SUCCESS)
{
if (parm->ParameterType == NdisParameterString)
{
if (RtlUnicodeStringToAnsiString (&mac_string, &parm->ParameterData.StringData, TRUE) == STATUS_SUCCESS)
{
l_MacFromRegistry = ParseMAC (l_Adapter->m_MAC, mac_string.Buffer);
RtlFreeAnsiString (&mac_string);
}
}
}
}
INF文件中的相关部分是:
HKR, Ndi\params\MTU, ParamDesc, 0, "MTU"
HKR, Ndi\params\MTU, Type, 0, "int"
HKR, Ndi\params\MTU, Default, 0, "1500"
HKR, Ndi\params\MTU, Optional, 0, "0"
HKR, Ndi\params\MTU, Min, 0, "100"
HKR, Ndi\params\MTU, Max, 0, "1500"
HKR, Ndi\params\MTU, Step, 0, "1" HKR, Ndi\params\MAC, ParamDesc, 0, "MAC Address"
HKR, Ndi\params\MAC, Type, 0, "edit"
HKR, Ndi\params\MAC, Optional, 0, "1"
HKR, Ndi\params\MAC, Default, 0, ""在驱动安装结束后,可以看到MTU和MAC键都是同一级别的子键。
请大家帮我分析一下可能的原因,谢谢了。
可是前面读取其他的数据如MTU、MediaStatus时都是成功返回的。
程序如下:/* Read MTU setting from registry */
{
NDIS_STRING key = NDIS_STRING_CONST("MTU");
//NdisReadConfiguration返回NDIS_STATUS_SUCCESS;
NdisReadConfiguration (&status, &parm, configHandle,
&key, NdisParameterInteger);
if (status == NDIS_STATUS_SUCCESS)
{
if (parm->ParameterType == NdisParameterInteger)
{
int mtu = parm->ParameterData.IntegerData;
if (mtu < MINIMUM_MTU)
mtu = MINIMUM_MTU;
if (mtu > MAXIMUM_MTU)
mtu = MAXIMUM_MTU;
l_Adapter->m_MTU = mtu;
}
}
}
/* Read optional MAC setting from registry */
{
NDIS_STRING key = NDIS_STRING_CONST("MAC");
ANSI_STRING mac_string;
//NdisReadConfiguration返回NDIS_STATUS_FAILTURE;
//MSDN上的解释是找不到指定的键;
NdisReadConfiguration (&status, &parm, configHandle,
&key, NdisParameterString);
if (status == NDIS_STATUS_SUCCESS)
{
if (parm->ParameterType == NdisParameterString)
{
if (RtlUnicodeStringToAnsiString (&mac_string, &parm->ParameterData.StringData, TRUE) == STATUS_SUCCESS)
{
l_MacFromRegistry = ParseMAC (l_Adapter->m_MAC, mac_string.Buffer);
RtlFreeAnsiString (&mac_string);
}
}
}
}
INF文件中的相关部分是:
HKR, Ndi\params\MTU, ParamDesc, 0, "MTU"
HKR, Ndi\params\MTU, Type, 0, "int"
HKR, Ndi\params\MTU, Default, 0, "1500"
HKR, Ndi\params\MTU, Optional, 0, "0"
HKR, Ndi\params\MTU, Min, 0, "100"
HKR, Ndi\params\MTU, Max, 0, "1500"
HKR, Ndi\params\MTU, Step, 0, "1" HKR, Ndi\params\MAC, ParamDesc, 0, "MAC Address"
HKR, Ndi\params\MAC, Type, 0, "edit"
HKR, Ndi\params\MAC, Optional, 0, "1"
HKR, Ndi\params\MAC, Default, 0, ""在驱动安装结束后,可以看到MTU和MAC键都是同一级别的子键。
请大家帮我分析一下可能的原因,谢谢了。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货