herolib
驱动牛犊
驱动牛犊
  • 注册日期2005-03-21
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分531分
  • 威望86点
  • 贡献值0点
  • 好评度51点
  • 原创分0分
  • 专家分0分
阅读:2924回复:6

牛人注意: CreateFile 和 DeviceIoControl 操作无线网卡问题

楼主#
更多 发布于:2007-03-30 16:12
我想通过 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);
herolib
驱动牛犊
驱动牛犊
  • 注册日期2005-03-21
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分531分
  • 威望86点
  • 贡献值0点
  • 好评度51点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-03-31 10:55
没人知道吗?
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
板凳#
发布于:2007-04-03 08:44
buffLen1 空间是否足够给出所要获取的信息
走走看看开源好 Solaris vs Linux
herolib
驱动牛犊
驱动牛犊
  • 注册日期2005-03-21
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分531分
  • 威望86点
  • 贡献值0点
  • 好评度51点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-04-10 10:15
就是获取 MAC 地址啊

buffLen1 = sizeof(PACKET_OID_DATA) + 6 -1 ;

长度当然够
herolib
驱动牛犊
驱动牛犊
  • 注册日期2005-03-21
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分531分
  • 威望86点
  • 贡献值0点
  • 好评度51点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-04-10 10:18
诸位老大是否有 使用  CreateFile 和 DeviceIoControl  做 OID 操作的范例啊,贴一个来看看吧
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2007-04-15 22:21
如果你是直接打开网卡的话,in buffer直接给OID值的地址
herolib
驱动牛犊
驱动牛犊
  • 注册日期2005-03-21
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分531分
  • 威望86点
  • 贡献值0点
  • 好评度51点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-04-28 17:44
INBUF 中 我送入的是 OID 的指针啊
游客

返回顶部