mirror of
https://github.com/bobranten/Ext4Fsd.git
synced 2025-10-30 05:18:31 -05:00
169 lines
4.3 KiB
C++
169 lines
4.3 KiB
C++
// DelDeadLetter.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "ext2mgr.h"
|
|
#include "DelDeadLetter.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CDelDeadLetter dialog
|
|
|
|
|
|
CDelDeadLetter::CDelDeadLetter(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CDelDeadLetter::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CDelDeadLetter)
|
|
m_sDrvLetter = _T("");
|
|
m_bAutoRemoval = g_bAutoRemoveDeadLetters;
|
|
m_bKeepIt = TRUE;
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
|
|
void CDelDeadLetter::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CDelDeadLetter)
|
|
DDX_CBString(pDX, IDC_DEAD_LETTER_LIST, m_sDrvLetter);
|
|
DDX_Check(pDX, IDC_AUTO_REMOVAL, m_bAutoRemoval);
|
|
DDX_Check(pDX, IDC_REMOVAL_CURRENT, m_bKeepIt);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CDelDeadLetter, CDialog)
|
|
//{{AFX_MSG_MAP(CDelDeadLetter)
|
|
ON_BN_CLICKED(ID_RELOAD_DL, OnReloadDl)
|
|
ON_BN_CLICKED(IDC_AUTO_REMOVAL, OnAutoRemoval)
|
|
ON_BN_CLICKED(IDC_AUTOREMOVALTEXT, OnAutoremovaltext)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CDelDeadLetter message handlers
|
|
|
|
void CDelDeadLetter::OnOK()
|
|
{
|
|
CHAR drvChar;
|
|
PEXT2_LETTER drvLetter = NULL;
|
|
UpdateData(TRUE);
|
|
|
|
drvChar = m_sDrvLetter.GetAt(0);
|
|
|
|
if ((drvChar >= '0') && (drvChar <= '9')) {
|
|
drvLetter = &drvDigits[drvChar - '0'];
|
|
}
|
|
|
|
if ((drvChar >= 'A') && (drvChar <= 'Z')) {
|
|
drvLetter = &drvLetters[drvChar - 'A'];
|
|
}
|
|
|
|
if (drvLetter) {
|
|
if (AfxMessageBox("Warning: the driver letter might be still used. Are you\r\n"
|
|
" sure that make it's a real dead driver letter ?", MB_YESNO) == IDYES) {
|
|
|
|
Ext2RemoveMountPoint(drvLetter, !m_bKeepIt);
|
|
Ext2RemoveDosSymLink(drvLetter->Letter);
|
|
UpdateDeadLetterList();
|
|
}
|
|
}
|
|
}
|
|
|
|
BOOL CDelDeadLetter::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
UpdateDeadLetterList();
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
VOID
|
|
CDelDeadLetter::UpdateDeadLetterList()
|
|
{
|
|
ULONGLONG LetterMask = -1;
|
|
DWORD i, j;
|
|
PEXT2_VOLUME volume;
|
|
PEXT2_DISK disk;
|
|
PEXT2_PARTITION part;
|
|
PEXT2_CDROM cdrom;
|
|
CString str;
|
|
|
|
CComboBox *cbList = (CComboBox *)GetDlgItem(IDC_DEAD_LETTER_LIST);
|
|
|
|
cbList->ResetContent();
|
|
|
|
for (volume = gVols; volume != NULL; volume = volume->Next) {
|
|
LetterMask &= ~(volume->DrvLetters);
|
|
}
|
|
|
|
for (i = 0; i < g_nDisks; i++) {
|
|
disk = &gDisks[i];
|
|
if (disk->DataParts == NULL) {
|
|
continue;
|
|
}
|
|
for (j=0; j < disk->NumParts; j++) {
|
|
part = &disk->DataParts[j];
|
|
if (part) {
|
|
LetterMask &= ~(part->DrvLetters);
|
|
}
|
|
}
|
|
}
|
|
|
|
for (i = 0; i < g_nCdroms; i++) {
|
|
cdrom = &gCdroms[i];
|
|
LetterMask &= ~(cdrom->DrvLetters);
|
|
}
|
|
|
|
for (i=0; i < 10; i++) {
|
|
if (drvDigits[i].bUsed && (drvDigits[i].Extent == NULL) &&
|
|
(LetterMask & (((ULONGLONG) 1) << (i + 32)) ) ) {
|
|
str.Format("%c: ", drvDigits[i].Letter);
|
|
str += drvDigits[i].SymLink;
|
|
cbList->AddString(str);
|
|
}
|
|
}
|
|
|
|
for (i=0; i <26; i++) {
|
|
if (drvLetters[i].bUsed && (drvLetters[i].Extent == NULL) &&
|
|
(LetterMask & (((ULONGLONG) 1) << i)) ) {
|
|
str.Format("%c: ", drvLetters[i].Letter);
|
|
str += drvLetters[i].SymLink;
|
|
cbList->AddString(str);
|
|
}
|
|
}
|
|
|
|
#if 0
|
|
if (cbList->GetCount() == 0) {
|
|
AfxMessageBox("No dead driver letters exist :)", MB_OK|MB_ICONINFORMATION);
|
|
EndDialog(TRUE);
|
|
}
|
|
#endif
|
|
|
|
cbList->SetCurSel(0);
|
|
}
|
|
|
|
void CDelDeadLetter::OnReloadDl()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
UpdateDeadLetterList();
|
|
}
|
|
|
|
void CDelDeadLetter::OnAutoRemoval()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
UpdateData(TRUE);
|
|
g_bAutoRemoveDeadLetters = m_bAutoRemoval;
|
|
}
|
|
|
|
void CDelDeadLetter::OnAutoremovaltext()
|
|
{
|
|
}
|