heapalloc(C++中用哪个函数可以获得当前网卡的物理地址)

:暂无数据 2026-10-12 10:00:03 :0

heapalloc(C++中用哪个函数可以获得当前网卡的物理地址)

大家好,heapalloc相信很多的网友都不是很明白,包括C++中用哪个函数可以获得当前网卡的物理地址也是一样,不过没有关系,接下来就来为大家分享关于heapalloc和C++中用哪个函数可以获得当前网卡的物理地址的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

本文目录

C++中用哪个函数可以获得当前网卡的物理地址

//如果是Windows
//The GetAdaptersAddresses function retrieves the addresses
//associated with the adapters on the local computer.
ULONG WINAPI GetAdaptersAddresses(
  _In_    ULONG                 Family,
  _In_    ULONG                 Flags,
  _In_    PVOID                 Reserved,
  _Inout_ PIP_ADAPTER_ADDRESSES AdapterAddresses,
  _Inout_ PULONG                SizePointer
);
/*
Family [in]
The address family of the addresses to retrieve.这个参数必须是以下值之一.
AF_UNSPEC 返回开启IPv4和IPv6的适配器的IPv4和IPv6地址.
AF_INET 返回开启IPv4的适配器的IPv4地址.
AF_INET6 只返回开启IPv6的适配器的IPv6地址.
------------------------------------------------------------------------------
Flags [in]
需要得到的地址类型.可能值在头文件Iptypes.h中定义.注意到Iptypes.h自动包含在Iphlpapi.h里面,应该永远不要直接使用它.这个参数可以是以下值的组合.如果此参数是0,那么单播、任播、多播IP地址都将会返回.
------------------------------------------------------------------------------
Reserved [in]
这个参数现在未使用,但是是保留为了将来系统使用,在这个调用应该给予NULL.
------------------------------------------------------------------------------
AdapterAddresses [in, out]
一个指针指向缓冲区,函数成功返回时,用来保存IP_ADAPTER_ADDRESSES结构的链表.
------------------------------------------------------------------------------
SizePointer [in, out]
一个指针,指向“表明AdapterAddress指向的缓冲区大小的变量“.
--------------------------------------------------------------------------
返回值
如果函数成功,返回值为ERROR_SUCCESS (defined to the same value as NO_ERROR).
如果函数失败,返回值是以下错误值之一.
*/
//C++示例代码
//来源于MSDN
#include 《winsock2.h》
#include 《iphlpapi.h》
#include 《stdio.h》
#include 《stdlib.h》

// Link with Iphlpapi.lib
#pragma comment(lib, “IPHLPAPI.lib“)

#define WORKING_BUFFER_SIZE 15000
#define MAX_TRIES 3

#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))

/* Note: could also use malloc() and free() */

int __cdecl main(int argc, char **argv)
{

    /* Declare and initialize variables */

    DWORD dwSize = 0;
    DWORD dwRetVal = 0;

    unsigned int i = 0;

    // Set the flags to pass to GetAdaptersAddresses
    ULONG flags = GAA_FLAG_INCLUDE_PREFIX;

    // default to unspecified address family (both)
    ULONG family = AF_UNSPEC;

    LPVOID lpMsgBuf = NULL;

    PIP_ADAPTER_ADDRESSES pAddresses = NULL;
    ULONG outBufLen = 0;
    ULONG Iterations = 0;

    PIP_ADAPTER_ADDRESSES pCurrAddresses = NULL;
    PIP_ADAPTER_UNICAST_ADDRESS pUnicast = NULL;
    PIP_ADAPTER_ANYCAST_ADDRESS pAnycast = NULL;
    PIP_ADAPTER_MULTICAST_ADDRESS pMulticast = NULL;
    IP_ADAPTER_DNS_SERVER_ADDRESS *pDnServer = NULL;
    IP_ADAPTER_PREFIX *pPrefix = NULL;

    if (argc != 2) {
        printf(“ Usage: getadapteraddresses family\n“);
        printf(“        getadapteraddresses 4 (for IPv4)\n“);
        printf(“        getadapteraddresses 6 (for IPv6)\n“);
        printf(“        getadapteraddresses A (for both IPv4 and IPv6)\n“);
        exit(1);
    }

    if (atoi(argv) == 4)
        family = AF_INET;
    else if (atoi(argv) == 6)
        family = AF_INET6;

    printf(“Calling GetAdaptersAddresses function with family = “);
    if (family == AF_INET)
        printf(“AF_INET\n“);
    if (family == AF_INET6)
        printf(“AF_INET6\n“);
    if (family == AF_UNSPEC)
        printf(“AF_UNSPEC\n\n“);

    // Allocate a 15 KB buffer to start with.
    outBufLen = WORKING_BUFFER_SIZE;

    do {

        pAddresses = (IP_ADAPTER_ADDRESSES *) MALLOC(outBufLen);
        if (pAddresses == NULL) {
            printf
                (“Memory allocation failed for IP_ADAPTER_ADDRESSES struct\n“);
            exit(1);
        }

        dwRetVal =
            GetAdaptersAddresses(family, flags, NULL, pAddresses, &outBufLen);

        if (dwRetVal == ERROR_BUFFER_OVERFLOW) {
            FREE(pAddresses);
            pAddresses = NULL;
        } else {
            break;
        }

        Iterations++;

    } while ((dwRetVal == ERROR_BUFFER_OVERFLOW) && (Iterations 《 MAX_TRIES));

    if (dwRetVal == NO_ERROR) {
        // If successful, output some information from the data we received
        pCurrAddresses = pAddresses;
        while (pCurrAddresses) {
            printf(“\tLength of the IP_ADAPTER_ADDRESS struct: %ld\n“,
                   pCurrAddresses-》Length);
            printf(“\tIfIndex (IPv4 interface): %u\n“, pCurrAddresses-》IfIndex);
            printf(“\tAdapter name: %s\n“, pCurrAddresses-》AdapterName);

            pUnicast = pCurrAddresses-》FirstUnicastAddress;
            if (pUnicast != NULL) {
                for (i = 0; pUnicast != NULL; i++)
                    pUnicast = pUnicast-》Next;
                printf(“\tNumber of Unicast Addresses: %d\n“, i);
            } else
                printf(“\tNo Unicast Addresses\n“);

            pAnycast = pCurrAddresses-》FirstAnycastAddress;
            if (pAnycast) {
                for (i = 0; pAnycast != NULL; i++)
                    pAnycast = pAnycast-》Next;
                printf(“\tNumber of Anycast Addresses: %d\n“, i);
            } else
                printf(“\tNo Anycast Addresses\n“);

            pMulticast = pCurrAddresses-》FirstMulticastAddress;
            if (pMulticast) {
                for (i = 0; pMulticast != NULL; i++)
                    pMulticast = pMulticast-》Next;
                printf(“\tNumber of Multicast Addresses: %d\n“, i);
            } else
                printf(“\tNo Multicast Addresses\n“);

            pDnServer = pCurrAddresses-》FirstDnsServerAddress;
            if (pDnServer) {
                for (i = 0; pDnServer != NULL; i++)
                    pDnServer = pDnServer-》Next;
                printf(“\tNumber of DNS Server Addresses: %d\n“, i);
            } else
                printf(“\tNo DNS Server Addresses\n“);

            printf(“\tDNS Suffix: %wS\n“, pCurrAddresses-》DnsSuffix);
            printf(“\tDescription: %wS\n“, pCurrAddresses-》Description);
            printf(“\tFriendly name: %wS\n“, pCurrAddresses-》FriendlyName);

            if (pCurrAddresses-》PhysicalAddressLength != 0) {
                printf(“\tPhysical address: “);
                for (i = 0; i 《 (int) pCurrAddresses-》PhysicalAddressLength;
                     i++) {
                    if (i == (pCurrAddresses-》PhysicalAddressLength - 1))
                        printf(“%.2X\n“,
                               (int) pCurrAddresses-》PhysicalAddress[i]);
                    else
                        printf(“%.2X-“,
                               (int) pCurrAddresses-》PhysicalAddress[i]);
                }
            }
            printf(“\tFlags: %ld\n“, pCurrAddresses-》Flags);
            printf(“\tMtu: %lu\n“, pCurrAddresses-》Mtu);
            printf(“\tIfType: %ld\n“, pCurrAddresses-》IfType);
            printf(“\tOperStatus: %ld\n“, pCurrAddresses-》OperStatus);
            printf(“\tIpv6IfIndex (IPv6 interface): %u\n“,
                   pCurrAddresses-》Ipv6IfIndex);
            printf(“\tZoneIndices (hex): “);
            for (i = 0; i 《 16; i++)
                printf(“%lx “, pCurrAddresses-》ZoneIndices[i]);
            printf(“\n“);

            printf(“\tTransmit link speed: %I64u\n“, pCurrAddresses-》TransmitLinkSpeed);
            printf(“\tReceive link speed: %I64u\n“, pCurrAddresses-》ReceiveLinkSpeed);

            pPrefix = pCurrAddresses-》FirstPrefix;
            if (pPrefix) {
                for (i = 0; pPrefix != NULL; i++)
                    pPrefix = pPrefix-》Next;
                printf(“\tNumber of IP Adapter Prefix entries: %d\n“, i);
            } else
                printf(“\tNumber of IP Adapter Prefix entries: 0\n“);

            printf(“\n“);

            pCurrAddresses = pCurrAddresses-》Next;
        }
    } else {
        printf(“Call to GetAdaptersAddresses failed with error: %d\n“,
               dwRetVal);
        if (dwRetVal == ERROR_NO_DATA)
            printf(“\tNo addresses were found for the requested parameters\n“);
        else {

            if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
                    FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, 
                    NULL, dwRetVal, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),   
                    // Default language
                    (LPTSTR) & lpMsgBuf, 0, NULL)) {
                printf(“\tError: %s“, lpMsgBuf);
                LocalFree(lpMsgBuf);
                if (pAddresses)
                    FREE(pAddresses);
                exit(1);
            }
        }
    }

    if (pAddresses) {
        FREE(pAddresses);
    }

    return 0;
}

HeapAlloc啥意思啊

HeapAlloc是内存分配函数,详细权威的文档参考MSDN。

//分配了一块内存,大小是sizeof(Student) + 1024,并且内存的地址保存在变量stu里
HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,sizeof(Student) + 1024);

这块内存地址被强制转化为类型(Student*),编译器在得到这个信息之后,会使用(Student)类型来解析你的代码对这块内存的访问。目前来看,这是一块放满了0的内存,里面没有任何对象和数据,就是一堆0。为什么,因为你使用了HEAP_ZERO_MEMORY标志。

更多说明,建议参考MSDN。

如果你还想了解更多这方面的信息,记得收藏关注本站。

heapalloc(C++中用哪个函数可以获得当前网卡的物理地址)

本文编辑:admin

本文相关文章:


trigger_error(什么是错我的自定义PHP函数)

trigger_error(什么是错我的自定义PHP函数)

大家好,如果您还对trigger_error不太了解,没有关系,今天就由本站为大家分享trigger_error的知识,包括什么是错我的自定义PHP函数的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年9月18日 08:10

函数信号发生器设计(函数信号发生器怎么设计)

函数信号发生器设计(函数信号发生器怎么设计)

大家好,函数信号发生器设计相信很多的网友都不是很明白,包括函数信号发生器怎么设计也是一样,不过没有关系,接下来就来为大家分享关于函数信号发生器设计和函数信号发生器怎么设计的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

2026年9月12日 19:10

sql round函数(SQL SERVER中的ROUND()函数有三个参数,请问这三个参数分别代表什么)

sql round函数(SQL SERVER中的ROUND()函数有三个参数,请问这三个参数分别代表什么)

各位老铁们好,相信很多人对sql round函数都不是特别的了解,因此呢,今天就来为大家分享下关于sql round函数以及SQL SERVER中的ROUND()函数有三个参数,请问这三个参数分别代表什么的问题知识,还望可以帮助大家,解决大

2026年9月12日 02:30

gamma函数(伽马函数什么)

gamma函数(伽马函数什么)

本篇文章给大家谈谈gamma函数,以及伽马函数什么对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年8月27日 06:00

winexec(使用WINEXEC函数要注意什么)

winexec(使用WINEXEC函数要注意什么)

大家好,关于winexec很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于使用WINEXEC函数要注意什么的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

2026年7月21日 02:00

vlookup函数实例(VLOOKUP函数的使用举例)

vlookup函数实例(VLOOKUP函数的使用举例)

大家好,如果您还对vlookup函数实例不太了解,没有关系,今天就由本站为大家分享vlookup函数实例的知识,包括VLOOKUP函数的使用举例的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年7月16日 18:30

C语言中的POW函数怎么使用?win10自动蓝屏并显示internal_power_error

C语言中的POW函数怎么使用?win10自动蓝屏并显示internal_power_error

大家好,如果您还对pow不太了解,没有关系,今天就由本站为大家分享pow的知识,包括C语言中的POW函数怎么使用的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年6月22日 09:20

createwindow(CreateWindow函数的第三个参数包含LBS_NOTIFY有什么作用LBS_SORT有什么作用LBS_MULTIPLESEL有什么作用)

createwindow(CreateWindow函数的第三个参数包含LBS_NOTIFY有什么作用LBS_SORT有什么作用LBS_MULTIPLESEL有什么作用)

今天给各位分享CreateWindow函数的第三个参数包含LBS_NOTIFY有什么作用LBS_SORT有什么作用LBS_MULTIPLESEL有什么作用的知识,其中也会对CreateWindow函数的第三个参数包含LBS_NOTIFY有什

2026年6月5日 09:20

更多文章:


特殊字符是指什么?正则表达式中一些特殊字符的用法

特殊字符是指什么?正则表达式中一些特殊字符的用法

大家好,特殊字符相信很多的网友都不是很明白,包括特殊字符是指什么也是一样,不过没有关系,接下来就来为大家分享关于特殊字符和特殊字符是指什么的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

2026年10月15日 08:10

特殊符号网名大全花样符号(特殊符号昵称有哪些)

特殊符号网名大全花样符号(特殊符号昵称有哪些)

本篇文章给大家谈谈特殊符号网名大全花样符号,以及特殊符号昵称有哪些对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年10月15日 07:30

prison break(越狱(prison break)到底是在讲个什么)

prison break(越狱(prison break)到底是在讲个什么)

各位老铁们好,相信很多人对prison break都不是特别的了解,因此呢,今天就来为大家分享下关于prison break以及越狱(prison break)到底是在讲个什么的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看

2026年10月15日 06:50

c程序设计第五版教学视频(求C程序设计(第五版)谭浩强教材源代码、视频课件等电子版资料!谢谢大家!)

c程序设计第五版教学视频(求C程序设计(第五版)谭浩强教材源代码、视频课件等电子版资料!谢谢大家!)

各位老铁们,大家好,今天由我来为大家分享c程序设计第五版教学视频,以及求C程序设计(第五版)谭浩强教材源代码、视频课件等电子版资料!谢谢大家!的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动

2026年10月15日 06:40

电脑教程入门(电脑初学入门)

电脑教程入门(电脑初学入门)

本篇文章给大家谈谈电脑教程入门,以及电脑初学入门对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年10月15日 06:20

十六进制转二进制表(16进制转为2进制、8进制、10进制的公式)

十六进制转二进制表(16进制转为2进制、8进制、10进制的公式)

“十六进制转二进制表”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看十六进制转二进制表(16进制转为2进制、8进制、10进制的公式)!

2026年10月15日 06:10

programdata是什么文件(win7下ProgramData 文件夹是什么,里面的内容可以删吗)

programdata是什么文件(win7下ProgramData 文件夹是什么,里面的内容可以删吗)

本篇文章给大家谈谈programdata是什么文件,以及win7下ProgramData 文件夹是什么,里面的内容可以删吗对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题

2026年10月15日 04:50

502错误的网关(“502错误网关,服务器作为网关或代理,从上游服务器收到了无效的响应”怎么处理谁能帮我)

502错误的网关(“502错误网关,服务器作为网关或代理,从上游服务器收到了无效的响应”怎么处理谁能帮我)

大家好,今天小编来为大家解答以下的问题,关于502错误的网关,“502错误网关,服务器作为网关或代理,从上游服务器收到了无效的响应”怎么处理谁能帮我这个很多人还不知道,现在让我们一起来看看吧!

2026年10月15日 04:10

feed up(feed up是什么意思拜托了各位 谢谢)

feed up(feed up是什么意思拜托了各位 谢谢)

今天给各位分享feed up是什么意思拜托了各位 谢谢的知识,其中也会对feed up是什么意思拜托了各位 谢谢进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年10月15日 04:00

shell编程(什么是shell脚本编程)

shell编程(什么是shell脚本编程)

“shell编程”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看shell编程(什么是shell脚本编程)!

2026年10月15日 03:40

最近更新

热门文章

标签列表