?? stpasswordmanager.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;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -