mirror of
				https://github.com/bobranten/Ext4Fsd.git
				synced 2025-10-30 21:38:31 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			223 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			223 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // ServiceManage.cpp : implementation file
 | |
| //
 | |
| 
 | |
| #include "stdafx.h"
 | |
| #include "ext2mgr.h"
 | |
| #include "ServiceManage.h"
 | |
| 
 | |
| #ifdef _DEBUG
 | |
| #define new DEBUG_NEW
 | |
| #undef THIS_FILE
 | |
| static char THIS_FILE[] = __FILE__;
 | |
| #endif
 | |
| 
 | |
| /////////////////////////////////////////////////////////////////////////////
 | |
| // CServiceManage dialog
 | |
| 
 | |
| 
 | |
| CServiceManage::CServiceManage(CWnd* pParent /*=NULL*/)
 | |
| 	: CDialog(CServiceManage::IDD, pParent)
 | |
| {
 | |
| 	//{{AFX_DATA_INIT(CServiceManage)
 | |
| 	m_Codepage = _T("");
 | |
| 	m_bExt3Writable = FALSE;
 | |
| 	m_bReadonly = FALSE;
 | |
| 	m_srvStatus = _T("");
 | |
| 	m_sPrefix = _T("");
 | |
| 	m_sSuffix = _T("");
 | |
| 	m_bAutoMount = FALSE;
 | |
| 	//}}AFX_DATA_INIT
 | |
| 
 | |
|     m_nStartmode = 0;
 | |
| 
 | |
|     m_bStarted = Ext2IsServiceStarted();
 | |
| 
 | |
|     if (m_bStarted) {
 | |
|         m_srvStatus = _T("Ext2Fsd is already started.");
 | |
|     } else {
 | |
|         m_srvStatus = _T("Ext2Fsd is NOT started.");
 | |
|     }
 | |
| 
 | |
|     m_bInited = TRUE;
 | |
| }
 | |
| 
 | |
| 
 | |
| void CServiceManage::DoDataExchange(CDataExchange* pDX)
 | |
| {
 | |
| 	CDialog::DoDataExchange(pDX);
 | |
| 	//{{AFX_DATA_MAP(CServiceManage)
 | |
| 	DDX_CBString(pDX, IDC_COMBO_CODEPAGE, m_Codepage);
 | |
| 	DDX_Check(pDX, IDC_EXT3_WRITABLE, m_bExt3Writable);
 | |
| 	DDX_Check(pDX, IDC_READ_ONLY, m_bReadonly);
 | |
| 	DDX_Text(pDX, IDC_SERVICE_STATUS, m_srvStatus);
 | |
| 	DDX_Text(pDX, IDC_GLOBAL_PREFIX, m_sPrefix);
 | |
| 	DDV_MaxChars(pDX, m_sPrefix, 31);
 | |
| 	DDX_Text(pDX, IDC_GLOBAL_SUFFIX, m_sSuffix);
 | |
| 	DDV_MaxChars(pDX, m_sSuffix, 31);
 | |
| 	DDX_Check(pDX, IDC_EXT3_AUTOMOUNT, m_bAutoMount);
 | |
| 	//}}AFX_DATA_MAP
 | |
| }
 | |
| 
 | |
| 
 | |
| BEGIN_MESSAGE_MAP(CServiceManage, CDialog)
 | |
| 	//{{AFX_MSG_MAP(CServiceManage)
 | |
| 	ON_BN_CLICKED(IDC_READ_ONLY, OnReadOnly)
 | |
| 	ON_BN_CLICKED(IDC_EXT3_WRITABLE, OnExt3Writable)
 | |
| 	ON_BN_CLICKED(IDC_START_SERVICE, OnStartService)
 | |
| 	//}}AFX_MSG_MAP
 | |
| END_MESSAGE_MAP()
 | |
| 
 | |
| /////////////////////////////////////////////////////////////////////////////
 | |
| // CServiceManage message handlers
 | |
| 
 | |
| void CServiceManage::OnReadOnly() 
 | |
| {
 | |
| 	// TODO: Add your control notification handler code here
 | |
|     UpdateData(TRUE);
 | |
| 
 | |
|     if (m_bReadonly) {
 | |
|         m_bExt3Writable = FALSE;
 | |
|     }
 | |
|     SET_WIN(IDC_EXT3_WRITABLE, !m_bReadonly);
 | |
| 
 | |
|     UpdateData(FALSE);
 | |
| }
 | |
| 
 | |
| void CServiceManage::OnExt3Writable() 
 | |
| {
 | |
| 	// TODO: Add your control notification handler code here
 | |
| 	
 | |
| }
 | |
| 
 | |
| void CServiceManage::OnCancel() 
 | |
| {
 | |
| 	// TODO: Add extra cleanup here
 | |
| 	
 | |
| 	CDialog::OnCancel();
 | |
| }
 | |
| 
 | |
| void CServiceManage::OnOK() 
 | |
| {
 | |
|     BOOL rc;
 | |
| 
 | |
| 	// TODO: Add extra validation here
 | |
|     UpdateData(TRUE);
 | |
| 
 | |
| 	CComboBox   *cbStartup = (CComboBox *)GetDlgItem(IDC_COMBO_STARTUP);
 | |
|     if (cbStartup) {
 | |
|         m_nStartmode = cbStartup->GetCurSel();
 | |
|     } else {
 | |
|         m_nStartmode = CB_ERR;
 | |
|     }
 | |
| 
 | |
|     if (m_nStartmode == CB_ERR) {
 | |
|         AfxMessageBox("Invalid startup mode !", MB_OK|MB_ICONWARNING);
 | |
|         return;
 | |
|     }
 | |
| 
 | |
|     if (m_Codepage.IsEmpty()) {
 | |
|         AfxMessageBox("You must select a codepage type.", MB_OK|MB_ICONWARNING);
 | |
|         return;
 | |
|     }
 | |
| 
 | |
|     CComboBox   *cbCodepage = (CComboBox *)GetDlgItem(IDC_COMBO_CODEPAGE);
 | |
|     if (cbCodepage) {
 | |
|         int rc = cbCodepage->FindStringExact(-1, m_Codepage);
 | |
|         if (rc == CB_ERR) {
 | |
|             AfxMessageBox("Invalid codepage type: "+m_Codepage, MB_OK|MB_ICONWARNING);
 | |
|             return;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     if (AfxMessageBox("Current service settings will be overwritten,\ndo you want continue ?",
 | |
|                       MB_YESNO | MB_ICONQUESTION) != IDYES) {
 | |
|         return;
 | |
|     }
 | |
| 
 | |
|     rc = Ext2SetGlobalProperty(
 | |
|             m_nStartmode,
 | |
|             (BOOLEAN)m_bReadonly,
 | |
|             (BOOLEAN)m_bExt3Writable,
 | |
|             m_Codepage.GetBuffer(CODEPAGE_MAXLEN),
 | |
|             m_sPrefix.GetBuffer(HIDINGPAT_LEN),
 | |
|             m_sSuffix.GetBuffer(HIDINGPAT_LEN),
 | |
|             (BOOLEAN)m_bAutoMount
 | |
|             );
 | |
| 
 | |
|     if (rc) {
 | |
| /*
 | |
|         AfxMessageBox("Ext2 service settings updated successfully !",
 | |
|                       MB_OK | MB_ICONINFORMATION);
 | |
| */
 | |
|       	CDialog::OnOK();
 | |
|     } else {
 | |
|         AfxMessageBox("Failed to save the service settings !",
 | |
|                       MB_OK | MB_ICONWARNING);
 | |
|     }
 | |
| }
 | |
| 
 | |
| BOOL CServiceManage::OnInitDialog() 
 | |
| {
 | |
| 	CDialog::OnInitDialog();
 | |
| 
 | |
| 	CComboBox   *cbStartup = (CComboBox *)GetDlgItem(IDC_COMBO_STARTUP);
 | |
|     if (cbStartup) {
 | |
|         cbStartup->ResetContent();
 | |
|         cbStartup->AddString(_T("SERVICE_BOOT_START"));
 | |
|         cbStartup->AddString(_T("SERVICE_SYSTEM_START"));
 | |
|         cbStartup->AddString(_T("SERVICE_AUTO_START"));
 | |
|         cbStartup->AddString(_T("SERVICE_DEMAND_START"));
 | |
|         cbStartup->AddString(_T("SERVICE_DISABLED"));
 | |
|         cbStartup->SetCurSel(m_nStartmode);
 | |
|     }
 | |
| 
 | |
|     CComboBox   *cbCodepage = (CComboBox *)GetDlgItem(IDC_COMBO_CODEPAGE);
 | |
|     if (cbCodepage) {
 | |
|         int i = 0, j = -1;
 | |
|         cbCodepage->ResetContent();
 | |
|         while (gCodepages[i]) {
 | |
|             cbCodepage->AddString(gCodepages[i]);
 | |
|             if (!m_Codepage.IsEmpty()) {
 | |
|                 CHAR *buffer = m_Codepage.GetBuffer(CODEPAGE_MAXLEN);
 | |
|                 if (_stricmp(buffer, gCodepages[i]) == 0) {
 | |
|                     j = i;
 | |
|                 }
 | |
|             }
 | |
|             i++;
 | |
|         }
 | |
|         if (j == -1) {
 | |
|             m_Codepage = "default";
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     if (m_bReadonly) {
 | |
|         m_bExt3Writable = FALSE;
 | |
|     }
 | |
| 
 | |
|     SET_WIN(IDC_EXT3_WRITABLE, !m_bReadonly);
 | |
|     SET_WIN(IDC_START_SERVICE, !m_bStarted);
 | |
| 	
 | |
|     UpdateData(FALSE);
 | |
| 
 | |
| 	return TRUE;  // return TRUE unless you set the focus to a control
 | |
| 	              // EXCEPTION: OCX Property Pages should return FALSE
 | |
| }
 | |
| 
 | |
| void CServiceManage::OnStartService() 
 | |
| {
 | |
| 	// TODO: Add your control notification handler code here
 | |
| 
 | |
|     m_bStarted = Ext2StartExt2Fsd();
 | |
| 
 | |
|     if (m_bStarted) {
 | |
|         m_srvStatus = _T("Ext2Fsd was just started.");
 | |
|         GetParent()->SetTimer('REFF',  500, NULL);
 | |
|         GetParent()->SetTimer('REFR', 3000, NULL);
 | |
|     } else {
 | |
|         m_srvStatus = _T("Ext2Fsd could NOT be started.");
 | |
|     }
 | |
| 
 | |
|     SET_WIN(IDC_START_SERVICE, !m_bStarted);
 | |
|     UpdateData(FALSE);
 | |
| }
 |