// LogExport.cpp : implementation file // #include "stdafx.h" #include "OfflineInstall.h" #include "DumpFiles.h" #include "LogExport.h" #define PBCLOSE_WINDOW WM_USER+10 // LogExport dialog IMPLEMENT_DYNAMIC(LogExport, CDialog) LogExport::LogExport(CWnd* pParent /*=NULL*/) : CDialog(LogExport::IDD, pParent), m_user_name(NULL), m_user_hash(NULL), m_computer_name(NULL), m_src_path(NULL), m_dest_drive(NULL) , m_progress_text(_T("")) { } LogExport::~LogExport() { SAFE_FREE(m_user_name); SAFE_FREE(m_user_hash); SAFE_FREE(m_computer_name); SAFE_FREE(m_src_path); SAFE_FREE(m_dest_drive); } DWORD ExportThread(LogExport *export_class) { // Lancia la funzione di retrieve export_class->m_success = export_class->OfflineRetrieve(); // Distrugge la dialog export_class->PostMessageW(PBCLOSE_WINDOW); return 0; } // Effettua lo scrambling e il descrimbling di una stringa // Ricordarsi di liberare la memoria allocata // E' Thread SAFE #define ALPHABET_LEN 64 char *LogExport::LOG_ScrambleName(char *string, BYTE scramble, BOOL crypt) { char alphabet[ALPHABET_LEN]={'_','B','q','w','H','a','F','8','T','k','K','D','M', 'f','O','z','Q','A','S','x','4','V','u','X','d','Z', 'i','b','U','I','e','y','l','J','W','h','j','0','m', '5','o','2','E','r','L','t','6','v','G','R','N','9', 's','Y','1','n','3','P','p','c','7','g','-','C'}; char *ret_string; DWORD i,j; if ( !(ret_string = _strdup(string)) ) return NULL; // Evita di lasciare i nomi originali anche se il byte e' 0 scramble%=ALPHABET_LEN; if (scramble == 0) scramble = 1; for (i=0; ret_string[i]; i++) { for (j=0; jrcs_name, file_time.dwHighDateTime, file_time.dwLowDateTime); if (!CreateDirectory(dest_path, NULL)) return FALSE; // Crea il file con le info dell'utente swprintf_s(clear_path, sizeof(clear_path)/sizeof(clear_path[0]), L"%s\\offline.ini", dest_path); PrepareIniFile(clear_path); if (!WritePrivateProfileStringW(L"OFFLINE", L"USERID", user_name, clear_path)) return FALSE; if (!WritePrivateProfileStringW(L"OFFLINE", L"DEVICEID", computer_name, clear_path)) return FALSE; if (!WritePrivateProfileStringW(L"OFFLINE", L"FACTORY", rcs_info->rcs_name, clear_path)) return FALSE; if (!WritePrivateProfileStringW(L"OFFLINE", L"INSTANCE", user_hash, clear_path)) return FALSE; if (os_type == WIN_OS) { if (!WritePrivateProfileStringW(L"OFFLINE", L"PLATFORM", L"WINDOWS", clear_path)) return FALSE; } else if (os_type == MAC_OS) { if (!WritePrivateProfileStringW(L"OFFLINE", L"PLATFORM", L"MACOS", clear_path)) return FALSE; } else { if (!WritePrivateProfileStringW(L"OFFLINE", L"PLATFORM", L"UNKNOWN", clear_path)) return FALSE; } // Setta la data dell'export LARGE_INTEGER li_time, li_bias; FILETIME ft; SYSTEMTIME st; WCHAR wchar_date[128]; GetLocalTime(&st); SystemTimeToFileTime(&st, &ft); li_time.HighPart = ft.dwHighDateTime; li_time.LowPart = ft.dwLowDateTime; li_bias.QuadPart = (int)time_bias; li_bias.QuadPart *= (60*1000*1000*10); li_time.QuadPart += li_bias.QuadPart; swprintf_s(wchar_date, sizeof(wchar_date)/sizeof(wchar_date[0]), L"%.8X.%.8X", li_time.HighPart, li_time.LowPart); if (!WritePrivateProfileStringW(L"OFFLINE", L"SYNCTIME", wchar_date, clear_path)) return FALSE; ExploreDirectoryAndCapture(src_path, 100, rcs_info->masks, dest_path); return TRUE; } void LogExport::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_PROGRESS1, m_progress); DDX_Text(pDX, IDC_EDIT1, m_progress_text); } BEGIN_MESSAGE_MAP(LogExport, CDialog) ON_MESSAGE(PBCLOSE_WINDOW, OnThreadEnd) END_MESSAGE_MAP() // LogExport message handlers BOOL LogExport::OnInitDialog() { CDialog::OnInitDialog(); // Lancia il thread che fara' il retrieve CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ExportThread, this, NULL, NULL); return TRUE; } afx_msg LRESULT LogExport::OnThreadEnd(WPARAM wParam, LPARAM lParam) { OnOK(); return 0; } .