DWORD WINAPI _thread_enc_iso_proc( LPVOID lparam ) { _dnode *node; dc_open_device( ); if ( (node = pv(lparam)) != NULL ) { node->dlg.rlt = ST_OK; node->dlg.rlt = dc_encrypt_cd( node->dlg.iso.s_iso_src, node->dlg.iso.s_iso_dst, node->dlg.iso.pass, node->dlg.iso.cipher_id, dc_cd_callback, lparam ); { secure_free( node->dlg.iso.pass ); SendMessage( GetParent(GetParent(node->dlg.h_page)), WM_CLOSE_DIALOG, 0, 0 ); } } //EnterCriticalSection(&crit_sect); //LeaveCriticalSection(&crit_sect); dc_close_device( ); return 1L; }
DWORD WINAPI _thread_format_proc( LPVOID lparam ) { int i = 0; int rlt, wp_mode; wchar_t device[MAX_PATH]; _dnode *node; _dact *act; dc_open_device( ); EnterCriticalSection(&crit_sect); node = pv(lparam); act = _create_act_thread(node, -1, -1); if ( !node || !act ) { return 0L; } wcscpy(device, act->device); do { if ( act->status != ACT_RUNNING ) { break; } if ( i-- == 0 ) { dc_sync_enc_state(device); i = 20; } wp_mode = act->wp_mode; LeaveCriticalSection( &crit_sect ); rlt = dc_format_step( device, wp_mode ); EnterCriticalSection( &crit_sect ); if ( rlt == ST_FINISHED ) { act->status = ACT_STOPPED; break; } if ( ( rlt != ST_OK ) && ( rlt != ST_RW_ERR ) ) { dc_status st; dc_get_device_status( device, &st ); __error_s( HWND_DESKTOP, L"Format error on volume [%s]", rlt, st.mnt_point ); act->status = ACT_STOPPED; break; } } while (1); if ( rlt == ST_FINISHED ) { _finish_formating( node ); } LeaveCriticalSection( &crit_sect ); dc_close_device( ); return 1L; }
int WINAPI wWinMain( HINSTANCE hinst, HINSTANCE hprev, LPWSTR cmd_line, int cmd_show ) { int d_st; int resl; if (dc_is_old_runned() != 0) { return ST_INCOMPATIBLE; } /* open DC driver device */ dc_open_device(); /* get DC sriver status */ d_st = dc_driver_status(); resl = ST_ERROR; do { if (wcscmp(cmd_line, L"-setup") == 0) { if (d_st == ST_ERROR) { resl = dc_install_driver(NULL); } else { resl = dc_update_boot(-1); if ( (resl != ST_OK) && (resl != ST_BLDR_NOTINST) ) { break; } resl = dc_update_driver(); } break; } if (wcscmp(cmd_line, L"-unins") == 0) { if (d_st == ST_ERROR) { resl = ST_ERROR; break; } resl = dc_remove_driver(); break; } if (wcscmp(cmd_line, L"-unldr") == 0) { resl = dc_unset_mbr(-1); break; } if (wcscmp(cmd_line, L"-isboot") == 0) { ldr_config conf; resl = dc_get_mbr_config(-1, NULL, &conf); break; } if (wcscmp(cmd_line, L"-isenc") == 0) { vol_inf info; u32 flags; wchar_t boot_dev[MAX_PATH]; int is_enc = 0; if (dc_open_device() != ST_OK) { resl = ST_ERROR; break; } if (dc_get_boot_device(boot_dev) != ST_OK) { boot_dev[0] = 0; } if (dc_first_volume(&info) == ST_OK) { do { flags = info.status.flags; if ( ((flags & F_SYSTEM) || (wcscmp(info.device, boot_dev) == 0)) && (flags & F_ENABLED) ) { is_enc = 1; } } while (dc_next_volume(&info) == ST_OK); } dc_close_device(); resl = is_enc != 0 ? ST_ENCRYPTED : ST_OK; break; } } while (0); return resl; }
static DWORD WINAPI _thread_enc_dec_proc( LPVOID lparam ) { BOOL encrypting; int i = 0; int rlt, wp_mode; wchar_t device[MAX_PATH]; _dnode *node; _dact *act; dc_open_device( ); EnterCriticalSection( &crit_sect ); node = pv(lparam); act = _create_act_thread(node, -1, -1); if ( !node || !act ) { return 0L; } wcscpy( device, act->device ); do { if ( act->status != ACT_RUNNING ) { break; } if ( i-- == 0 ) { dc_sync_enc_state( device ); i = 20; } encrypting = act->act != ACT_DECRYPT; wp_mode = act->wp_mode; LeaveCriticalSection( &crit_sect ); rlt = encrypting ? dc_enc_step(device, wp_mode) : dc_dec_step(device); EnterCriticalSection(&crit_sect); if ( rlt == ST_FINISHED ) { act->status = ACT_STOPPED; break; } if ( rlt == ST_CANCEL ) { Sleep(5000); } if ( ( rlt != ST_OK ) && ( rlt != ST_RW_ERR ) && ( rlt != ST_CANCEL ) ) { dc_status st; wchar_t *act_name; dc_get_device_status( device, &st ); switch ( act->act ) { case ACT_ENCRYPT: act_name = L"Encryption"; break; case ACT_DECRYPT: act_name = L"Decryption"; break; case ACT_REENCRYPT: act_name = L"Reencryption"; break; } __error_s( HWND_DESKTOP, L"%s error on volume [%s]", rlt, act_name, st.mnt_point ); act->status = ACT_STOPPED; break; } } while (1); dc_sync_enc_state(device); LeaveCriticalSection(&crit_sect); dc_close_device( ); return 1L; }