本文主要记录关于网卡驱动从NDIS 5.1移植到6.0过程的错误信以及解决方法息总结。(纯属个人笔记)
-
To run in the NDIS 6.0 environment, NDIS 5.x miniport drivers must be modified as follows: Build Environment -->Replace the preprocessor definition NDIS51_MINIPORT_DRIVER with NDIS60_MINIPORT_DRIVER. 主要修改source文件中的两个编译条件 C_DEFINES=$(C_DEFINES) -DNDIS51_MINIPORT=1 和 C_DEFINES=$(C_DEFINES) -DNDIS51=1 修改成: C_DEFINES=$(C_DEFINES) -DNDIS60_MINIPORT=1 和 C_DEFINES=$(C_DEFINES) -DNDIS60=1
GUID结构如下:
typedef struct _GUID
{
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} GUID;
GUID就是一个128位的16进制整数,GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。参考
关于GUID. 如果使用GetAdatperAddress()方法读取出NET_IF_NETWORK_GUID.
char szBuf[64];
sprintf_s(szBuf, 64, "{%08x-%04x-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X}",
pCurrAddresses->NetworkGuid->Data1, pCurrAddresses->NetworkGuid->Data2, pCurrAddresses->NetworkGuid->Data3,
pCurrAddresses->NetworkGuid->Data4[0], pCurrAddresses->NetworkGuid->Data4[1],
pCurrAddresses->NetworkGuid->Data4[2], pCurrAddresses->NetworkGuid->Data4[3],
pCurrAddresses->NetworkGuid->Data4[4], pCurrAddresses->NetworkGuid->Data4[5],
pCurrAddresses->NetworkGuid->Data4[6], pCurrAddresses->NetworkGuid->Data4[7]);
printf("%s", szBuf);
输出结果类似:
GUID: b568ee76-6d17-4a3a-a2f5-269c52fd6de
Wireless Hosted Network Sample :wireless Hosted Network sample that demonstrates the use of wireless Hosted Network functions is included with the Microsoft Windows Software Development Kit (SDK). Wireless Hosted Network sample can be compiled on the Windows SDK for Windows 7.
激活Window7 Virtual WiFi: 正如第三点所说的,如果你只有一张无限网卡,虚拟出来的网卡好像只能作为SoftAP用,不能当做真是网卡连接其他网络。如果你的网卡是Intel芯片的,下载最新驱动(
32位 ,
64位 )。安装之后就可以看到如图:多一张网络接口:Wireless Network connection2,设备名字:Microsoft Virtual Miniport Driver.
激活方法如下:

激活方法如下:
- Open an elevated command line with administrative privileges and type
netsh wlan set hostednetwork mode=allow ssid=Test key=password
replacing the name and password with your own preference. - Start the adapter by
netsh wlan start hostednetwork
- Share an existing connection to it by going to the “Properties” of a connection, selecting the “Sharing” tab and enabling ICS and choosing the corresponding Virtual WiFi adapter.
OverLapped I/O学习
CreateEvent函数 :函数功能描述:创建或打开一个命名的或无名的事件对象
HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, // 安全属性 BOOL bManualReset, // 复位方式 BOOL bInitialState, // 初始状态 LPCTSTR lpName // 对象名称 );参数:
lpEventAttributes:
[输入]一个指向 SECURITY_ATTRIBUTES结构的指针,确定返回的句柄是否可被子进程继承。如果lpEventAttributes是NULL,此句柄不能被继承。
Windows NT/2000:lpEventAttributes的结构中的成员为新的事件指定了一个安全符。如果lpEventAttributes是NULL,事件将获得一个默认的安全符。
bManualReset:
[输入]指定将事件对象创建成手动复原还是自动复原。如果是 TRUE,那么必须用ResetEvent函数来手工将事件的状态复原到无信号状态。如果设置为FALSE,当事件被一个等待线程释放以后,系统将会自动将事件状态复原为无信号状态。
bInitialState:
[输入]指定事件对象的初始状态。如果为TRUE,初始状态为有信号状态;否则为无信号状态。
lpName:
[输入]指定事件的对象的名称,是一个以0结束的字符串指针。名称的字符格式限定在MAX_PATH之内。名字是对大小写敏感的。 示例代码:
// 创建一个有名的,不能被继承的,手动复原,初始状态是无信号状态的事件对象
Handle h = CreateEvent(NULL,TRUE,FALSE,“MyEvent”); DeviceIoControl函数,这里介绍了关于OVERLAPPED的资料 线程中CreateEvent和SetEvent及WaitForSingleObject的用法 UNICODE_STRING,在KdPrint中打印方式:
KdPrint(("%ws",PunicodeBuf->Buffer));
或者
KdPrint(("%S",PunicodeBuf->Buffer))
以及
UNICODE_STRING uniString; KdPrint(("%wZ\n",&uniString));
Cloned NET_BUFFER_LIST Structures:

http://msdn.microsoft.com/en-us/library/ff544929.aspx, Relationships Between NET_BUFFER_LIST Generations Derived NET_BUFFER_LIST Structures 查看wdk build 参数设置: build /? 就可以在dos窗口查看