/// <summary>
	/// Displays a dialog that can be used to select a certificate from the store.
	/// </summary>
	public X509Certificate SelectCertificate(IntPtr hwnd, string title, string displayString)
	  {
	    if (store.Handle == IntPtr.Zero)
	      throw new InvalidOperationException("Store is not open");

	    if (IsWinXP())
	      {
		IntPtr certPtr = CryptUIDlgSelectCertificateFromStore(store.Handle, hwnd, title, displayString, 0/*dontUseColumn*/, 0 /*flags*/, IntPtr.Zero);
		if (certPtr != IntPtr.Zero)
		  {
		    return new X509Certificate(certPtr);
		  }
	      }
	    else
	      {
		SelectCertificateDialog dlg = new SelectCertificateDialog(store);
		if (dlg.ShowDialog() != DialogResult.OK)
		  {
		    return null;
		  }
		else
		  {
		    return dlg.Certificate;
		  }
	      }

	    return null;
	  }