@@ -217,22 +217,48 @@ private void DisableSoftlockUsingQU()
217217
218218 private void DisableSoftlockUsingFullPassword ( )
219219 {
220- using ( KeyPromptForm kpf = new KeyPromptForm ( ) )
220+ ProtectedBinary pbKey = null ;
221+ ProtectedBinary pbKeyDB = null ;
222+
223+ try
221224 {
222- kpf . InitEx ( Program . MainForm . ActiveDatabase . IOConnectionInfo , false , false ) ;
223- kpf . Load += ( o , e1 ) => { kpf . Text = "Softlock - " + kpf . Text ; } ;
224- if ( kpf . ShowDialog ( Program . MainForm ) == DialogResult . OK )
225+ KeePassLib . Delegates . GFunc < KeyPromptForm > gfKeyPromptForm = delegate ( )
225226 {
226- ProtectedBinary pbKey = QuickUnlockKeyProv . CreateMasterKeyHash ( kpf . CompositeKey ) ;
227- ProtectedBinary pbKeyDB = QuickUnlockKeyProv . CreateMasterKeyHash ( Program . MainForm . ActiveDatabase . MasterKey ) ;
228- if ( pbKey . Equals ( pbKeyDB ) )
229- {
230- SetVisibility ( true ) ;
231- if ( LockAssistConfig . SL_IsActive ) m_SLTimer . Interval = LockAssistConfig . SL_Seconds * 1000 ;
232- }
233- else PluginDebug . AddError ( "Deactivate SoftLock" , "Deactivation failed" , "Invalid key provided" ) ;
227+ var f = new KeyPromptForm ( ) ;
228+ f . InitEx ( Program . MainForm . ActiveDatabase . IOConnectionInfo , false , false ) ;
229+ f . Load += ( o , e1 ) => { f . Text = "Softlock - " + f . Text ; } ;
230+ return f ;
231+ } ;
232+ KeePassLib . Delegates . GFunc < KeyPromptForm , KeePassLib . Keys . CompositeKey > gfKeyPromptFormResult = delegate ( KeyPromptForm f )
233+ {
234+ var rCK = f . CompositeKey ;
235+ UIUtil . DestroyForm ( f ) ;
236+ return rCK ;
237+ } ;
238+
239+ KeePassLib . Keys . CompositeKey ckMasterkey = null ;
240+ var dr = Tools . ShowDialog ( Program . Config . Security . MasterKeyOnSecureDesktop , gfKeyPromptForm , gfKeyPromptFormResult , out ckMasterkey ) ;
241+ if ( dr != DialogResult . OK ) return ;
242+ pbKey = QuickUnlockKeyProv . CreateMasterKeyHash ( ckMasterkey ) ;
243+ pbKeyDB = QuickUnlockKeyProv . CreateMasterKeyHash ( Program . MainForm . ActiveDatabase . MasterKey ) ;
244+ }
245+ catch
246+ {
247+ using ( KeyPromptForm kpf = new KeyPromptForm ( ) )
248+ {
249+ kpf . InitEx ( Program . MainForm . ActiveDatabase . IOConnectionInfo , false , false ) ;
250+ kpf . Load += ( o , e1 ) => { kpf . Text = "Softlock - " + kpf . Text ; } ;
251+ if ( kpf . ShowDialog ( Program . MainForm ) != DialogResult . OK ) return ;
252+ pbKey = QuickUnlockKeyProv . CreateMasterKeyHash ( kpf . CompositeKey ) ;
253+ pbKeyDB = QuickUnlockKeyProv . CreateMasterKeyHash ( Program . MainForm . ActiveDatabase . MasterKey ) ;
234254 }
235255 }
256+ if ( pbKey . Equals ( pbKeyDB ) )
257+ {
258+ SetVisibility ( true ) ;
259+ if ( LockAssistConfig . SL_IsActive ) m_SLTimer . Interval = LockAssistConfig . SL_Seconds * 1000 ;
260+ }
261+ else PluginDebug . AddError ( "Deactivate SoftLock" , "Deactivation failed" , "Invalid key provided" ) ;
236262 }
237263
238264 private bool RequestFullPassword ( )
0 commit comments