📄 cproppagentauth.cpp
字号:
#include "StdAfx.h"#include "WarServerSnapin.h"#include "WarSvrSnapin.h"#include "PropPageNtAuth.h"CPropPageNtAuth::CPropPageNtAuth(WarWin32Registry& regKey, long lNotifyHandle, bool bDeleteHandle, TCHAR* pTitle) : CSnapInPropertyPageImpl<CPropPageNtAuth> (pTitle),m_lNotifyHandle(lNotifyHandle),m_bDeleteHandle(bDeleteHandle), // Should be true for only page.mRegKey(regKey){}CPropPageNtAuth::~CPropPageNtAuth(){ if (m_bDeleteHandle) MMCFreeNotifyHandle(m_lNotifyHandle);}HRESULT CPropPageNtAuth::PropertyChangeNotify(long param){ return MMCPropertyChangeNotify(m_lNotifyHandle, param);}LRESULT CPropPageNtAuth::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled){ war_regstr_t value; value = mRegKey.GetStrValue(WAR_WINNT_AUTH_SERVER, _T("")); if (value.empty()) ::SendMessage(GetDlgItem(IDC_USE_LOCAL_MACHINE), BM_SETCHECK, BST_CHECKED, 0); else SetDlgItemText(IDC_SERVER, value.c_str()); value = mRegKey.GetStrValue(WAR_WINNT_AUTH_FTP_GROUP, _T("")); if (!value.empty()) SetDlgItemText(IDC_FTP_GROUP, value.c_str()); value = mRegKey.GetStrValue(WAR_WINNT_AUTH_ANON_USER, _T("")); if (!value.empty()) SetDlgItemText(IDC_ANON_NT_USER, value.c_str()); value = mRegKey.GetStrValue(WAR_WINNT_AUTH_ANON_PASSWD, _T("")); if (!value.empty()) SetDlgItemText(IDC_PASSWD, value.c_str()); if (mRegKey.GetIntValue(WAR_WINNT_AUTH_ALLOW_ANON, false)) ::SendMessage(GetDlgItem(IDC_ALLOW_ANONYMOUS), BM_SETCHECK, BST_CHECKED, 0); UpdateEnabledFileds(); return TRUE;}void CPropPageNtAuth::UpdateEnabledFileds(){ // Auth server bool use_local = ::SendMessage( GetDlgItem(IDC_USE_LOCAL_MACHINE), BM_GETCHECK, 0, 0) == BST_CHECKED; ::EnableWindow(GetDlgItem(IDC_SERVER), !use_local); bool allow_anum = ::SendMessage( GetDlgItem(IDC_ALLOW_ANONYMOUS), BM_GETCHECK, 0, 0) == BST_CHECKED; ::EnableWindow(GetDlgItem(IDC_ANON_NT_USER), allow_anum);}BOOL CPropPageNtAuth::OnApply(){ // Write the changes back to the registry TCHAR buffer[1024]; // Server name *buffer = 0; bool use_local = ::SendMessage( GetDlgItem(IDC_USE_LOCAL_MACHINE), BM_GETCHECK, 0, 0) == BST_CHECKED; if (!use_local) ::GetWindowText(GetDlgItem(IDC_SERVER), buffer, sizeof(buffer) / sizeof(TCHAR)); mRegKey.SetValue(WAR_WINNT_AUTH_SERVER, war_regstr_t(buffer)); // FTP group *buffer = 0; ::GetWindowText(GetDlgItem(IDC_FTP_GROUP), buffer, sizeof(buffer) / sizeof(TCHAR)); mRegKey.SetValue(WAR_WINNT_AUTH_FTP_GROUP, war_regstr_t(buffer)); // Allow anon bool allow_anum = ::SendMessage( GetDlgItem(IDC_ALLOW_ANONYMOUS), BM_GETCHECK, 0, 0) == BST_CHECKED; mRegKey.SetValue(WAR_WINNT_AUTH_ALLOW_ANON, allow_anum); // Anon NT user *buffer = 0; ::GetWindowText(GetDlgItem(IDC_ANON_NT_USER), buffer, sizeof(buffer) / sizeof(TCHAR)); mRegKey.SetValue(WAR_WINNT_AUTH_ANON_USER, war_regstr_t(buffer)); // Anon NT user's password *buffer = 0; ::GetWindowText(GetDlgItem(IDC_PASSWD), buffer, sizeof(buffer) / sizeof(TCHAR)); mRegKey.SetValue(WAR_WINNT_AUTH_ANON_PASSWD, war_regstr_t(buffer)); //PropertyChangeNotify(0); return TRUE;}LRESULT CPropPageNtAuth::OnClickedUse_local_machine(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled){ UpdateEnabledFileds(); return 0;}LRESULT CPropPageNtAuth::OnClickedAllow_anonymous(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled){ UpdateEnabledFileds(); return 0;}LRESULT CPropPageNtAuth::OnDropdownFtp_group(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled){ ::SendMessage(hWndCtl, CB_RESETCONTENT, 0, 0); HWND hwnd_dropdown = GetDlgItem(IDC_FTP_GROUP); bool use_local = ::SendMessage( GetDlgItem(IDC_USE_LOCAL_MACHINE), BM_GETCHECK, 0, 0) == BST_CHECKED; // Enumerate the local groups on the selected server TCHAR svr_name_buf[MAX_PATH]; WarCollector<wchar_t> net_sever; if (!use_local) { if (::GetWindowText(GetDlgItem(IDC_SERVER),svr_name_buf, sizeof(svr_name_buf) / sizeof(TCHAR)) < 1) { AfxMessageBox(_T("No server name was specified")); return 0; } net_sever = svr_name_buf; } do { LPBYTE return_buf = NULL; DWORD entries_read = 0; DWORD total_entries = 0; DWORD_PTR resume_handle = NULL; NET_API_STATUS status = NetLocalGroupEnum( use_local ? NULL : net_sever.GetValue().c_str(), 0, &return_buf, MAX_PREFERRED_LENGTH, &entries_read, &total_entries, &resume_handle); PLOCALGROUP_INFO_0 p = (PLOCALGROUP_INFO_0)return_buf; for(DWORD index = 0; index < entries_read; index++) { WarCollector<TCHAR> name = p->lgrpi0_name; ::SendMessage(hwnd_dropdown, CB_ADDSTRING, 0, (LPARAM)(name.GetValue().c_str())); p++; } if (return_buf) NetApiBufferFree(return_buf); switch(status) { case NERR_InvalidComputer: AfxMessageBox(_T("Invalid computer")); return 0; case ERROR_MORE_DATA: break; case ERROR_ACCESS_DENIED: AfxMessageBox(_T("Access denied to NT group information")); return 0; case NERR_Success: return 0; default: AfxMessageBox(_T("Failed to fetch group information")); return 0; } } while(false); return 0;}LRESULT CPropPageNtAuth::OnClickedReset(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled){ ::SendMessage(GetDlgItem(IDC_USE_LOCAL_MACHINE), BM_SETCHECK, BST_CHECKED, 0); ::SendMessage(GetDlgItem(IDC_ALLOW_ANONYMOUS), BM_SETCHECK, BST_UNCHECKED, 0); ::SetWindowText(GetDlgItem(IDC_FTP_GROUP), _T("FTP-Users")); ::SetWindowText(GetDlgItem(IDC_ANON_NT_USER), _T("FTP-Guest")); UpdateEnabledFileds(); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -