private bool HandleVistaFileOk(FileDialogNative.IFileDialog dialog) { int saveOptions = options; int saveFilterIndex = filterIndex; string[] saveFileNames = fileNames; bool saveSecurityCheckFileNames = securityCheckFileNames; bool ok = false; try { securityCheckFileNames = true; Thread.MemoryBarrier(); uint filterIndexTemp; dialog.GetFileTypeIndex(out filterIndexTemp); filterIndex = unchecked((int)filterIndexTemp); fileNames = ProcessVistaFiles(dialog); if (ProcessFileNames()) { CancelEventArgs ceevent = new CancelEventArgs(); if (NativeWindow.WndProcShouldBeDebuggable) { OnFileOk(ceevent); ok = !ceevent.Cancel; } else { try { OnFileOk(ceevent); ok = !ceevent.Cancel; } catch (Exception e) { Application.OnThreadException(e); } } } } finally { if (!ok) { //Order here is important. We don't want a window where securityCheckFileNames is false, but the temporary fileNames is still in place securityCheckFileNames = saveSecurityCheckFileNames; Thread.MemoryBarrier(); fileNames = saveFileNames; options = saveOptions; filterIndex = saveFilterIndex; } else { if (0 != (options & NativeMethods.OFN_HIDEREADONLY)) { //When the dialog is dismissed OK, the Readonly bit can't // be left on if ShowReadOnly was false // Downlevel this happens automatically, on Vista mode, we need to watch out for it. options &= ~ NativeMethods.OFN_READONLY; } } } return ok; }
private bool HandleVistaFileOk(FileDialogNative.IFileDialog dialog) { int options = this.options; int filterIndex = this.filterIndex; string[] fileNames = this.fileNames; bool securityCheckFileNames = this.securityCheckFileNames; bool flag2 = false; try { uint num3; this.securityCheckFileNames = true; Thread.MemoryBarrier(); dialog.GetFileTypeIndex(out num3); this.filterIndex = (int) num3; this.fileNames = this.ProcessVistaFiles(dialog); if (!this.ProcessFileNames()) { return flag2; } CancelEventArgs e = new CancelEventArgs(); if (NativeWindow.WndProcShouldBeDebuggable) { this.OnFileOk(e); return !e.Cancel; } try { this.OnFileOk(e); flag2 = !e.Cancel; } catch (Exception exception) { Application.OnThreadException(exception); } } finally { if (!flag2) { this.securityCheckFileNames = securityCheckFileNames; Thread.MemoryBarrier(); this.fileNames = fileNames; this.options = options; this.filterIndex = filterIndex; } else if ((this.options & 4) != 0) { this.options &= -2; } } return flag2; }