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

📄 cmosdlg.cpp

📁 用vc写的外壳 通过调用asm生成的程序来读出或写入cmos。解释CMOS每一字节含义.
💻 CPP
字号:
// CMOSDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "CMOS.h"
#include "CMOSDlg.h"
#include "CtrlCMOS.h"
#include "ModifyDlg.h"
#include ".\cmosdlg.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#endif

extern bool WINNT;
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// 对话框数据
	enum { IDD = IDD_ABOUTBOX };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()


// CCMOSDlg 对话框



CCMOSDlg::CCMOSDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CCMOSDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CCMOSDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_LISTOFFSET, m_listoffset);
	DDX_Control(pDX, IDC_BTNREADCMOS, m_readCMOS);
	DDX_Control(pDX, IDC_BTNREADFILE, m_readCMOSfile);
	DDX_Control(pDX, IDC_BTNWRITECMOS, m_writeCMOS);
	DDX_Control(pDX, IDC_BTNSAVE, m_save);
	DDX_Control(pDX, IDC_BTNREADBIOS, m_readBIOS);
}

BEGIN_MESSAGE_MAP(CCMOSDlg, CDialog)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	//}}AFX_MSG_MAP
	ON_BN_CLICKED(IDC_BTNREADCMOS, OnBnClickedBtnreadcmos)
	ON_BN_CLICKED(IDC_BTNREADFILE, OnBnClickedBtnreadfile)
	ON_BN_CLICKED(IDC_BTNREADBIOS, OnBnClickedBtnreadbios)
//	ON_NOTIFY(HDN_ITEMDBLCLICK, 0, OnHdnItemdblclickListoffset)
	ON_NOTIFY(NM_DBLCLK, IDC_LISTOFFSET, OnNMDblclkListoffset)
//	ON_NOTIFY(LVN_ITEMCHANGED, IDC_LISTOFFSET, OnLvnItemchangedListoffset)
ON_BN_CLICKED(IDC_BTNSAVE, OnBnClickedBtnsave)
ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
ON_BN_CLICKED(IDC_BTNWRITECMOS, OnBnClickedBtnwritecmos)
END_MESSAGE_MAP()


// CCMOSDlg 消息处理程序

BOOL CCMOSDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// 将\“关于...\”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码

	if(WINNT == true)
	{
		m_readBIOS.EnableWindow(true);
		m_readCMOS.EnableWindow(false);
		m_readCMOSfile.EnableWindow(false);
		m_writeCMOS.EnableWindow(false);
		m_save.EnableWindow(false);
	}
	else
	{
		m_readBIOS.EnableWindow(false);
		m_readCMOS.EnableWindow(true);
		m_readCMOSfile.EnableWindow(true);
		m_writeCMOS.EnableWindow(true);
		m_save.EnableWindow(true);

	}
	m_listoffset.SetExtendedStyle( LVS_EX_FULLROWSELECT );
	m_listoffset.InsertColumn(0,"OFFSET",LVCFMT_CENTER,80);
	m_listoffset.InsertColumn(1,"DESCRIPTION",LVCFMT_LEFT,180);
	m_listoffset.InsertColumn(2,"VALUE",LVCFMT_CENTER,120);

	char temp[0x80][40] =
	{
			"Seconds",
			"Seconds alarm",
			"Minutes",
			"Minutes alarm",
			"Hours",
			"Hours alarm",
			"Day of the week",
			"Day of the month",
			"Month",
			"Year",
			"Status register A",
			"Status register B",
			"Status register C",
			"Status register D",
			"Diagnostic register",
			"Shutdown register",
			"Diskette drive types",
			"BIOS DEPENDENT",
			"Hard disk type",
			"BIOS DEPENDENT",
			"Equipment byte",
			"Base memory low",
			"Base memory high",
			"Extended memory low",
			"Extended. memory high",
			"Hard disk 0 ext. type",
			"Hard disk 1 ext. type",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"CMOS checksum high",
			"CMOS checksum low",
			"Extended memory low",
			"Extended memory high",
			"Date century byte (ISA)/CRC low (MCA)",
			"Power on information flags",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"Date century byte (MCA)",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT",
			"BIOS DEPENDENT"
	};

	int i;
	for (i=0;i<=0X7F;i++)
	{
		char buffer[6];
		_i64toa(i,buffer,16);
		char b[2];
		b[0] = 'H';
		b[1] = '\0';
		strcat(buffer,b);
		m_listoffset.InsertItem(i, buffer);
	}

	for (i=0;i<=0x7f;i++)
	{
		m_listoffset.SetItemText(i,1,temp[i]);
	}


	return TRUE;  // 除非设置了控件的焦点,否则返回 TRUE
}

void CCMOSDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void CCMOSDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

//当用户拖动最小化窗口时系统调用此函数取得光标显示。
HCURSOR CCMOSDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}

void CCMOSDlg::OnBnClickedBtnreadcmos()
{
	CString sPath;
	GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
	sPath.ReleaseBuffer ();
	int nPos;
	nPos=sPath.ReverseFind ('\\');
	sPath=sPath.Left (nPos);
	CString lpszFile = sPath + "\\READCMOS.EXE";
	CString lpszFIleDes = sPath +"\\CMOS.MEM";
	CFile frecord;
	frecord.Remove(lpszFIleDes);

	ShellExecute(0, "open", lpszFile, lpszFIleDes, NULL, SW_HIDE); 
	MessageBox("Read CMOS Successfull!");

	CCtrlCMOS CMOS;
	
	if (!frecord.Open(lpszFIleDes,CFile::modeRead))
	{ /* 打开一个二进制文件 */
		}
	

	frecord.Read(CMOS.CMOSRecord,128); /* 从文件中读CMOS内存信息 */
	frecord.Close();

		for (int i=0;i<=0x7f;i++)
	{
		char buffer[6];
		BYTE temp = *(CMOS.CMOSRecord+i);
		_i64toa(temp,buffer,10);
		m_listoffset.SetItemText(i,2,buffer);
	}
	
}

void CCMOSDlg::OnBnClickedBtnreadfile()
{
	// TODO: 在此添加控件通知处理程序代码
	CCtrlCMOS CMOS;
	CMOS.ReadFileWin98();

	for (int i=0;i<=0x7f;i++)
	{
		char buffer[6];
		BYTE temp = *(CMOS.CMOSRecord+i);
		_i64toa(temp,buffer,10);
		m_listoffset.SetItemText(i,2,buffer);
	}
}

void CCMOSDlg::OnBnClickedBtnreadbios()
{
	// TODO: 在此添加控件通知处理程序代码
	CCtrlCMOS CMOS;
	CMOS.ReadBIOSWINNT();
}


void CCMOSDlg::OnNMDblclkListoffset(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO: 在此添加控件通知处理程序代码
	POSITION pos = m_listoffset.GetFirstSelectedItemPosition();
	if(pos)
	{
		CString value;
		int nItem = m_listoffset.GetNextSelectedItem(pos);
		value = m_listoffset.GetItemText(nItem,2);

		CModifyDlg dlg;
		dlg.m_value = value;
		if(dlg.DoModal()==IDOK)
		{
			m_listoffset.SetItemText(nItem,2,dlg.m_value);
		}
	}

	*pResult = 0;
}



void CCMOSDlg::OnBnClickedBtnsave()
{
	CCtrlCMOS CMOS;
	CString temp;

	for (int i=0;i<=0x7f;i++)
	{
		temp = m_listoffset.GetItemText(i,2);
		BYTE value  = (BYTE)atoi(temp);
		*(CMOS.CMOSRecord+i) = value;
	}

	CString sPath;
	GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
	sPath.ReleaseBuffer ();
	int nPos;
	nPos=sPath.ReverseFind ('\\');
	sPath=sPath.Left (nPos);
	CString lpszFile = sPath + "\\MODIFIEDCMOS.MEM";

	CFile fcmos;
	fcmos.Open(lpszFile,CFile::modeCreate|CFile::modeWrite);
	fcmos.Write(CMOS.CMOSRecord,0x80);
	fcmos.Close();
	MessageBox("Modified CMOS saved to "+lpszFile);
}

void CCMOSDlg::OnBnClickedCancel()
{
	// TODO: 在此添加控件通知处理程序代码
	OnCancel();
}

void CCMOSDlg::OnBnClickedBtnwritecmos()
{
	// TODO: 在此添加控件通知处理程序代码

	CCtrlCMOS CMOS;
	CString temp;

	for (int i=0;i<=0x7f;i++)
	{
		temp = m_listoffset.GetItemText(i,2);
		BYTE value  = (BYTE)atoi(temp);
		*(CMOS.CMOSRecord+i) = value;
	}

	CString sPath;
	GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
	sPath.ReleaseBuffer ();
	int nPos;
	nPos=sPath.ReverseFind ('\\');
	sPath=sPath.Left (nPos);
	CString lpszFile = sPath + "\\PUTCMOS.EXE";
	CString lpszFIleDes = sPath +"\\CMOS.MEM";

	CFile fcmos;
	fcmos.Open(lpszFIleDes,CFile::modeCreate|CFile::modeWrite);
	fcmos.Write(CMOS.CMOSRecord,0x80);
	fcmos.Close();
	MessageBox("Modified CMOS saved to "+lpszFIleDes);



	ShellExecute(0, "open", lpszFile, lpszFIleDes, NULL, SW_HIDE);
	MessageBox("Put to CMOS Successfull!");
	

}

⌨️ 快捷键说明

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