⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mac.h

📁 电子监控的网络编程实例
💻 H
字号:
/************************************************************************/
/* 取工控机硬件编号                                                                     */
/************************************************************************/

#include <nb30.h>
#pragma comment(lib, "netapi32.lib")

typedef struct _ASTAT_
{
	ADAPTER_STATUS adapt;
	NAME_BUFFER NameBuff[30];
}ASTAT,*PASTAT;

ASTAT Adapter;

BOOL getmac_one(int lana_num,LPBYTE mac)
{
	NCB ncb;
	UCHAR uRetCode;

	memset(&ncb, 0, sizeof(ncb));
	ncb.ncb_command = NCBRESET;
	ncb.ncb_lana_num = lana_num;

	uRetCode = Netbios( &ncb );
	if( uRetCode!=0)
	{
		return FALSE;
	}
	

	memset( &ncb, 0, sizeof(ncb) );
    ncb.ncb_command = NCBASTAT;
    ncb.ncb_lana_num = lana_num;     // 指定网卡号
	

	strcpy((char*)ncb.ncb_callname,"*          ");
	ncb.ncb_buffer = (unsigned char*)(&Adapter);
	ncb.ncb_length=sizeof(Adapter);

	uRetCode = Netbios(&ncb);

	if( uRetCode==0)
	{
		memcpy(mac,Adapter.adapt.adapter_address,6);
		return TRUE;
	//	*mac=Adapter.adapt.adapter_address[0];
	//	*(mac+1)=Adapter.
	}
	return FALSE;
}

BOOL GetMacAdd(CString &macStr)
{
	NCB ncb;
	UCHAR uRetCode;
	LANA_ENUM lana_enum;

	memset(&ncb,0,sizeof(&ncb));
	ncb.ncb_command=NCBENUM;

	BYTE address[6];

	ncb.ncb_buffer = (unsigned char *) &lana_enum;
	ncb.ncb_length = sizeof(lana_enum);
	macStr="";

	uRetCode = Netbios(&ncb);
	if(uRetCode == 0)
	{
		int a=lana_enum.length;
		for(int i=0;i<lana_enum.length;i++)
		{
			BOOL a=getmac_one(lana_enum.lana[i],address);
		/*	int i=0;
			while(!a && i<20)
			{
				a=getmac_one(lana_enum.lana[i],address);
				i++;
			}
			if(i>19)
			{
				AfxMessageBox("解密失败,请重新运行该程序");
				return FALSE;
			}*/
			
			CString str;
			if(a)
			{
				str.Format("%02X%02X%02X%02X%02X%02X",address[0],address[1],address[2],address[3],
					address[4],address[5]);
				if(macStr.GetLength()>0)
					macStr = macStr+","+str;
				else 
					macStr = str;
			}
			if(macStr.GetLength()>0)
				return TRUE;

			//if(str="00-05-B7-01-BB-68" || str=="00-0A-E4-01-B8-C4" || str=="" || str=="00-00-E2-8D-61-49" || str=="00-00-E2-A4-79-88" || str=="00-06-1B-CD-3F-E0" || str=="00-40-CA-BF-C0-F6" || str=="00-E0-18-EF-11-69" || str=="00-80-C8-8C-DB-6C" || str=="00-40-CA-C7-B3-62")
			//	return TRUE;
			
	//		macStr=str;
			/*else
			{
				AfxMessageBox("解密失败,非法使用本软件");
				return FALSE;
			}*/
		//	AfxMessageBox(str);
		}
	}
	else 
	{

		return FALSE;
	}
	return TRUE;
	
}

#include <windows.h>
#include <iostream.h>
#include <stdio.h>

#define DFP_GET_VERSION 0x00074080
#define DFP_SEND_DRIVE_COMMAND 0x0007c084
#define DFP_RECEIVE_DRIVE_DATA 0x0007c088

#pragma pack(1)
typedef struct _GETVERSIONOUTPARAMS {
    BYTE bVersion; // Binary driver version.
    BYTE bRevision; // Binary driver revision.
    BYTE bReserved; // Not used.
    BYTE bIDEDeviceMap; // Bit map of IDE devices.
    DWORD fCapabilities; // Bit mask of driver capabilities.
    DWORD dwReserved[4]; // For future use.
} GETVERSIONOUTPARAMS, *PGETVERSIONOUTPARAMS, *LPGETVERSIONOUTPARAMS;

typedef struct _IDEREGS {
    BYTE bFeaturesReg; // Used for specifying SMART "commands".
    BYTE bSectorCountReg; // IDE sector count register
    BYTE bSectorNumberReg; // IDE sector number register
    BYTE bCylLowReg; // IDE low order cylinder value
    BYTE bCylHighReg; // IDE high order cylinder value
    BYTE bDriveHeadReg; // IDE drive/head register
    BYTE bCommandReg; // Actual IDE command.
    BYTE bReserved; // reserved for future use. Must be zero.
} IDEREGS, *PIDEREGS, *LPIDEREGS;

typedef struct _SENDCMDINPARAMS {
    DWORD cBufferSize; // Buffer size in bytes
    IDEREGS irDriveRegs; // Structure with drive register values.
    BYTE bDriveNumber; // Physical drive number to send
    // command to (0,1,2,3).
    BYTE bReserved[3]; // Reserved for future expansion.
    DWORD dwReserved[4]; // For future use.
    //BYTE bBuffer[1]; // Input buffer.
} SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS;

typedef struct _DRIVERSTATUS {
    BYTE bDriverError; // Error code from driver,
    // or 0 if no error.
    BYTE bIDEStatus; // Contents of IDE Error register.
    // Only valid when bDriverError
    // is SMART_IDE_ERROR.
    BYTE bReserved[2]; // Reserved for future expansion.
    DWORD dwReserved[2]; // Reserved for future expansion.
} DRIVERSTATUS, *PDRIVERSTATUS, *LPDRIVERSTATUS;

typedef struct _SENDCMDOUTPARAMS {
    DWORD cBufferSize; // Size of bBuffer in bytes
    DRIVERSTATUS DriverStatus; // Driver status structure.
    BYTE bBuffer[512]; // Buffer of arbitrary length
    // in which to store the data read from the drive.
} SENDCMDOUTPARAMS, *PSENDCMDOUTPARAMS, *LPSENDCMDOUTPARAMS;

typedef struct _IDSECTOR {
    USHORT wGenConfig;
    USHORT wNumCyls;
    USHORT wReserved;
    USHORT wNumHeads;
    USHORT wBytesPerTrack;
    USHORT wBytesPerSector;
    USHORT wSectorsPerTrack;
    USHORT wVendorUnique[3];
    CHAR sSerialNumber[20];
    USHORT wBufferType;
    USHORT wBufferSize;
    USHORT wECCSize;
    CHAR sFirmwareRev[8];
    CHAR sModelNumber[40];
    USHORT wMoreVendorUnique;
    USHORT wDoubleWordIO;
    USHORT wCapabilities;
    USHORT wReserved1;
    USHORT wPIOTiming;
    USHORT wDMATiming;
    USHORT wBS;
    USHORT wNumCurrentCyls;
    USHORT wNumCurrentHeads;
    USHORT wNumCurrentSectorsPerTrack;
    ULONG ulCurrentSectorCapacity;
    USHORT wMultSectorStuff;
    ULONG ulTotalAddressableSectors;
    USHORT wSingleWordDMA;
    USHORT wMultiWordDMA;
    BYTE bReserved[128];
} IDSECTOR, *PIDSECTOR;

/*+++
Global vars
---*/
GETVERSIONOUTPARAMS vers;
SENDCMDINPARAMS in;
SENDCMDOUTPARAMS out;
HANDLE h;
DWORD i;
BYTE j;

void DetectIDE(BYTE bIDEDeviceMap){
    if (bIDEDeviceMap&1){
        if (bIDEDeviceMap&16){
            cout<<"ATAPI device is attached to primary controller, drive 0."<<endl;
        }else{
            cout<<"IDE device is attached to primary controller, drive 0."<<endl;
        }
    }
    if (bIDEDeviceMap&2){
        if (bIDEDeviceMap&32){
            cout<<"ATAPI device is attached to primary controller, drive 1."<<endl;
        }else{
            cout<<"IDE device is attached to primary controller, drive 1."<<endl;
        }
    }
    if (bIDEDeviceMap&4){
        if (bIDEDeviceMap&64){
            cout<<"ATAPI device is attached to secondary controller, drive 0."<<endl;
        }else{
            cout<<"IDE device is attached to secondary controller, drive 0."<<endl;
        }
    }
    if (bIDEDeviceMap&8){
        if (bIDEDeviceMap&128){
            cout<<"ATAPI device is attached to secondary controller, drive 1."<<endl;
        }else{
            cout<<"IDE device is attached to secondary controller, drive 1."<<endl;
        }
    }
}

VOID ChangeByteOrder(PCHAR szString, USHORT uscStrSize)
{
    
    USHORT i;
    CHAR temp;
    
    for (i = 0; i < uscStrSize; i+=2)
    {
        temp = szString[i];
        szString[i] = szString[i+1];
        szString[i+1] = temp;
    }
}

CString hdid9x(){
    ZeroMemory(&vers,sizeof(vers));
    //We start in 95/98/Me
    h=CreateFile("\\\\.\\Smartvsd",0,0,0,CREATE_NEW,0,0);
    if (!h){
       // cout<<"open smartvsd.vxd failed"<<endl;
        exit(0);
    }
    
    if (!DeviceIoControl(h,DFP_GET_VERSION,0,0,&vers,sizeof(vers),&i,0)){
       // cout<<"DeviceIoControl failed:DFP_GET_VERSION"<<endl;
        CloseHandle(h);
        return "";
    }
    //If IDE identify command not supported, fails
    if (!(vers.fCapabilities&1)){
      //  cout<<"Error: IDE identify command not supported.";
        CloseHandle(h);
        return "";
    }
    //Display IDE drive number detected
    DetectIDE(vers.bIDEDeviceMap);
    //Identify the IDE drives
    for (j=0;j<4;j++){
        PIDSECTOR phdinfo;
        char s[41];
        
        ZeroMemory(&in,sizeof(in));
        ZeroMemory(&out,sizeof(out));
        if (j&1){
            in.irDriveRegs.bDriveHeadReg=0xb0;
        }else{
            in.irDriveRegs.bDriveHeadReg=0xa0;
        }
        if (vers.fCapabilities&(16>>j)){
            
            //We don't detect a ATAPI device.
          //  cout<<"Drive "<<(int)(j+1)<<" is a ATAPI device, we don't detect it"<<endl;
            continue;
        }else{
            in.irDriveRegs.bCommandReg=0xec;
        }
        in.bDriveNumber=j;
        in.irDriveRegs.bSectorCountReg=1;
        in.irDriveRegs.bSectorNumberReg=1;
        in.cBufferSize=512;
        if (!DeviceIoControl(h,DFP_RECEIVE_DRIVE_DATA,&in,sizeof(in),&out,sizeof(out),&i,0)){
          //  cout<<"DeviceIoControl failed:DFP_RECEIVE_DRIVE_DATA"<<endl;
            CloseHandle(h);
            return "";
        }
        phdinfo=(PIDSECTOR)out.bBuffer;
        memcpy(s,phdinfo->sModelNumber,40);
        s[40]=0;
        ChangeByteOrder(s,40);

		CloseHandle(h);
		return s;
		AfxMessageBox(s);
    /*
		//   cout<<endl<<"Module Number:"<<s<<endl;
        memcpy(s,phdinfo->sFirmwareRev,8);
        s[8]=0;
        ChangeByteOrder(s,8);
      //  cout<<"\tFirmware rev:"<<s<<endl;
        memcpy(s,phdinfo->sSerialNumber,20);
        s[20]=0;
        ChangeByteOrder(s,20);
      //  cout<<"\tSerial Number:"<<s<<endl;
       // cout<<"\tCapacity:"<<phdinfo->ulTotalAddressableSectors/2/1024<<"M"<<endl<<endl;
	   */
    }
    
    //Close handle before quit
   // CloseHandle(h);
   // CopyRight();
    return "";
}

CString hdidnt(){
    char hd[80];
    PIDSECTOR phdinfo;
    char s[41];
    
    ZeroMemory(&vers,sizeof(vers));
    //We start in NT/Win2000
	for (j=0;j<4;j++){
        sprintf(hd,"\\\\.\\PhysicalDrive%d",j);
        h=CreateFile(hd,GENERIC_READ|GENERIC_WRITE,
            FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);
        if (!h){
            continue;
        }
        if (!DeviceIoControl(h,DFP_GET_VERSION,0,0,&vers,sizeof(vers),&i,0)){
            CloseHandle(h);
            continue;
        }
        //If IDE identify command not supported, fails
        if (!(vers.fCapabilities&1)){
			//       cout<<"Error: IDE identify command not supported.";
            CloseHandle(h);
            return "";
        }
        //Identify the IDE drives
        ZeroMemory(&in,sizeof(in));
        ZeroMemory(&out,sizeof(out));
        if (j&1){
            in.irDriveRegs.bDriveHeadReg=0xb0;
        }else{
            in.irDriveRegs.bDriveHeadReg=0xa0;
        }
        if (vers.fCapabilities&(16>>j)){
            //We don't detect a ATAPI device.
			//     cout<<"Drive "<<(int)(j+1)<<" is a ATAPI device, we don't detect it"<<endl;
            
            continue;
        }else{
            in.irDriveRegs.bCommandReg=0xec;
        }
        in.bDriveNumber=j;
        in.irDriveRegs.bSectorCountReg=1;
        in.irDriveRegs.bSectorNumberReg=1;
        in.cBufferSize=512;
        if (!DeviceIoControl(h,DFP_RECEIVE_DRIVE_DATA,&in,sizeof(in),&out,sizeof(out),&i,0)){
			//    cout<<"DeviceIoControl failed:DFP_RECEIVE_DRIVE_DATA"<<endl;
            CloseHandle(h);
            return "";
        }
        phdinfo=(PIDSECTOR)out.bBuffer;
        memcpy(s,phdinfo->sModelNumber,40);
        s[40]=0;
        ChangeByteOrder(s,40);
		CloseHandle(h);
		return s;
		/*
        //cout<<endl<<"Module Number:"<<s<<endl;
        memcpy(s,phdinfo->sFirmwareRev,8);
        s[8]=0;
        ChangeByteOrder(s,8);
		// cout<<"\tFirmware rev:"<<s<<endl;
        memcpy(s,phdinfo->sSerialNumber,20);
        s[20]=0;
        ChangeByteOrder(s,20);
		// cout<<"\tSerial Number:"<<s<<endl;
		//  cout<<"\tCapacity:"<<phdinfo->ulTotalAddressableSectors/2/1024<<"M"<<endl<<endl;
        CloseHandle(h);*/
    }
	//   CopyRight();
	return "";
}

CString GetHardDisk(){
//    char szAddr[20];
//    GetMacAddress(szAddr);
//    AfxMessageBox(szAddr);
	
    OSVERSIONINFO VersionInfo;
    
    ZeroMemory(&VersionInfo,sizeof(VersionInfo));
    VersionInfo.dwOSVersionInfoSize=sizeof(VersionInfo);
    GetVersionEx(&VersionInfo);
    
    switch (VersionInfo.dwPlatformId){
    case VER_PLATFORM_WIN32s:
        return "";//cout<<"Win32s is not supported by this programm."<<endl;
        break;
    case VER_PLATFORM_WIN32_WINDOWS:
        return hdid9x();
        break;
    case VER_PLATFORM_WIN32_NT:
        return hdidnt();
        break;
	default:
		return "";
    }
    
    // TODO: Add your control notification handler code here
}


//cpu序号
CString GetProcessSerialNumber()
{
	try
	{
		int   sn_high, sn_middle, sn_low;
	//	char sn[97];
		
		__asm{
			MOV EAX, 1
				CPUID
				MOV sn_high, EAX
				MOV EAX, 3
				CPUID
				MOV sn_middle,EDX
				MOV sn_low, ECX
		}
		
		CString str;
		str.Format("%d-%d-%d", sn_high, sn_middle, sn_low);
		return str;
	}
	catch(...)
	{
		return "";
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -