哪有得到硬盘序列号/网卡MAC/CPU序列号的VC++源码?该怎么解决

哪有得到硬盘序列号/网卡MAC/CPU序列号的VC++源码?
我在网上找了半天,也没找到一个合适的,要么是封装到的DLL或控件要么要钱?
得到硬盘号要得到的是物理号不在盘符信息序列号的

------解决方案--------------------
我有网卡mac的:
#include <winsock2.h>
#include <windows.h>
#include "Iphlpapi.h "
#include "CWinSocket.h "
#pragma comment(lib, "Iphlpapi.lib ")
#pragma comment(lib, "WS2_32.lib ")


CWinSocket::CWinSocket(BYTE minorVer, BYTE majorVer)
{
WSADATA wsaData;
WORD socketVer = MAKEWORD(minorVer,majorVer);
if(::WSAStartup(socketVer,&wsaData) != 0)
{
return;
}
GetGlobalData();
}

BOOL CWinSocket::GetGlobalData()
{
PIP_ADAPTER_INFO pAdapterInfo;
ULONG len = sizeof(IP_ADAPTER_INFO);
pAdapterInfo = (PIP_ADAPTER_INFO)::GlobalAlloc(GPTR,sizeof(IP_ADAPTER_INFO));
//Get the memory needed
if(::GetAdaptersInfo(pAdapterInfo,&len) != ERROR_SUCCESS)
{
::GlobalFree(pAdapterInfo);
pAdapterInfo = (PIP_ADAPTER_INFO)::GlobalAlloc(GPTR,len);
}
//
if(::GetAdaptersInfo(pAdapterInfo,&len) == ERROR_SUCCESS)
{
if(pAdapterInfo != NULL)
{
memcpy(this-> FLocalMac,pAdapterInfo-> Address,6);
this-> FGateWayIP = ::inet_addr(pAdapterInfo-> GatewayList.IpAddress.String);
this-> FLocalIP = ::inet_addr(pAdapterInfo-> IpAddressList.IpAddress.String);
this-> FMask = ::inet_addr(pAdapterInfo-> IpAddressList.IpMask.String);
}
return TRUE;
}
else
{
return FALSE;
}
}
char* CWinSocket::GetLocalMac()
{
u_char* p = this-> FLocalMac;
char* mac = new char[30];
memset(mac,0,30);
wsprintfA((LPSTR)mac,(LPCSTR) "%02x-%02x-%02x-%02x-%02x-%02x ",p[0],p[1],p[2],p[3],p[4],p[5]);
return mac;
}
------解决方案--------------------
#ifndef _CWinSocket_H
#define _CWinSocket_H

#include <winsock2.h>
#include <windows.h>
#include <iostream>
#include "Iphlpapi.h "

class CWinSocket
{

protected:
u_char FLocalMac[6]; //local Mac Address
DWORD FGateWayIP; //Gateway IP address
DWORD FLocalIP; //local ip address
DWORD FMask; //子码掩码

public:
CWinSocket(BYTE minorVer = 2, BYTE majorVer = 2);
~CWinSocket(){ ::WSACleanup(); }
//
char* GetLocalIP();
char* GetMask();
char* GetGatewayIP();
char* GetLocalMac();

private:
BOOL GetGlobalData();

};

#endif

VC8编译通过