阅读:2989回复:6
牛人注意: CreateFile 和 DeviceIoControl 操作无线网卡问题
我想通过 CreateFile 打开一个无线网卡,然后 通过DeviceIoControl 操作 获取她的MAC地址
CreateFile 是可以成功的,但是 DeviceIoControl 操作也成功,oidData1->Data 却总是没有返回结果(全0)。 请问,我错在哪里了? HANDLE DeviceHandle; char nnname[300]; int la; memset(nnname,0,sizeof(nnname)); //这里如果使用"\\\\.\\NPF_",DeviceIoControl 里使用 pBIOCQUERYOID 操作就会OK //但是我不想装 WINPCAP,一卸载 WINPCAP 这个操作也就不管用了 strcpy(nnname,"\\\\.\\Global\\"); strcat(nnname,adaptername);//这是从注册表里弄来的网卡名 DeviceHandle = CreateFile(nnname, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,INVALID_HANDLE_VALUE); PPACKET_OID_DATA oidData1; // Defined in Ntddpack.h unsigned int buffLen1; // OID memory allocation buffLen1 = sizeof(PACKET_OID_DATA) + 6 -1 ; //malloc(buffLen); oidData1 = (PPACKET_OID_DATA) GlobalAllocPtr(GMEM_MOVEABLE | GMEM_ZEROINIT, buffLen1); if (oidData1 == NULL) { CloseHandle(DeviceHandle); return false; } oidData1->Oid = OID_802_3_PERMANENT_ADDRESS oidData1->Length = 6; DWORD dwByteCount = 0; BOOL result; result = DeviceIoControl(DeviceHandle, IOCTL_NDIS_QUERY_GLOBAL_STATS, oidData1,, buffLen1. oidData1, buffLen1, &dwByteCount, NULL ); if (!Set) memcpy(data, oidData1->Data, 6); |
|
沙发#
发布于:2007-03-31 10:55
没人知道吗?
|
|
板凳#
发布于:2007-04-03 08:44
buffLen1 空间是否足够给出所要获取的信息
|
|
|
地板#
发布于:2007-04-10 10:15
就是获取 MAC 地址啊
buffLen1 = sizeof(PACKET_OID_DATA) + 6 -1 ; 长度当然够 |
|
地下室#
发布于:2007-04-10 10:18
诸位老大是否有 使用 CreateFile 和 DeviceIoControl 做 OID 操作的范例啊,贴一个来看看吧
|
|
5楼#
发布于:2007-04-15 22:21
如果你是直接打开网卡的话,in buffer直接给OID值的地址
|
|
6楼#
发布于:2007-04-28 17:44
INBUF 中 我送入的是 OID 的指针啊
|
|