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

📄 stpasswordmanager.cpp

📁 windows ce开发技巧与实例光盘代码
💻 CPP
字号:
#include "stdafx.h"
#include "STPasswordManager.h"
#include <atlbase.h>

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

#define ACTIVE_FOLDER _T("ControlPanel\\Owner")
#define ACTIVE_KEY _T("PowrPass")
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
 
CSTPasswordManager::CSTPasswordManager()
{
	m_hModule = ::LoadLibrary(_T("coredll.dll"));
	ASSERT(m_hModule);

	FARPROC pProc;
	
	pProc = GetProcAddress(m_hModule, _T("SetPassword"));
	m_procSetPassword = (SetPasswordProc*)pProc;

	pProc = GetProcAddress(m_hModule, _T("SetPasswordActive"));
	m_procSetPasswordActive = (SetPasswordActiveProc*)pProc;
}

CSTPasswordManager::~CSTPasswordManager()
{
	if (m_hModule) {
		::FreeLibrary(m_hModule);
	}
}

BOOL CSTPasswordManager::CheckPassword(const CString &strPassword)
{
	LPTSTR lpPassword;
	if ( (strPassword==_T("")) || (strPassword.IsEmpty()) ) {
		lpPassword = NULL;
	} else {
		lpPassword = (LPTSTR)(LPCTSTR)strPassword;
	}

	BOOL bResult = m_procSetPassword(lpPassword, lpPassword);
	return bResult;
}

BOOL CSTPasswordManager::SetPassword(const CString &strOldPassword, const CString &strNewPassword)
{
	LPTSTR lpOldPassword;
	if ( (strOldPassword==_T("")) || (strOldPassword.IsEmpty()) ) {
		lpOldPassword = NULL;
	} else {
		lpOldPassword = (LPTSTR)(LPCTSTR)strOldPassword;
	}

	LPTSTR lpNewPassword;
	if ( (strNewPassword==_T("")) || (strNewPassword.IsEmpty()) ) {
		lpNewPassword = NULL;
	} else {
		lpNewPassword = (LPTSTR)(LPCTSTR)strNewPassword;
	}

	BOOL bResult = m_procSetPassword(lpOldPassword, lpNewPassword);
	return bResult;
}

BOOL CSTPasswordManager::SetPasswordAndActive(const CString &strOldPassword, const CString &strNewPassword, BOOL bActive)
{
	BOOL bResult = SetPassword(strOldPassword, strNewPassword);
	if (bResult) {
		bResult = SetPasswordActive(strNewPassword, bActive);
	}

	return bResult;
}

BOOL CSTPasswordManager::SetPasswordActive(const CString &strCurrentPassword, BOOL bActive)
{
	LPTSTR lpCurrentPassword;
	if ( (strCurrentPassword==_T("")) || (strCurrentPassword.IsEmpty()) ) {
		lpCurrentPassword = NULL;
	} else {
		lpCurrentPassword = (LPTSTR)(LPCTSTR)strCurrentPassword;
	}

	BOOL bResult = m_procSetPasswordActive(bActive, lpCurrentPassword);
	if (!bResult) {
		return FALSE;
	}

	CRegKey key;
	if (key.Open(HKEY_CURRENT_USER, ACTIVE_FOLDER) != ERROR_SUCCESS) {
		if (key.Create(HKEY_CURRENT_USER, ACTIVE_FOLDER) != ERROR_SUCCESS) {
			return FALSE;
		}
	} 

	BYTE pData[1];
	pData[0] = (BYTE)bActive;

	if (RegSetValueEx(key.m_hKey, ACTIVE_KEY, 0, REG_BINARY, pData, 1) != ERROR_SUCCESS) {
		return FALSE;
	};

	return TRUE;
}

BOOL CSTPasswordManager::GetPasswordActive()
{
	CRegKey key;
	if (key.Open(HKEY_CURRENT_USER, ACTIVE_FOLDER) != ERROR_SUCCESS) {
		//If error return FALSE
		return FALSE;
	}

	DWORD dwCount = 0;
	if (::RegQueryValueEx(key.m_hKey, ACTIVE_KEY, NULL, NULL, NULL, &dwCount) != ERROR_SUCCESS) {
		//If error return FALSE
		return FALSE;
	}

	if (dwCount > 1000) {
		// just a precaution for tampering
		//If error return FALSE
		return FALSE;
	}

	BYTE* pBuffer = new BYTE[dwCount];
	if (::RegQueryValueEx(key.m_hKey, ACTIVE_KEY, NULL, NULL, pBuffer, &dwCount) != ERROR_SUCCESS) {
		delete pBuffer;
		//If error return FALSE
		return FALSE;
	}

	BOOL bResult = (BOOL)(*pBuffer);
	delete pBuffer;
	return bResult;
}

⌨️ 快捷键说明

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