// RegInject.h

#pragma once


// RegInject 对话框

class RegInject : public CDialogEx
{
	DECLARE_DYNAMIC(RegInject)

public:
	RegInject(CWnd* pParent = NULL);   // 标准构造函数
	virtual ~RegInject();

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

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

	DECLARE_MESSAGE_MAP()
public:
	CString m_strDllPath;
	afx_msg void OnBnClickedButton1();
	afx_msg void OnBnClickedButton2();
};

// RegInject.cpp

// RegInject.cpp : 实现文件
//

#include "stdafx.h"
#include "MyInjectTool.h"
#include "RegInject.h"
#include "afxdialogex.h"


// RegInject 对话框

IMPLEMENT_DYNAMIC(RegInject, CDialogEx)

RegInject::RegInject(CWnd* pParent /*=NULL*/)
	: CDialogEx(RegInject::IDD, pParent)
	, m_strDllPath(_T(""))
{

}

RegInject::~RegInject()
{
}

void RegInject::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_EDIT1, m_strDllPath);
}


BEGIN_MESSAGE_MAP(RegInject, CDialogEx)
	ON_BN_CLICKED(IDC_BUTTON1, &RegInject::OnBnClickedButton1)
	ON_BN_CLICKED(IDC_BUTTON2, &RegInject::OnBnClickedButton2)
END_MESSAGE_MAP()


// RegInject 消息处理程序


void RegInject::OnBnClickedButton1()
{
	// TODO:  在此添加控件通知处理程序代码
	char szFilter[] = "动态链接库|*.dll";
	CFileDialog fileDlg(TRUE, "dll", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);
	UpdateData(TRUE);
	if (fileDlg.DoModal() == IDOK)
	{
		m_strDllPath = fileDlg.GetPathName();
	}
	UpdateData(FALSE);
}


void RegInject::OnBnClickedButton2()
{
	// TODO:  在此添加控件通知处理程序代码
	BOOL bRet = FALSE;
	HKEY hKey = NULL;
	LONG nReg;
	char szDllPath[MAX_PATH] = { 0 };

	//打开HKEY_LOCAL_MACHINE/Software/Microsoft/WindowsNT/CurrentVersion/Windows
	nReg = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
		"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Windows",
		0,
		KEY_ALL_ACCESS,
		&hKey);

	if (nReg != ERROR_SUCCESS)
	{
		MessageBox("打开注册表失败");
		RegCloseKey(hKey);
		return;
	}

	//设置AppInit_DLLs的键值为我们的Dll
	nReg = RegSetValueEx(hKey,
		"AppInit_DLLs",
		0,
		REG_SZ,
		//(byte *)m_strDllPath.GetBuffer(0),
		NULL,
		m_strDllPath.GetLength()
		);
	if (nReg != ERROR_SUCCESS)
	{
		MessageBox("设置注册表失败!");
		RegCloseKey(hKey);
		return;
	}

	RegCloseKey(hKey);
	return;
}