mirror of https://github.com/dahall/Vanara.git
2055 lines
98 KiB
C#
2055 lines
98 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
using Vanara.Extensions;
|
|
using Vanara.InteropServices;
|
|
using static Vanara.PInvoke.Crypt32;
|
|
|
|
namespace Vanara.PInvoke
|
|
{
|
|
/// <summary>Methods and data types found in CryptUI.dll.</summary>
|
|
public static partial class CryptUI
|
|
{
|
|
/// <summary>
|
|
/// The <c>PFNCFILTERPROC</c> function is an application-defined callback function that filters the certificates that appear in the
|
|
/// digital signature wizard that are displayed by the CryptUIWizDigitalSign function.
|
|
/// </summary>
|
|
/// <param name="pCertContext">A pointer to a CERT_CONTEXT structure that contains the certificate to filter.</param>
|
|
/// <param name="pfInitialSelectedCert"/>
|
|
/// <param name="pvCallbackData"/>
|
|
/// <returns>
|
|
/// A Boolean value that specifies whether the certificate contained in the CERT_CONTEXT structure pointed to by the pCertContext
|
|
/// parameter should be displayed in the digital signature wizard.
|
|
/// </returns>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/nc-cryptuiapi-pfncfilterproc PFNCFILTERPROC Pfncfilterproc; BOOL
|
|
// Pfncfilterproc( PCCERT_CONTEXT pCertContext, BOOL *pfInitialSelectedCert, void *pvCallbackData ) {...}
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "ced0f35c-7e22-4d19-8352-0bfa37ff1a4b")]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
public delegate bool PFNCFILTERPROC(PCCERT_CONTEXT pCertContext, [MarshalAs(UnmanagedType.Bool)] ref bool pfInitialSelectedCert, IntPtr pvCallbackData);
|
|
|
|
/// <summary>Flags that can be combined to exclude columns of the display.</summary>
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "5774af1c-f2d4-4b1e-a20b-dfb57bf9aa37")]
|
|
[Flags]
|
|
public enum CryptUISelect
|
|
{
|
|
/// <summary>Do not display the ISSUEDTO information.</summary>
|
|
CRYPTUI_SELECT_ISSUEDTO_COLUMN = 0x000000001,
|
|
|
|
/// <summary>Do not display the ISSUEDBY information.</summary>
|
|
CRYPTUI_SELECT_ISSUEDBY_COLUMN = 0x000000002,
|
|
|
|
/// <summary>Do not display IntendedUse information.</summary>
|
|
CRYPTUI_SELECT_INTENDEDUSE_COLUMN = 0x000000004,
|
|
|
|
/// <summary>Do not display the display name information.</summary>
|
|
CRYPTUI_SELECT_FRIENDLYNAME_COLUMN = 0x000000008,
|
|
|
|
/// <summary>Do not display location information.</summary>
|
|
CRYPTUI_SELECT_LOCATION_COLUMN = 0x000000010,
|
|
|
|
/// <summary>Do not display expiration information.</summary>
|
|
CRYPTUI_SELECT_EXPIRATION_COLUMN = 0x000000020,
|
|
}
|
|
|
|
/// <summary>Flags for <see cref="CRYPTUI_VIEWCERTIFICATE_STRUCT"/>.</summary>
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "7bbd58df-3a1b-4d82-9a90-7c94260a7165")]
|
|
[Flags]
|
|
public enum CryptUIViewCertificateFlags : uint
|
|
{
|
|
/// <summary>The Certification Path page is disabled.</summary>
|
|
CRYPTUI_HIDE_HIERARCHYPAGE = 0x00000001,
|
|
|
|
/// <summary>The Details page is disabled.</summary>
|
|
CRYPTUI_HIDE_DETAILPAGE = 0x00000002,
|
|
|
|
/// <summary>The user is not allowed to change the properties.</summary>
|
|
CRYPTUI_DISABLE_EDITPROPERTIES = 0x00000004,
|
|
|
|
/// <summary>The user is allowed to change the properties.</summary>
|
|
CRYPTUI_ENABLE_EDITPROPERTIES = 0x00000008,
|
|
|
|
/// <summary>The Install button is disabled.</summary>
|
|
CRYPTUI_DISABLE_ADDTOSTORE = 0x00000010,
|
|
|
|
/// <summary>The Install button is enabled.</summary>
|
|
CRYPTUI_ENABLE_ADDTOSTORE = 0x00000020,
|
|
|
|
/// <summary>The pages or buttons that allow the user to accept or decline any decision are disabled.</summary>
|
|
CRYPTUI_ACCEPT_DECLINE_STYLE = 0x00000040,
|
|
|
|
/// <summary>An untrusted root error is ignored.</summary>
|
|
CRYPTUI_IGNORE_UNTRUSTED_ROOT = 0x00000080,
|
|
|
|
/// <summary>Known trusted stores will not be used to build the chain.</summary>
|
|
CRYPTUI_DONT_OPEN_STORES = 0x00000100,
|
|
|
|
/// <summary>A known trusted root store will not be used to build the chain.</summary>
|
|
CRYPTUI_ONLY_OPEN_ROOT_STORE = 0x00000200,
|
|
|
|
/// <summary>
|
|
/// Use only when viewing certificates on remote computers. If this flag is used, the first element of rghStores must be the
|
|
/// handle of the root store on the remote computer.
|
|
/// </summary>
|
|
CRYPTUI_WARN_UNTRUSTED_ROOT = 0x00000400,
|
|
|
|
/// <summary>
|
|
/// Enable revocation checking with default behavior. The default behavior is to enable revocation checking of the entire
|
|
/// certificate chain except the root certificate. Valid only if neither the pCryptProviderData nor the hWVTStateData union
|
|
/// member is passed in.
|
|
/// </summary>
|
|
CRYPTUI_ENABLE_REVOCATION_CHECKING = 0x00000800,
|
|
|
|
/// <summary>
|
|
/// When building a certificate chain for a remote computer, warn that the chain may not be trusted on the remote computer.
|
|
/// </summary>
|
|
CRYPTUI_WARN_REMOTE_TRUST = 0x00001000,
|
|
|
|
/// <summary>If this flag is set, the Copy to file button will be disabled on the Detail page.</summary>
|
|
CRYPTUI_DISABLE_EXPORT = 0x00002000,
|
|
|
|
/// <summary>
|
|
/// Enable revocation checking only on the leaf certificate in the certificate chain. Valid only if neither the
|
|
/// pCryptProviderData nor the hWVTStateData union member is passed in.
|
|
/// </summary>
|
|
CRYPTUI_ENABLE_REVOCATION_CHECK_END_CERT = 0x00004000,
|
|
|
|
/// <summary>
|
|
/// Enable revocation checking on each certificate in the certificate chain. Valid only if neither the pCryptProviderData nor
|
|
/// the hWVTStateData union member is passed in. Note Because root certificates rarely contain information that allows
|
|
/// revocation checking, it is expected that use of this option will usually result in failure of the CryptUIDlgViewCertificate
|
|
/// function. The recommended option is to use CRYPTUI_ENABLE_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT.
|
|
/// </summary>
|
|
CRYPTUI_ENABLE_REVOCATION_CHECK_CHAIN = 0x00008000,
|
|
|
|
/// <summary>
|
|
/// Enable revocation checking on each certificate in the certificate chain except for the root certificate. This is the
|
|
/// recommended option to use for certificate revocation checking. Valid only if neither the pCryptProviderData nor the
|
|
/// hWVTStateData union member is passed in. Note This flag is equivalent to CRYPTUI_ENABLE_REVOCATION_CHECKING.
|
|
/// </summary>
|
|
CRYPTUI_ENABLE_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT = CRYPTUI_ENABLE_REVOCATION_CHECKING,
|
|
|
|
/// <summary>Disable the HTML Help button (?) in the Certificate dialog box.</summary>
|
|
CRYPTUI_DISABLE_HTMLLINK = 0x00010000,
|
|
|
|
/// <summary>Disable the Issuer Statement button on the General tab of the Certificate dialog box.</summary>
|
|
CRYPTUI_DISABLE_ISSUERSTATEMENT = 0x00020000,
|
|
|
|
/// <summary>
|
|
/// Disable online revocation checking. Set this flag to ensure that the CryptUIDlgViewCertificate function uses the local cache
|
|
/// to retrieve the certificate and does not attempt to retrieve the certificate from the network. Windows Server 2008, Windows
|
|
/// Vista, Windows Server 2003 and Windows XP: This flag is not supported.
|
|
/// </summary>
|
|
CRYPTUI_CACHE_ONLY_URL_RETRIEVAL = 0x00040000,
|
|
}
|
|
|
|
/// <summary>A value that indicates whether additional certificates will be included in the signature.</summary>
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "22d0bc45-0f66-4f5f-87d3-0849c4327eed")]
|
|
public enum CryptUIWizAddChoice
|
|
{
|
|
/// <summary>No additional certificates will be included in the signature.</summary>
|
|
CRYPTUI_WIZ_DIGITAL_SIGN_ADD_NONE = 0x0,
|
|
|
|
/// <summary>The entire certificate chain will be included in the signature.</summary>
|
|
CRYPTUI_WIZ_DIGITAL_SIGN_ADD_CHAIN = 0x00000001,
|
|
|
|
/// <summary>All certificates in the certificate chain except the root will be included in the signature.</summary>
|
|
CRYPTUI_WIZ_DIGITAL_SIGN_ADD_CHAIN_NO_ROOT = 0x00000002,
|
|
}
|
|
|
|
/// <summary>Indicates the type of the subject to export.</summary>
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "3c509bb6-d391-4b59-809c-23466c8196ea")]
|
|
public enum CryptUIWizExportType
|
|
{
|
|
/// <summary>Export the certificate context that is specified in the pCertContext member.</summary>
|
|
CRYPTUI_WIZ_EXPORT_CERT_CONTEXT = 1,
|
|
|
|
/// <summary>Export the certificate trust list (CTL) context that is specified in the pCTLContext member.</summary>
|
|
CRYPTUI_WIZ_EXPORT_CTL_CONTEXT = 2,
|
|
|
|
/// <summary>Export the certificate revocation list (CRL) context that is specified in the pCRLContext member.</summary>
|
|
CRYPTUI_WIZ_EXPORT_CRL_CONTEXT = 3,
|
|
|
|
/// <summary>Export the certificate store that is specified in the hCertStore member.</summary>
|
|
CRYPTUI_WIZ_EXPORT_CERT_STORE = 4,
|
|
|
|
/// <summary>Export only the certificates from the certificate store that is specified in the hCertStore member.</summary>
|
|
CRYPTUI_WIZ_EXPORT_CERT_STORE_CERTIFICATES_ONLY = 5,
|
|
|
|
/// <summary/>
|
|
CRYPTUI_WIZ_EXPORT_FORMAT_CRL = 6,
|
|
|
|
/// <summary/>
|
|
CRYPTUI_WIZ_EXPORT_FORMAT_CTL = 7,
|
|
}
|
|
|
|
/// <summary>Contains flags that modify the behavior of <see cref="CryptUIWizDigitalSign"/>.</summary>
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "1d01523e-d47b-49be-82c8-5e98f97be800")]
|
|
[Flags]
|
|
public enum CryptUIWizFlags : uint
|
|
{
|
|
/// <summary>
|
|
/// This function will sign the document based on the information in the CRYPTUI_WIZ_DIGITAL_SIGN_INFO structure pointed to by
|
|
/// the pDigitalSignInfo parameter without displaying any user interface. If this flag is not specified, this function will
|
|
/// display a wizard to guide the user through the signing process.
|
|
/// </summary>
|
|
CRYPTUI_WIZ_NO_UI = 0x0001,
|
|
|
|
/// <summary>
|
|
/// Suppress all user interfaces generated by cryptographic service providers (CSPs). This option can be overridden by the
|
|
/// CRYPTUI_WIZ_NO_UI_EXCEPT_CSP option.
|
|
/// </summary>
|
|
CRYPTUI_WIZ_IGNORE_NO_UI_FLAG_FOR_CSPS = 0x0002,
|
|
|
|
/// <summary>
|
|
/// Suppress all user interfaces except those generated by CSPs. This option overrides the
|
|
/// CRYPTUI_WIZ_IGNORE_NO_UI_FLAG_FOR_CSPS option.
|
|
/// </summary>
|
|
CRYPTUI_WIZ_NO_UI_EXCEPT_CSP = 0x0003,
|
|
|
|
/// <summary>Skip the Export Private Key page and assume that the private key is to be exported.</summary>
|
|
CRYPTUI_WIZ_EXPORT_PRIVATE_KEY = 0x0100,
|
|
|
|
/// <summary>Disable the Delete the private key check box in the Export File Format page.</summary>
|
|
CRYPTUI_WIZ_EXPORT_NO_DELETE_PRIVATE_KEY = 0x0200,
|
|
|
|
/// <summary>Allow certificates to be imported.</summary>
|
|
CRYPTUI_WIZ_IMPORT_ALLOW_CERT = 0x00020000,
|
|
|
|
/// <summary>Allow CRLs to be imported.</summary>
|
|
CRYPTUI_WIZ_IMPORT_ALLOW_CRL = 0x00040000,
|
|
|
|
/// <summary>Allow CTLs to be imported.</summary>
|
|
CRYPTUI_WIZ_IMPORT_ALLOW_CTL = 0x00080000,
|
|
|
|
/// <summary>Do not allow the user to change the destination certificate store represented by the hDestCertStore parameter.</summary>
|
|
CRYPTUI_WIZ_IMPORT_NO_CHANGE_DEST_STORE = 0x00010000,
|
|
|
|
/// <summary>
|
|
/// Import the object to the certificate store for the local computer. This applies only to Personal Information Exchange (PFX) imports.
|
|
/// </summary>
|
|
CRYPTUI_WIZ_IMPORT_TO_LOCALMACHINE = 0x00100000,
|
|
|
|
/// <summary>Import the object to the certificate store for the current user. This applies only to PFX imports.</summary>
|
|
CRYPTUI_WIZ_IMPORT_TO_CURRENTUSER = 0x00200000,
|
|
|
|
/// <summary>
|
|
/// Import the object to a remote certificate store. Set this flag if the hDestCertStore parameter represents a remote
|
|
/// certificate store.
|
|
/// </summary>
|
|
CRYPTUI_WIZ_IMPORT_REMOTE_DEST_STORE = 0x00400000,
|
|
}
|
|
|
|
/// <summary>Indicates the type of subject to import.</summary>
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "17d932e3-05ea-4ed0-9f88-fbb674b6b070")]
|
|
public enum CryptUIWizImportType
|
|
{
|
|
/// <summary>Import the certificate stored in the file referenced in the pwszFileName member.</summary>
|
|
CRYPTUI_WIZ_IMPORT_SUBJECT_FILE = 1,
|
|
|
|
/// <summary>Import the certificate referenced in the pCertContext member.</summary>
|
|
CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_CONTEXT = 2,
|
|
|
|
/// <summary>Import the CTL referenced in the pCTLContext member.</summary>
|
|
CRYPTUI_WIZ_IMPORT_SUBJECT_CTL_CONTEXT = 3,
|
|
|
|
/// <summary>Import the CRL referenced in the pCRLContext member.</summary>
|
|
CRYPTUI_WIZ_IMPORT_SUBJECT_CRL_CONTEXT = 4,
|
|
|
|
/// <summary>Import the certificate store referenced in the hCertStore member.</summary>
|
|
CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_STORE = 5,
|
|
}
|
|
|
|
/// <summary>Specifies the type of entity that contains the certificates.</summary>
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "0316ed0b-d4e5-4102-9ab0-637e96c7d9f5")]
|
|
[Flags]
|
|
public enum CryptUIWizPVKChoice
|
|
{
|
|
/// <summary>The entity is a PVK file.</summary>
|
|
CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE = 0x01,
|
|
|
|
/// <summary>The entity is a PVK provider.</summary>
|
|
CRYPTUI_WIZ_DIGITAL_SIGN_PVK_PROV = 0x02,
|
|
}
|
|
|
|
/// <summary>A value that specifies the location of the certificate that is used to sign the entity.</summary>
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "22d0bc45-0f66-4f5f-87d3-0849c4327eed")]
|
|
public enum CryptUIWizSignLoc
|
|
{
|
|
/// <summary>The certificates in the My store are used.</summary>
|
|
CRYPTUI_WIZ_DIGITAL_SIGN_USE_MY_STORE = 0x0,
|
|
|
|
/// <summary>The certificate is contained in the CERT_CONTEXT structure pointed to by the pSigningCertContext member.</summary>
|
|
CRYPTUI_WIZ_DIGITAL_SIGN_CERT = 0x01,
|
|
|
|
/// <summary>
|
|
/// The certificate is contained in the certificate store contained in the CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO structure pointed
|
|
/// to by the pSigningCertStore member.
|
|
/// </summary>
|
|
CRYPTUI_WIZ_DIGITAL_SIGN_STORE = 0x02,
|
|
|
|
/// <summary>
|
|
/// The certificate is contained in the PVK file contained in the CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO structure pointed to by
|
|
/// the pSigningCertPvkInfo member.
|
|
/// </summary>
|
|
CRYPTUI_WIZ_DIGITAL_SIGN_PVK = 0x03,
|
|
}
|
|
|
|
/// <summary>A value that indicates the type of the signature.</summary>
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "e061aac4-8c9f-4282-a8f8-bc0c5a10e566")]
|
|
[Flags]
|
|
public enum CryptUIWizSigType
|
|
{
|
|
/// <summary>The signature is a commercial signature.</summary>
|
|
CRYPTUI_WIZ_DIGITAL_SIGN_COMMERCIAL = 0x01,
|
|
|
|
/// <summary>The signature is a personal signature.</summary>
|
|
CRYPTUI_WIZ_DIGITAL_SIGN_INDIVIDUAL = 0x02,
|
|
}
|
|
|
|
/// <summary>A value that indicates the entity that is to be signed.</summary>
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "22d0bc45-0f66-4f5f-87d3-0849c4327eed")]
|
|
public enum CryptUIWizToSign
|
|
{
|
|
/// <summary>The user will be prompted for a file to sign.</summary>
|
|
CRYPTUI_WIZ_DIGITAL_SIGN_SUBJECT_PROMPT = 0,
|
|
|
|
/// <summary>The memory BLOB specified by the pSignBlobInfo member is to be signed.</summary>
|
|
CRYPTUI_WIZ_DIGITAL_SIGN_SUBJECT_FILE = 0x01,
|
|
|
|
/// <summary>The file specified by the pwszFileName member is to be signed.</summary>
|
|
CRYPTUI_WIZ_DIGITAL_SIGN_SUBJECT_BLOB = 0x02,
|
|
}
|
|
|
|
/// <summary>
|
|
/// The <c>CertSelectionGetSerializedBlob</c> function is a helper function used to retrieve a serialized certificate BLOB from a
|
|
/// CERT_SELECTUI_INPUT structure.
|
|
/// </summary>
|
|
/// <param name="pcsi">
|
|
/// A pointer to a CERT_SELECTUI_INPUT structure that contains the certificate store and certificate context chain information.
|
|
/// </param>
|
|
/// <param name="ppOutBuffer">The address of a pointer to a buffer that receives the serialized certificates BLOB.</param>
|
|
/// <param name="pulOutBufferSize">
|
|
/// A pointer to a <c>ULONG</c> to receive the size, in bytes, of the BLOB received in the buffer pointed to by the ppOutBuffer parameter.
|
|
/// </param>
|
|
/// <returns>
|
|
/// <para>If the function succeeds, the function returns <c>S_OK</c>.</para>
|
|
/// <para>
|
|
/// If the function fails, it returns an <c>HRESULT</c> value that indicates the error. If both <c>hStore</c> and <c>prgpChain</c>
|
|
/// parameters are not <c>NULL</c>, return <c>E_INVALIDARG</c>. For a list of common error codes, see Common HRESULT Values.
|
|
/// </para>
|
|
/// </returns>
|
|
/// <remarks>
|
|
/// <para>
|
|
/// The returned serialized BLOB is passed to the CredUIPromptForWindowsCredentials function in the pvInAuthBuffer parameter to
|
|
/// allow a user to select a certificate by using the credential selection UI.
|
|
/// </para>
|
|
/// <para>
|
|
/// The certificates that are serialized in the BLOB returned in the buffer pointed to by the ppOutBuffer parameter of this function
|
|
/// are dependent on the values of the <c>hStore</c> and <c>prgpChain</c> members of the CERT_SELECTUI_INPUT structure.
|
|
/// </para>
|
|
/// <list type="table">
|
|
/// <listheader>
|
|
/// <term>hStore</term>
|
|
/// <term>prgpChain</term>
|
|
/// <term>Certificates serialized</term>
|
|
/// </listheader>
|
|
/// <item>
|
|
/// <term>NULL</term>
|
|
/// <term>not NULL</term>
|
|
/// <term>The certificates pointed to by the prgpChain member are serialized.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>not NULL</term>
|
|
/// <term>NULL</term>
|
|
/// <term>The certificates specified by the hStore member are serialized.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>NULL</term>
|
|
/// <term>NULL</term>
|
|
/// <term>An empty BLOB is returned.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>not NULL</term>
|
|
/// <term>not NULL</term>
|
|
/// <term>The call fails and the function returns E_INVALIDARG.</term>
|
|
/// </item>
|
|
/// </list>
|
|
/// </remarks>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/nf-cryptuiapi-certselectiongetserializedblob HRESULT
|
|
// CertSelectionGetSerializedBlob( PCERT_SELECTUI_INPUT pcsi, void **ppOutBuffer, ULONG *pulOutBufferSize );
|
|
[DllImport(Lib.CryptUI, SetLastError = false, ExactSpelling = true)]
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "6c3240f7-5121-401d-a4d4-df3055cb301a")]
|
|
public static extern HRESULT CertSelectionGetSerializedBlob(in CERT_SELECTUI_INPUT pcsi, out IntPtr ppOutBuffer, out uint pulOutBufferSize);
|
|
|
|
/// <summary>The <c>CryptUIDlgCertMgr</c> function displays a dialog box that allows the user to manage certificates.</summary>
|
|
/// <param name="pCryptUICertMgr">
|
|
/// A pointer to a CRYPTUI_CERT_MGR_STRUCT structure that contains information about how to create the dialog box.
|
|
/// </param>
|
|
/// <returns>The return value is <c>TRUE</c> if the function succeeds; otherwise, <c>FALSE.</c></returns>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/nf-cryptuiapi-cryptuidlgcertmgr BOOL CryptUIDlgCertMgr(
|
|
// PCCRYPTUI_CERT_MGR_STRUCT pCryptUICertMgr );
|
|
[DllImport(Lib.CryptUI, SetLastError = false, ExactSpelling = true)]
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "8d94694e-1724-42aa-99bb-6ed2c6d3bc0e")]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
public static extern bool CryptUIDlgCertMgr(in CRYPTUI_CERT_MGR_STRUCT pCryptUICertMgr);
|
|
|
|
/// <summary>
|
|
/// The <c>CryptUIDlgSelectCertificateFromStore</c> function displays a dialog box that allows the selection of a certificate from a
|
|
/// specified store.
|
|
/// </summary>
|
|
/// <param name="hCertStore">Handle of the certificate store to be searched.</param>
|
|
/// <param name="hwnd">Handle of the window for the display. If <c>NULL</c>, defaults to the desktop window.</param>
|
|
/// <param name="pwszTitle">
|
|
/// String used as the title of the dialog box. If <c>NULL</c>, the default title, "Select Certificate," is used.
|
|
/// </param>
|
|
/// <param name="pwszDisplayString">
|
|
/// Text statement in the selection dialog box. If <c>NULL</c>, the default phrase, "Select a certificate you want to use," is used.
|
|
/// </param>
|
|
/// <param name="dwDontUseColumn">
|
|
/// <para>Flags that can be combined to exclude columns of the display.</para>
|
|
/// <list type="table">
|
|
/// <listheader>
|
|
/// <term>Value</term>
|
|
/// <term>Meaning</term>
|
|
/// </listheader>
|
|
/// <item>
|
|
/// <term>CRYPTUI_SELECT_ISSUEDTO_COLUMN</term>
|
|
/// <term>Do not display the ISSUEDTO information.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_SELECT_ISSUEDBY_COLUMN</term>
|
|
/// <term>Do not display the ISSUEDBY information.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_SELECT_INTENDEDUSE_COLUMN</term>
|
|
/// <term>Do not display IntendedUse information.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_SELECT_FRIENDLYNAME_COLUMN</term>
|
|
/// <term>Do not display the display name information.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_SELECT_LOCATION_COLUMN</term>
|
|
/// <term>Do not display location information.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_SELECT_EXPIRATION_COLUMN</term>
|
|
/// <term>Do not display expiration information.</term>
|
|
/// </item>
|
|
/// </list>
|
|
/// </param>
|
|
/// <param name="dwFlags">Currently not used and should be set to 0.</param>
|
|
/// <param name="pvReserved">Reserved for future use.</param>
|
|
/// <returns>
|
|
/// Returns a pointer to the selected certificate context. If no certificate was selected, <c>NULL</c> is returned. When you have
|
|
/// finished using the certificate, free the certificate context by calling the CertFreeCertificateContext function.
|
|
/// </returns>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/nf-cryptuiapi-cryptuidlgselectcertificatefromstore PCCERT_CONTEXT
|
|
// CryptUIDlgSelectCertificateFromStore( HCERTSTORE hCertStore, HWND hwnd, LPCWSTR pwszTitle, LPCWSTR pwszDisplayString, DWORD
|
|
// dwDontUseColumn, DWORD dwFlags, void *pvReserved );
|
|
[DllImport(Lib.CryptUI, SetLastError = false, ExactSpelling = true)]
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "5774af1c-f2d4-4b1e-a20b-dfb57bf9aa37")]
|
|
public static extern SafePCCERT_CONTEXT CryptUIDlgSelectCertificateFromStore([In] HCERTSTORE hCertStore, [In, Optional] HWND hwnd, [Optional, MarshalAs(UnmanagedType.LPWStr)] string pwszTitle,
|
|
[Optional, MarshalAs(UnmanagedType.LPWStr)] string pwszDisplayString, CryptUISelect dwDontUseColumn, uint dwFlags = 0, IntPtr pvReserved = default);
|
|
|
|
/// <summary>The <c>CryptUIDlgViewCertificate</c> function presents a dialog box that displays a specified certificate.</summary>
|
|
/// <param name="pCertViewInfo">
|
|
/// A pointer to a CRYPTUI_VIEWCERTIFICATE_STRUCT structure that contains information about the certificate to view.
|
|
/// </param>
|
|
/// <param name="pfPropertiesChanged">Indicates whether any certificate properties were modified by the caller.</param>
|
|
/// <returns>
|
|
/// <para>If the function succeeds, the return value is nonzero ( <c>TRUE</c>).</para>
|
|
/// <para>
|
|
/// If the function fails, the return value is zero ( <c>FALSE</c>). For extended error information, call the GetLastError function.
|
|
/// </para>
|
|
/// </returns>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/nf-cryptuiapi-cryptuidlgviewcertificatea BOOL
|
|
// CryptUIDlgViewCertificateA( PCCRYPTUI_VIEWCERTIFICATE_STRUCTA pCertViewInfo, BOOL *pfPropertiesChanged );
|
|
[DllImport(Lib.CryptUI, SetLastError = true, CharSet = CharSet.Auto)]
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "5107ff22-78c4-4005-80af-ff45781da6c7")]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
public static extern bool CryptUIDlgViewCertificate(in CRYPTUI_VIEWCERTIFICATE_STRUCT pCertViewInfo, [MarshalAs(UnmanagedType.Bool)] out bool pfPropertiesChanged);
|
|
|
|
/// <summary>The <c>CryptUIDlgViewContext</c> function displays a certificate, CTL, or CRL context.</summary>
|
|
/// <param name="dwContextType">
|
|
/// <para>
|
|
/// <c>DWORD</c> indicating whether pvContext is a pointer to a certificate, a CRL, or a CTL context as indicated in the following table.
|
|
/// </para>
|
|
/// <list type="table">
|
|
/// <listheader>
|
|
/// <term>Value</term>
|
|
/// <term>Meaning</term>
|
|
/// </listheader>
|
|
/// <item>
|
|
/// <term>CERT_STORE_CERTIFICATE_CONTEXT</term>
|
|
/// <term>PCCERT_CONTEXT</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CERT_STORE_CRL_CONTEXT</term>
|
|
/// <term>PCCRL_CONTEXT</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CERT_STORE_CTL_CONTEXT</term>
|
|
/// <term>PCCTL_CONTEXT</term>
|
|
/// </item>
|
|
/// </list>
|
|
/// </param>
|
|
/// <param name="pvContext">A pointer to a certificate, CRL, or CTL context to be displayed.</param>
|
|
/// <param name="hwnd">Handle of the window for the display. If <c>NULL</c>, the display defaults to the desktop window.</param>
|
|
/// <param name="pwszTitle">Display title string. If <c>NULL</c>, the default context type is used as the title.</param>
|
|
/// <param name="dwFlags">Currently not used and should be set to 0.</param>
|
|
/// <param name="pvReserved">Reserved for future use.</param>
|
|
/// <returns>This function returns <c>TRUE</c> on success and <c>FALSE</c> on failure.</returns>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/nf-cryptuiapi-cryptuidlgviewcontext BOOL CryptUIDlgViewContext(
|
|
// DWORD dwContextType, const void *pvContext, HWND hwnd, LPCWSTR pwszTitle, DWORD dwFlags, void *pvReserved );
|
|
[DllImport(Lib.CryptUI, SetLastError = false, ExactSpelling = true)]
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "d4b8f01b-7c3e-4286-bc37-d5ec4a1e1c2f")]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
public static extern bool CryptUIDlgViewContext(CertStoreContextType dwContextType, [In] IntPtr pvContext, [In, Optional] HWND hwnd,
|
|
[Optional, MarshalAs(UnmanagedType.LPWStr)] string pwszTitle, uint dwFlags = 0, IntPtr pvReserved = default);
|
|
|
|
/// <summary>
|
|
/// <para>
|
|
/// [The <c>CryptUIWizDigitalSign</c> function is available for use in the operating systems specified in the Requirements section.
|
|
/// It may be altered or unavailable in subsequent versions.]
|
|
/// </para>
|
|
/// <para>
|
|
/// The <c>CryptUIWizDigitalSign</c> function digitally signs a document or BLOB. The document or BLOB can be signed with or without
|
|
/// user interaction.
|
|
/// </para>
|
|
/// </summary>
|
|
/// <param name="dwFlags">
|
|
/// <para>Contains flags that modify the behavior of the function. This can be zero or the following value.</para>
|
|
/// <list type="table">
|
|
/// <listheader>
|
|
/// <term>Value</term>
|
|
/// <term>Meaning</term>
|
|
/// </listheader>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_NO_UI 0x0001</term>
|
|
/// <term>
|
|
/// This function will sign the document based on the information in the CRYPTUI_WIZ_DIGITAL_SIGN_INFO structure pointed to by the
|
|
/// pDigitalSignInfo parameter without displaying any user interface. If this flag is not specified, this function will display a
|
|
/// wizard to guide the user through the signing process.
|
|
/// </term>
|
|
/// </item>
|
|
/// </list>
|
|
/// </param>
|
|
/// <param name="hwndParent">
|
|
/// The handle of the window to use as the parent of the dialog box that this function creates. This parameter is ignored if the
|
|
/// <c>CRYPTUI_WIZ_NO_UI</c> flag is set in dwFlags.
|
|
/// </param>
|
|
/// <param name="pwszWizardTitle">
|
|
/// A pointer to a null-terminated Unicode string that contains the title to use in the dialog box that this function creates. This
|
|
/// parameter is ignored if the <c>CRYPT_WIZ_NO_UI</c> flag is set in dwFlags. If this parameter is <c>NULL</c>, a default title is used.
|
|
/// </param>
|
|
/// <param name="pDigitalSignInfo">
|
|
/// A pointer to a CRYPTUI_WIZ_DIGITAL_SIGN_INFO structure that contains information about the signing process.
|
|
/// </param>
|
|
/// <param name="ppSignContext">
|
|
/// A pointer to a CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT structure pointer that receives the signed BLOB. When you have finished using
|
|
/// this structure, you must free the memory by passing this pointer to the CryptUIWizFreeDigitalSignContext function. This
|
|
/// parameter can be <c>NULL</c> if the signed BLOB is not needed.
|
|
/// </param>
|
|
/// <returns>
|
|
/// <para>If the function succeeds, the function returns nonzero.</para>
|
|
/// <para>If the function fails, it returns zero.</para>
|
|
/// </returns>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/nf-cryptuiapi-cryptuiwizdigitalsign BOOL CryptUIWizDigitalSign(
|
|
// DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_DIGITAL_SIGN_INFO pDigitalSignInfo,
|
|
// PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT *ppSignContext );
|
|
[DllImport(Lib.CryptUI, SetLastError = false, ExactSpelling = true)]
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "1d01523e-d47b-49be-82c8-5e98f97be800")]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
public static extern bool CryptUIWizDigitalSign(CryptUIWizFlags dwFlags, [In, Optional] HWND hwndParent, [Optional, MarshalAs(UnmanagedType.LPWStr)] string pwszWizardTitle,
|
|
in CRYPTUI_WIZ_DIGITAL_SIGN_INFO pDigitalSignInfo, out SafePCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT ppSignContext);
|
|
|
|
/// <summary>
|
|
/// The <c>CryptUIWizExport</c> function exports a certificate, a certificate trust list (CTL), a certificate revocation list (CRL),
|
|
/// or a certificate store to a file. The export can be performed with or without user interaction.
|
|
/// </summary>
|
|
/// <param name="dwFlags">
|
|
/// <para>
|
|
/// Contains flags that modify the behavior of the function. This can be zero or a combination of one or more of the following values.
|
|
/// </para>
|
|
/// <para>
|
|
/// <c>Note</c> Except for <c>CRYPTUI_WIZ_NO_UI</c>, none of the following constants are defined in a published header file. To use
|
|
/// these constants, you must define them by using the specified values.
|
|
/// </para>
|
|
/// <list type="table">
|
|
/// <listheader>
|
|
/// <term>Value</term>
|
|
/// <term>Meaning</term>
|
|
/// </listheader>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_NO_UI 0x0001</term>
|
|
/// <term>
|
|
/// This function will perform the export based on the information in the CRYPTUI_WIZ_EXPORT_INFO structure pointed to by
|
|
/// pExportInfo without displaying any user interface. If this flag is not specified, this function will display a wizard to guide
|
|
/// the user through the export process.
|
|
/// </term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IGNORE_NO_UI_FLAG_FOR_CSPS 0x0002</term>
|
|
/// <term>
|
|
/// Suppress all user interfaces generated by cryptographic service providers (CSPs). This option can be overridden by the
|
|
/// CRYPTUI_WIZ_NO_UI_EXCEPT_CSP option.
|
|
/// </term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_NO_UI_EXCEPT_CSP 0x0003</term>
|
|
/// <term>
|
|
/// Suppress all user interfaces except those generated by CSPs. This option overrides the CRYPTUI_WIZ_IGNORE_NO_UI_FLAG_FOR_CSPS option.
|
|
/// </term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_EXPORT_PRIVATE_KEY 0x0100</term>
|
|
/// <term>Skip the Export Private Key page and assume that the private key is to be exported.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_EXPORT_NO_DELETE_PRIVATE_KEY 0x0200</term>
|
|
/// <term>Disable the Delete the private key check box in the Export File Format page.</term>
|
|
/// </item>
|
|
/// </list>
|
|
/// </param>
|
|
/// <param name="hwndParent">
|
|
/// The handle of the window to use as the parent of the dialog box that this function creates. This parameter is ignored if the
|
|
/// <c>CRYPT_WIZ_NO_UI</c> flag is set in dwFlags.
|
|
/// </param>
|
|
/// <param name="pwszWizardTitle">
|
|
/// A pointer to a null-terminated Unicode string that contains the title to use in the dialog box that this function creates. This
|
|
/// parameter is ignored if the <c>CRYPT_WIZ_NO_UI</c> flag is set in dwFlags.
|
|
/// </param>
|
|
/// <param name="pExportInfo">
|
|
/// A pointer to a CRYPTUI_WIZ_EXPORT_INFO structure that contains information about producing the export wizard.
|
|
/// </param>
|
|
/// <param name="pvoid">
|
|
/// <para>
|
|
/// If the <c>dwSubjectChoice</c> member of the CRYPTUI_WIZ_EXPORT_INFO structure that pExportInfo references is
|
|
/// <c>CRYPTUI_WIZ_EXPORT_CERT_CONTEXT</c>, and if the <c>CRYPTUI_WIZ_NO_UI</c> flag is set in dwFlags, this parameter is a pointer
|
|
/// to a CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO structure.
|
|
/// </para>
|
|
/// <para>
|
|
/// If the <c>CRYPTUI_WIZ_NO_UI</c> flag is not set in dwFlags, this parameter is optional and can be <c>NULL</c>. If this parameter
|
|
/// is not <c>NULL</c>, the CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO structure contains the values that are displayed to the user as the
|
|
/// default choices.
|
|
/// </para>
|
|
/// </param>
|
|
/// <returns>
|
|
/// <para>If the function succeeds, the function returns nonzero.</para>
|
|
/// <para>If the function fails, it returns zero. For extended error information, call the GetLastError function.</para>
|
|
/// </returns>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/nf-cryptuiapi-cryptuiwizexport BOOL CryptUIWizExport( DWORD
|
|
// dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, void *pvoid );
|
|
[DllImport(Lib.CryptUI, SetLastError = true, ExactSpelling = true)]
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "62537d51-c761-4180-b857-58c819ea66aa")]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
public static extern bool CryptUIWizExport(CryptUIWizFlags dwFlags, [In, Optional] HWND hwndParent, [Optional, MarshalAs(UnmanagedType.LPWStr)] string pwszWizardTitle,
|
|
in CRYPTUI_WIZ_EXPORT_INFO pExportInfo, [In, Optional] IntPtr pvoid);
|
|
|
|
/// <summary>
|
|
/// The <c>CryptUIWizFreeDigitalSignContext</c> function frees the CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT structure allocated by the
|
|
/// CryptUIWizDigitalSign function.
|
|
/// </summary>
|
|
/// <param name="pSignContext">A pointer to the CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT structure to be freed.</param>
|
|
/// <returns>
|
|
/// <para>If the function succeeds, the function returns nonzero.</para>
|
|
/// <para>If the function fails, it returns zero.</para>
|
|
/// </returns>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/nf-cryptuiapi-cryptuiwizfreedigitalsigncontext BOOL
|
|
// CryptUIWizFreeDigitalSignContext( PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT pSignContext );
|
|
[DllImport(Lib.CryptUI, SetLastError = false, ExactSpelling = true)]
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "039615ee-0485-4698-944f-23359253767a")]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
public static extern bool CryptUIWizFreeDigitalSignContext(PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT pSignContext);
|
|
|
|
/// <summary>
|
|
/// The function imports a certificate, a certificate trust list (CTL), a certificate revocation list (CRL), or a certificate store
|
|
/// to a certificate store. The import can be performed with or without user interaction.
|
|
/// </summary>
|
|
/// <param name="dwFlags">
|
|
/// <para>
|
|
/// Contains flags that modify the behavior of the function. This can be zero or a combination of one or more of the following values.
|
|
/// </para>
|
|
/// <para>
|
|
/// <c>Note</c> Except for <c>CRYPTUI_WIZ_NO_UI</c>, none of the following constants are defined in a published header file. To use
|
|
/// these constants, you must define them by using the specified values.
|
|
/// </para>
|
|
/// <list type="table">
|
|
/// <listheader>
|
|
/// <term>Value</term>
|
|
/// <term>Meaning</term>
|
|
/// </listheader>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_NO_UI 0x0001</term>
|
|
/// <term>
|
|
/// This function will perform the import based on the information in the CRYPTUI_WIZ_IMPORT_SRC_INFO structure pointed to by
|
|
/// pImportSrc into the store specified by hDestCertStore without displaying any user interface. If this flag is not specified, this
|
|
/// function will display a wizard to guide the user through the import process. Beginning with Windows 8 and Windows Server 2012,
|
|
/// if you set this flag and are importing a certificate from a PFX BLOB that was protected to an Active Directory (AD) principal,
|
|
/// and the current user, as part of that principal, has permission to decrypt the password embedded in the PFX packet, the
|
|
/// importation will succeed without requiring that a password be set in the CRYPTUI_WIZ_IMPORT_SRC_INFO structure. For more
|
|
/// information about protecting PFX to an AD principal, see the pvPara parameter and the PKCS12_PROTECT_TO_DOMAIN_SIDS flag of the
|
|
/// PFXExportCertStoreEx function.
|
|
/// </term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IGNORE_NO_UI_FLAG_FOR_CSPS 0x0002</term>
|
|
/// <term>
|
|
/// Suppress all user interfaces generated by cryptographic service providers (CSPs). This option can be overridden by the
|
|
/// CRYPTUI_WIZ_NO_UI_EXCEPT_CSP option.
|
|
/// </term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_NO_UI_EXCEPT_CSP 0x0003</term>
|
|
/// <term>
|
|
/// Suppress all user interfaces except those generated by CSPs. This option overrides the CRYPTUI_WIZ_IGNORE_NO_UI_FLAG_FOR_CSPS option.
|
|
/// </term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_ALLOW_CERT 0x00020000</term>
|
|
/// <term>Allow certificates to be imported.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_ALLOW_CRL 0x00040000</term>
|
|
/// <term>Allow CRLs to be imported.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_ALLOW_CTL 0x00080000</term>
|
|
/// <term>Allow CTLs to be imported.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_NO_CHANGE_DEST_STORE 0x00010000</term>
|
|
/// <term>Do not allow the user to change the destination certificate store represented by the hDestCertStore parameter.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_TO_LOCALMACHINE 0x00100000</term>
|
|
/// <term>
|
|
/// Import the object to the certificate store for the local computer. This applies only to Personal Information Exchange (PFX) imports.
|
|
/// </term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_TO_CURRENTUSER 0x00200000</term>
|
|
/// <term>Import the object to the certificate store for the current user. This applies only to PFX imports.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_REMOTE_DEST_STORE 0x00400000</term>
|
|
/// <term>
|
|
/// Import the object to a remote certificate store. Set this flag if the hDestCertStore parameter represents a remote certificate store.
|
|
/// </term>
|
|
/// </item>
|
|
/// </list>
|
|
/// </param>
|
|
/// <param name="hwndParent">
|
|
/// The handle of the window to use as the parent of the dialog box that this function creates. This parameter is ignored if the
|
|
/// <c>CRYPTUI_WIZ_NO_UI</c> flag is set in dwFlags.
|
|
/// </param>
|
|
/// <param name="pwszWizardTitle">
|
|
/// A pointer to a null-terminated Unicode string that contains the title to use in the dialog box that this function creates. This
|
|
/// parameter is ignored if the <c>CRYPTUI_WIZ_NO_UI</c> flag is set in dwFlags.
|
|
/// </param>
|
|
/// <param name="pImportSrc">
|
|
/// A pointer to a CRYPTUI_WIZ_IMPORT_SRC_INFO structure that contains information about the object to import. This parameter is
|
|
/// required if <c>CRYPTUI_WIZ_NO_UI</c> is set in dwFlags and is optional otherwise.
|
|
/// </param>
|
|
/// <param name="hDestCertStore">
|
|
/// A handle to the certificate store to import to. If this parameter is <c>NULL</c> and the <c>CRYPTUI_WIZ_NO_UI</c> flag is not
|
|
/// set in dwFlags, the wizard will prompt the user to select a certificate store.
|
|
/// </param>
|
|
/// <returns>
|
|
/// <para>If the function succeeds, the function returns nonzero.</para>
|
|
/// <para>If the function fails, it returns zero. For extended error information, call the GetLastError function.</para>
|
|
/// </returns>
|
|
/// <remarks>
|
|
/// <para>If none of following three flags are set in dwFlags, import of any type of content is allowed:</para>
|
|
/// <list type="bullet">
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_ALLOW_CERT</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_ALLOW_CRL</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_ALLOW_CTL</term>
|
|
/// </item>
|
|
/// </list>
|
|
/// <para>
|
|
/// The <c>CRYPTUI_WIZ_IMPORT_TO_LOCALMACHINE</c> and <c>CRYPTUI_WIZ_IMPORT_TO_CURRENTUSER</c> flags are used to force the content
|
|
/// of a PFX BLOB into either the local machine store or the current user store. If neither of these flags are set and
|
|
/// hDestCertStore is <c>NULL</c>:
|
|
/// </para>
|
|
/// <list type="bullet">
|
|
/// <item>
|
|
/// <term>The private key in the PFX BLOB will be forced to be imported into the current user store.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>
|
|
/// And if <c>CRYPTUI_WIZ_NO_UI</c> is not set, the wizard prompts the user to select a certificate store from among the current
|
|
/// user certificate stores.
|
|
/// </term>
|
|
/// </item>
|
|
/// </list>
|
|
/// </remarks>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/nf-cryptuiapi-cryptuiwizimport BOOL CryptUIWizImport( DWORD
|
|
// dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc, HCERTSTORE hDestCertStore );
|
|
[DllImport(Lib.CryptUI, SetLastError = true, ExactSpelling = true)]
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "6b2b9c89-229a-4626-a8b4-fe2b7cc0af86")]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
public static extern bool CryptUIWizImport(CryptUIWizFlags dwFlags, [In, Optional] HWND hwndParent, [Optional, MarshalAs(UnmanagedType.LPWStr)] string pwszWizardTitle,
|
|
in CRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc, [In, Optional] HCERTSTORE hDestCertStore);
|
|
|
|
/// <summary>
|
|
/// The function imports a certificate, a certificate trust list (CTL), a certificate revocation list (CRL), or a certificate store
|
|
/// to a certificate store. The import can be performed with or without user interaction.
|
|
/// </summary>
|
|
/// <param name="dwFlags">
|
|
/// <para>
|
|
/// Contains flags that modify the behavior of the function. This can be zero or a combination of one or more of the following values.
|
|
/// </para>
|
|
/// <para>
|
|
/// <c>Note</c> Except for <c>CRYPTUI_WIZ_NO_UI</c>, none of the following constants are defined in a published header file. To use
|
|
/// these constants, you must define them by using the specified values.
|
|
/// </para>
|
|
/// <list type="table">
|
|
/// <listheader>
|
|
/// <term>Value</term>
|
|
/// <term>Meaning</term>
|
|
/// </listheader>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_NO_UI 0x0001</term>
|
|
/// <term>
|
|
/// This function will perform the import based on the information in the CRYPTUI_WIZ_IMPORT_SRC_INFO structure pointed to by
|
|
/// pImportSrc into the store specified by hDestCertStore without displaying any user interface. If this flag is not specified, this
|
|
/// function will display a wizard to guide the user through the import process. Beginning with Windows 8 and Windows Server 2012,
|
|
/// if you set this flag and are importing a certificate from a PFX BLOB that was protected to an Active Directory (AD) principal,
|
|
/// and the current user, as part of that principal, has permission to decrypt the password embedded in the PFX packet, the
|
|
/// importation will succeed without requiring that a password be set in the CRYPTUI_WIZ_IMPORT_SRC_INFO structure. For more
|
|
/// information about protecting PFX to an AD principal, see the pvPara parameter and the PKCS12_PROTECT_TO_DOMAIN_SIDS flag of the
|
|
/// PFXExportCertStoreEx function.
|
|
/// </term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IGNORE_NO_UI_FLAG_FOR_CSPS 0x0002</term>
|
|
/// <term>
|
|
/// Suppress all user interfaces generated by cryptographic service providers (CSPs). This option can be overridden by the
|
|
/// CRYPTUI_WIZ_NO_UI_EXCEPT_CSP option.
|
|
/// </term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_NO_UI_EXCEPT_CSP 0x0003</term>
|
|
/// <term>
|
|
/// Suppress all user interfaces except those generated by CSPs. This option overrides the CRYPTUI_WIZ_IGNORE_NO_UI_FLAG_FOR_CSPS option.
|
|
/// </term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_ALLOW_CERT 0x00020000</term>
|
|
/// <term>Allow certificates to be imported.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_ALLOW_CRL 0x00040000</term>
|
|
/// <term>Allow CRLs to be imported.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_ALLOW_CTL 0x00080000</term>
|
|
/// <term>Allow CTLs to be imported.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_NO_CHANGE_DEST_STORE 0x00010000</term>
|
|
/// <term>Do not allow the user to change the destination certificate store represented by the hDestCertStore parameter.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_TO_LOCALMACHINE 0x00100000</term>
|
|
/// <term>
|
|
/// Import the object to the certificate store for the local computer. This applies only to Personal Information Exchange (PFX) imports.
|
|
/// </term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_TO_CURRENTUSER 0x00200000</term>
|
|
/// <term>Import the object to the certificate store for the current user. This applies only to PFX imports.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_REMOTE_DEST_STORE 0x00400000</term>
|
|
/// <term>
|
|
/// Import the object to a remote certificate store. Set this flag if the hDestCertStore parameter represents a remote certificate store.
|
|
/// </term>
|
|
/// </item>
|
|
/// </list>
|
|
/// </param>
|
|
/// <param name="hwndParent">
|
|
/// The handle of the window to use as the parent of the dialog box that this function creates. This parameter is ignored if the
|
|
/// <c>CRYPTUI_WIZ_NO_UI</c> flag is set in dwFlags.
|
|
/// </param>
|
|
/// <param name="pwszWizardTitle">
|
|
/// A pointer to a null-terminated Unicode string that contains the title to use in the dialog box that this function creates. This
|
|
/// parameter is ignored if the <c>CRYPTUI_WIZ_NO_UI</c> flag is set in dwFlags.
|
|
/// </param>
|
|
/// <param name="pImportSrc">
|
|
/// A pointer to a CRYPTUI_WIZ_IMPORT_SRC_INFO structure that contains information about the object to import. This parameter is
|
|
/// required if <c>CRYPTUI_WIZ_NO_UI</c> is set in dwFlags and is optional otherwise.
|
|
/// </param>
|
|
/// <param name="hDestCertStore">
|
|
/// A handle to the certificate store to import to. If this parameter is <c>NULL</c> and the <c>CRYPTUI_WIZ_NO_UI</c> flag is not
|
|
/// set in dwFlags, the wizard will prompt the user to select a certificate store.
|
|
/// </param>
|
|
/// <returns>
|
|
/// <para>If the function succeeds, the function returns nonzero.</para>
|
|
/// <para>If the function fails, it returns zero. For extended error information, call the GetLastError function.</para>
|
|
/// </returns>
|
|
/// <remarks>
|
|
/// <para>If none of following three flags are set in dwFlags, import of any type of content is allowed:</para>
|
|
/// <list type="bullet">
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_ALLOW_CERT</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_ALLOW_CRL</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_ALLOW_CTL</term>
|
|
/// </item>
|
|
/// </list>
|
|
/// <para>
|
|
/// The <c>CRYPTUI_WIZ_IMPORT_TO_LOCALMACHINE</c> and <c>CRYPTUI_WIZ_IMPORT_TO_CURRENTUSER</c> flags are used to force the content
|
|
/// of a PFX BLOB into either the local machine store or the current user store. If neither of these flags are set and
|
|
/// hDestCertStore is <c>NULL</c>:
|
|
/// </para>
|
|
/// <list type="bullet">
|
|
/// <item>
|
|
/// <term>The private key in the PFX BLOB will be forced to be imported into the current user store.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>
|
|
/// And if <c>CRYPTUI_WIZ_NO_UI</c> is not set, the wizard prompts the user to select a certificate store from among the current
|
|
/// user certificate stores.
|
|
/// </term>
|
|
/// </item>
|
|
/// </list>
|
|
/// </remarks>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/nf-cryptuiapi-cryptuiwizimport BOOL CryptUIWizImport( DWORD
|
|
// dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc, HCERTSTORE hDestCertStore );
|
|
[DllImport(Lib.CryptUI, SetLastError = true, ExactSpelling = true)]
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "6b2b9c89-229a-4626-a8b4-fe2b7cc0af86")]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
public static extern bool CryptUIWizImport(CryptUIWizFlags dwFlags, [In, Optional] HWND hwndParent, [Optional, MarshalAs(UnmanagedType.LPWStr)] string pwszWizardTitle,
|
|
[In, Optional] IntPtr pImportSrc, [In, Optional] HCERTSTORE hDestCertStore);
|
|
|
|
/// <summary>
|
|
/// The <c>CERT_SELECTUI_INPUT</c> structure is used by the CertSelectionGetSerializedBlob function to serialize the certificates
|
|
/// contained in a store or an array of certificate chains. The returned serialized BLOB can be passed to the
|
|
/// CredUIPromptForWindowsCredentials function.
|
|
/// </summary>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/ns-cryptuiapi-cert_selectui_input typedef struct { HCERTSTORE
|
|
// hStore; PCCERT_CHAIN_CONTEXT *prgpChain; DWORD cChain; } CERT_SELECTUI_INPUT, *PCERT_SELECTUI_INPUT;
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "8953cddd-86b6-4781-8dca-b5fd3d298bc8")]
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct CERT_SELECTUI_INPUT
|
|
{
|
|
/// <summary>
|
|
/// The handle of a certificate store created by the caller. The store contains the set of application preselected certificates.
|
|
/// </summary>
|
|
public HCERTSTORE hStore;
|
|
|
|
/// <summary>
|
|
/// An array of pointers to CERT_CHAIN_CONTEXT structures. Applications provision this array by preselecting certificate chains
|
|
/// using the CertSelectCertificateChains function.
|
|
/// </summary>
|
|
public IntPtr prgpChain;
|
|
|
|
/// <summary>The number of CERT_CHAIN_CONTEXT structures that are in the array pointed to by the <c>prgpChain</c> member.</summary>
|
|
public uint cChain;
|
|
|
|
/// <summary>Gets the array of pointers to CERT_CHAIN_CONTEXT structures.</summary>
|
|
public PCCERT_CHAIN_CONTEXT[] GetChain() => prgpChain.ToArray<PCCERT_CHAIN_CONTEXT>((int)cChain);
|
|
}
|
|
|
|
/// <summary>The <c>CRYPTUI_CERT_MGR_STRUCT</c> structure contains information about a certificate manager dialog box.</summary>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/ns-cryptuiapi-cryptui_cert_mgr_struct typedef struct
|
|
// _CRYPTUI_CERT_MGR_STRUCT { DWORD dwSize; HWND hwndParent; DWORD dwFlags; LPCWSTR pwszTitle; LPCSTR pszInitUsageOID; }
|
|
// CRYPTUI_CERT_MGR_STRUCT, *PCRYPTUI_CERT_MGR_STRUCT;
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "e6c24d16-0ae2-443c-8971-2d7da3aae963")]
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct CRYPTUI_CERT_MGR_STRUCT
|
|
{
|
|
/// <summary>The size, in bytes, of the structure. This value must be set to .</summary>
|
|
public uint dwSize;
|
|
|
|
/// <summary>Handle of the parent window of the dialog box.</summary>
|
|
public HWND hwndParent;
|
|
|
|
/// <summary>Reserved. This value must be set to zero.</summary>
|
|
public uint dwFlags;
|
|
|
|
/// <summary>Title of the dialog box.</summary>
|
|
[MarshalAs(UnmanagedType.LPWStr)] public string pwszTitle;
|
|
|
|
/// <summary>
|
|
/// Enhanced key usage object identifier (OID) of the certificates that will initially appear in the dialog box. The default
|
|
/// value is <c>NULL</c>, which displays all certificates.
|
|
/// </summary>
|
|
public StrPtrAnsi pszInitUsageOID;
|
|
}
|
|
|
|
/// <summary>
|
|
/// The <c>CRYPTUI_INITDIALOG_STRUCT</c> structure supports the CRYPTUI_VIEWCERTIFICATE_STRUCT structure. It is passed as the lParam
|
|
/// in the WM_INITDIALOG call to each property sheet that is in the <c>rgPropSheetPages</c> array of the
|
|
/// CRYPTUI_VIEWCERTIFICATE_STRUCT structure. The <c>CRYPTUI_VIEWCERTIFICATE_STRUCT</c> structure is used in the
|
|
/// CryptUIDlgViewCertificate function.
|
|
/// </summary>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/ns-cryptuiapi-cryptui_initdialog_struct typedef struct
|
|
// tagCRYPTUI_INITDIALOG_STRUCT { LPARAM lParam; PCCERT_CONTEXT pCertContext; } CRYPTUI_INITDIALOG_STRUCT, *PCRYPTUI_INITDIALOG_STRUCT;
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "c6335c02-3b3e-45e2-bb58-b7213aea500b")]
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct CRYPTUI_INITDIALOG_STRUCT
|
|
{
|
|
/// <summary>The <c>lParam</c> in the PROPSHEETPAGE structure.</summary>
|
|
public IntPtr lParam;
|
|
|
|
/// <summary>A pointer to the CERT_CONTEXT structure for the certificate that CryptUIDlgViewCertificate is displaying.</summary>
|
|
public PCCERT_CONTEXT pCertContext;
|
|
}
|
|
|
|
/// <summary>
|
|
/// The <c>CRYPTUI_VIEWCERTIFICATE_STRUCT</c> structure contains information about a certificate to view. This structure is used in
|
|
/// the CryptUIDlgViewCertificate function.
|
|
/// </summary>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/ns-cryptuiapi-cryptui_viewcertificate_structa typedef struct
|
|
// tagCRYPTUI_VIEWCERTIFICATE_STRUCTA { DWORD dwSize; HWND hwndParent; DWORD dwFlags; LPCSTR szTitle; PCCERT_CONTEXT pCertContext;
|
|
// LPCSTR *rgszPurposes; DWORD cPurposes; union { CRYPT_PROVIDER_DATA const *pCryptProviderData; HANDLE hWVTStateData; }; BOOL
|
|
// fpCryptProviderDataTrustedUsage; DWORD idxSigner; DWORD idxCert; BOOL fCounterSigner; DWORD idxCounterSigner; DWORD cStores;
|
|
// HCERTSTORE *rghStores; DWORD cPropSheetPages; LPCPROPSHEETPAGEA rgPropSheetPages; DWORD nStartPage; }
|
|
// CRYPTUI_VIEWCERTIFICATE_STRUCTA, *PCRYPTUI_VIEWCERTIFICATE_STRUCTA;
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "7bbd58df-3a1b-4d82-9a90-7c94260a7165")]
|
|
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
|
|
public struct CRYPTUI_VIEWCERTIFICATE_STRUCT
|
|
{
|
|
/// <summary>The size, in bytes, of the <c>CRYPTUI_VIEWCERTIFICATE_STRUCT</c> structure.</summary>
|
|
public uint dwSize;
|
|
|
|
/// <summary>A handle to the window that is the parent of the dialog box produced by CryptUIDlgViewCertificate.</summary>
|
|
public HWND hwndParent;
|
|
|
|
/// <summary>
|
|
/// <para>This member can be one or more of the following values.</para>
|
|
/// <list type="table">
|
|
/// <listheader>
|
|
/// <term>Value</term>
|
|
/// <term>Meaning</term>
|
|
/// </listheader>
|
|
/// <item>
|
|
/// <term>CRYPTUI_HIDE_HIERARCHYPAGE</term>
|
|
/// <term>The Certification Path page is disabled.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_HIDE_DETAILPAGE</term>
|
|
/// <term>The Details page is disabled.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_DISABLE_EDITPROPERTIES</term>
|
|
/// <term>The user is not allowed to change the properties.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_ENABLE_EDITPROPERTIES</term>
|
|
/// <term>The user is allowed to change the properties.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_DISABLE_ADDTOSTORE</term>
|
|
/// <term>The Install button is disabled.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_ENABLE_ADDTOSTORE</term>
|
|
/// <term>The Install button is enabled.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_ACCEPT_DECLINE_STYLE</term>
|
|
/// <term>The pages or buttons that allow the user to accept or decline any decision are disabled.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_IGNORE_UNTRUSTED_ROOT</term>
|
|
/// <term>An untrusted root error is ignored.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_DONT_OPEN_STORES</term>
|
|
/// <term>Known trusted stores will not be used to build the chain.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_ONLY_OPEN_ROOT_STORE</term>
|
|
/// <term>A known trusted root store will not be used to build the chain.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WARN_UNTRUSTED_ROOT</term>
|
|
/// <term>
|
|
/// Use only when viewing certificates on remote computers. If this flag is used, the first element of rghStores must be the
|
|
/// handle of the root store on the remote computer.
|
|
/// </term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_ENABLE_REVOCATION_CHECKING</term>
|
|
/// <term>
|
|
/// Enable revocation checking with default behavior. The default behavior is to enable revocation checking of the entire
|
|
/// certificate chain except the root certificate. Valid only if neither the pCryptProviderData nor the hWVTStateData union
|
|
/// member is passed in.
|
|
/// </term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WARN_REMOTE_TRUST</term>
|
|
/// <term>When building a certificate chain for a remote computer, warn that the chain may not be trusted on the remote computer.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_DISABLE_EXPORT</term>
|
|
/// <term>If this flag is set, the Copy to file button will be disabled on the Detail page.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_ENABLE_REVOCATION_CHECK_END_CERT</term>
|
|
/// <term>
|
|
/// Enable revocation checking only on the leaf certificate in the certificate chain. Valid only if neither the
|
|
/// pCryptProviderData nor the hWVTStateData union member is passed in.
|
|
/// </term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_ENABLE_REVOCATION_CHECK_CHAIN</term>
|
|
/// <term>
|
|
/// Enable revocation checking on each certificate in the certificate chain. Valid only if neither the pCryptProviderData nor
|
|
/// the hWVTStateData union member is passed in. Note Because root certificates rarely contain information that allows
|
|
/// revocation checking, it is expected that use of this option will usually result in failure of the CryptUIDlgViewCertificate
|
|
/// function. The recommended option is to use CRYPTUI_ENABLE_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT.
|
|
/// </term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_ENABLE_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT</term>
|
|
/// <term>
|
|
/// Enable revocation checking on each certificate in the certificate chain except for the root certificate. This is the
|
|
/// recommended option to use for certificate revocation checking. Valid only if neither the pCryptProviderData nor the
|
|
/// hWVTStateData union member is passed in. Note This flag is equivalent to CRYPTUI_ENABLE_REVOCATION_CHECKING.
|
|
/// </term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_DISABLE_HTMLLINK</term>
|
|
/// <term>Disable the HTML Help button (?) in the Certificate dialog box.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_DISABLE_ISSUERSTATEMENT</term>
|
|
/// <term>Disable the Issuer Statement button on the General tab of the Certificate dialog box.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_CACHE_ONLY_URL_RETRIEVAL</term>
|
|
/// <term>
|
|
/// Disable online revocation checking. Set this flag to ensure that the CryptUIDlgViewCertificate function uses the local cache
|
|
/// to retrieve the certificate and does not attempt to retrieve the certificate from the network. Windows Server 2008, Windows
|
|
/// Vista, Windows Server 2003 and Windows XP: This flag is not supported.
|
|
/// </term>
|
|
/// </item>
|
|
/// </list>
|
|
/// </summary>
|
|
public CryptUIViewCertificateFlags dwFlags;
|
|
|
|
/// <summary>A pointer to a null-terminated string that contains the title for the window.</summary>
|
|
[MarshalAs(UnmanagedType.LPTStr)] public string szTitle;
|
|
|
|
/// <summary>A pointer to the CERT_CONTEXT structure that contains the certificate context to display.</summary>
|
|
public PCCERT_CONTEXT pCertContext;
|
|
|
|
/// <summary>
|
|
/// An array of pointers to null-terminated strings that contain the purposes for which this certificate will be validated.
|
|
/// </summary>
|
|
public IntPtr rgszPurposes;
|
|
|
|
/// <summary>The number of purposes in the <c>rgszPurposes</c> array.</summary>
|
|
public uint cPurposes;
|
|
|
|
/// <summary>
|
|
/// If the WinVerifyTrust function has already been called for the certificate and the WTHelperProvDataFromStateData function
|
|
/// was also called, pass in a pointer to the state structure that was acquired from the call to
|
|
/// <c>WTHelperProvDataFromStateData</c>. If <c>pCryptProviderData</c> is set, <c>fpCryptProviderDataTrustedUsage</c>,
|
|
/// <c>idxSigner</c>, <c>idxCert</c>, and <c>fCounterSignature</c> must also be set.
|
|
/// <para>OR</para>
|
|
/// <para>
|
|
/// If WinVerifyTrust has already been called for the certificate and WTHelperProvDataFromStateData was not called, pass in the
|
|
/// <c>hWVTStateData</c> member of the WINTRUST_DATA structure. If <c>hWVTStateData</c> is set,
|
|
/// <c>fpCryptProviderDataTrustedUsage</c>, <c>idxSigner</c>, <c>idxCert</c>, and <c>fCounterSignature</c> must also be set.
|
|
/// </para>
|
|
/// </summary>
|
|
public IntPtr pData;
|
|
|
|
/// <summary>If WinVerifyTrust was called, this is the result of whether the certificate was trusted.</summary>
|
|
[MarshalAs(UnmanagedType.Bool)] public bool fpCryptProviderDataTrustedUsage;
|
|
|
|
/// <summary>The index of the signer to view.</summary>
|
|
public uint idxSigner;
|
|
|
|
/// <summary>
|
|
/// The index of the certificate that is being viewed within the signer chain. The certificate context of this cert must match <c>pCertContext</c>.
|
|
/// </summary>
|
|
public uint idxCert;
|
|
|
|
/// <summary><c>TRUE</c> if a countersignature is being viewed. If this is <c>TRUE</c>, <c>idxCounterSigner</c> must be valid.</summary>
|
|
[MarshalAs(UnmanagedType.Bool)] public bool fCounterSigner;
|
|
|
|
/// <summary>The index of the countersigner to view.</summary>
|
|
public uint idxCounterSigner;
|
|
|
|
/// <summary>
|
|
/// The number of other stores in the <c>rghStores</c> array of certificate stores to search when building and validating the
|
|
/// certificate chain.
|
|
/// </summary>
|
|
public uint cStores;
|
|
|
|
/// <summary>
|
|
/// An array of <c>HCERTSTORE</c> handles to other certificate stores to search when building and validating the certificate chain.
|
|
/// </summary>
|
|
public IntPtr rghStores;
|
|
|
|
/// <summary>The number of property pages to add to the dialog box.</summary>
|
|
public uint cPropSheetPages;
|
|
|
|
/// <summary>
|
|
/// An array of property pages to add to the dialog box. Each page in this array will not receive the <c>lParam</c> in the
|
|
/// PROPSHEETPAGE structure as the <c>lParam</c> in the WM_INITDIALOG message. It will instead receive a pointer to a
|
|
/// CRYPTUI_INITDIALOG_STRUCT structure. It contains the <c>lParam</c> in <c>PROPSHEETPAGE</c> and the pointer to the
|
|
/// CERT_CONTEXT for which the page is being displayed.
|
|
/// </summary>
|
|
public IntPtr rgPropSheetPages;
|
|
|
|
/// <summary>
|
|
/// The index of the initial page that will be displayed. If the highest bit (0x8000) is set, the index is assumed to index
|
|
/// <c>rgPropSheetPages</c> (after the highest bit has been stripped off, for example, 0x8000 will indicate the first page in
|
|
/// <c>rgPropSheetPages</c>). If the highest bit is zero, <c>nStartPage</c> will be the starting index of the default
|
|
/// certificate dialog box property pages.
|
|
/// </summary>
|
|
public uint nStartPage;
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>
|
|
/// [The <c>CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO</c> structure is available for use in the operating systems specified in the
|
|
/// Requirements section. It may be altered or unavailable in subsequent versions.]
|
|
/// </para>
|
|
/// <para>
|
|
/// The <c>CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO</c> structure contains information about the public key BLOB used by the
|
|
/// CryptUIWizDigitalSign function.
|
|
/// </para>
|
|
/// </summary>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/ns-cryptuiapi-cryptui_wiz_digital_sign_blob_info typedef struct
|
|
// _CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO { DWORD dwSize; GUID *pGuidSubject; DWORD cbBlob; BYTE *pbBlob; LPCWSTR pwszDisplayName; }
|
|
// CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO, *PCRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO;
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "9750f52a-f605-4f43-98e1-0f0ea947a214")]
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO
|
|
{
|
|
/// <summary>The size, in bytes, of the structure.</summary>
|
|
public uint dwSize;
|
|
|
|
/// <summary>
|
|
/// A pointer to a <c>GUID</c> that contains the GUID that identifies the Session Initiation Protocol (SIP) functions to load.
|
|
/// </summary>
|
|
public IntPtr pGuidSubject;
|
|
|
|
/// <summary>The size, in bytes, of the BLOB pointed to by the <c>pbBlob</c> member.</summary>
|
|
public uint cbBlob;
|
|
|
|
/// <summary>A pointer to the BLOB to sign.</summary>
|
|
public IntPtr pbBlob;
|
|
|
|
/// <summary>A pointer to a null-terminated Unicode string that contains the display name of the BLOB to sign.</summary>
|
|
[MarshalAs(UnmanagedType.LPWStr)] public string pwszDisplayName;
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>
|
|
/// [The <c>CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO</c> structure is available for use in the operating systems specified in the
|
|
/// Requirements section. It may be altered or unavailable in subsequent versions.]
|
|
/// </para>
|
|
/// <para>
|
|
/// The <c>CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO</c> structure contains information about the PVK file that contains the
|
|
/// certificates used by the CryptUIWizDigitalSign function.
|
|
/// </para>
|
|
/// </summary>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/ns-cryptuiapi-cryptui_wiz_digital_sign_cert_pvk_info typedef struct
|
|
// _CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO { DWORD dwSize; LPWSTR pwszSigningCertFileName; DWORD dwPvkChoice; union {
|
|
// PCCRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO pPvkFileInfo; PCRYPT_KEY_PROV_INFO pPvkProvInfo; }; }
|
|
// CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO, *PCRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO;
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "0316ed0b-d4e5-4102-9ab0-637e96c7d9f5")]
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO
|
|
{
|
|
/// <summary>The size, in bytes, of the structure.</summary>
|
|
public uint dwSize;
|
|
|
|
/// <summary>
|
|
/// A pointer to a null-terminated Unicode string that contains the path and file named of the file that contains the signing certificates.
|
|
/// </summary>
|
|
[MarshalAs(UnmanagedType.LPWStr)] public string pwszSigningCertFileName;
|
|
|
|
/// <summary>
|
|
/// <para>Specifies the type of entity that contains the certificates. This can be one of the following values.</para>
|
|
/// <list type="table">
|
|
/// <listheader>
|
|
/// <term>Value</term>
|
|
/// <term>Meaning</term>
|
|
/// </listheader>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE</term>
|
|
/// <term>The entity is a PVK file.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_DIGITAL_SIGN_PVK_PROV</term>
|
|
/// <term>The entity is a PVK provider.</term>
|
|
/// </item>
|
|
/// </list>
|
|
/// </summary>
|
|
public uint dwPvkChoice;
|
|
|
|
/// <summary>
|
|
/// A pointer to a CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO structure that contains the PVK file that contains the certificates.
|
|
/// This member is used if <c>CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE</c> is specified for the <c>dwPvkChoice</c> member.
|
|
/// <para>OR</para>
|
|
/// <para>
|
|
/// A pointer to a CRYPT_KEY_PROV_INFO structure that contains information about the PVK provider that contains the
|
|
/// certificates. This member is used if <c>CRYPTUI_WIZ_DIGITAL_SIGN_PVK_PROV</c> is specified for the <c>dwPvkChoice</c> member.
|
|
/// </para>
|
|
/// </summary>
|
|
public IntPtr pPvkInfo;
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>
|
|
/// [The <c>CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT</c> structure is available for use in the operating systems specified in the
|
|
/// Requirements section. It may be altered or unavailable in subsequent versions.]
|
|
/// </para>
|
|
/// <para>
|
|
/// The <c>CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT</c> structure is used with the CryptUIWizDigitalSign function to contain information
|
|
/// about a BLOB.
|
|
/// </para>
|
|
/// </summary>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/ns-cryptuiapi-cryptui_wiz_digital_sign_context typedef struct
|
|
// _CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT { DWORD dwSize; DWORD cbBlob; BYTE *pbBlob; } CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT, *PCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT;
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "3e4eb745-0c28-4ce5-870b-d24565ef0cae")]
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT
|
|
{
|
|
/// <summary>The size, in bytes, of the structure.</summary>
|
|
public uint dwSize;
|
|
|
|
/// <summary>The size, in bytes, of the BLOB pointed to by the <c>pbBlob</c> member.</summary>
|
|
public uint cbBlob;
|
|
|
|
/// <summary>A pointer to the signed BLOB.</summary>
|
|
public IntPtr pbBlob;
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>
|
|
/// [The <c>CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO</c> structure is available for use in the operating systems specified in the
|
|
/// Requirements section. It may be altered or unavailable in subsequent versions.]
|
|
/// </para>
|
|
/// <para>
|
|
/// The <c>CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO</c> structure is used with the CRYPTUI_WIZ_DIGITAL_SIGN_INFO structure to contain
|
|
/// extended information about a signature.
|
|
/// </para>
|
|
/// </summary>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/ns-cryptuiapi-cryptui_wiz_digital_sign_extended_info typedef struct
|
|
// _CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO { DWORD dwSize; DWORD dwAttrFlags; LPCWSTR pwszDescription; LPCWSTR pwszMoreInfoLocation;
|
|
// LPCSTR pszHashAlg; LPCWSTR pwszSigningCertDisplayString; HCERTSTORE hAdditionalCertStore; PCRYPT_ATTRIBUTES psAuthenticated;
|
|
// PCRYPT_ATTRIBUTES psUnauthenticated; } CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO, *PCRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO;
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "e061aac4-8c9f-4282-a8f8-bc0c5a10e566")]
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO
|
|
{
|
|
/// <summary>The size, in bytes, of the structure.</summary>
|
|
public uint dwSize;
|
|
|
|
/// <summary>
|
|
/// <para>A value that indicates the type of the signature. This can be one of the following values.</para>
|
|
/// <list type="table">
|
|
/// <listheader>
|
|
/// <term>Value</term>
|
|
/// <term>Meaning</term>
|
|
/// </listheader>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_DIGITAL_SIGN_COMMERCIAL</term>
|
|
/// <term>The signature is a commercial signature.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_DIGITAL_SIGN_INDIVIDUAL</term>
|
|
/// <term>The signature is a personal signature.</term>
|
|
/// </item>
|
|
/// </list>
|
|
/// </summary>
|
|
public CryptUIWizSigType dwAttrFlags;
|
|
|
|
/// <summary>A pointer to a null-terminated Unicode string that contains the description of the subject of the signature.</summary>
|
|
[MarshalAs(UnmanagedType.LPWStr)] public string pwszDescription;
|
|
|
|
/// <summary>
|
|
/// A pointer to a null-terminated Unicode string that contains the location from which to get more information about the file.
|
|
/// This information will be displayed when the file is downloaded.
|
|
/// </summary>
|
|
[MarshalAs(UnmanagedType.LPWStr)] public string pwszMoreInfoLocation;
|
|
|
|
/// <summary>
|
|
/// A pointer to a null-terminated ANSI string that contains the object identifier (OID) of the hash algorithm used for the
|
|
/// signature. The default value is <c>NULL</c>, which indicates that the SHA-1 hash algorithm is used.
|
|
/// </summary>
|
|
public StrPtrAnsi pszHashAlg;
|
|
|
|
/// <summary>
|
|
/// A pointer to a null-terminated Unicode string that contains the string displayed on the digital signature wizard page. The
|
|
/// string should prompt the user to select a certificate for a specific purpose.
|
|
/// </summary>
|
|
[MarshalAs(UnmanagedType.LPWStr)] public string pwszSigningCertDisplayString;
|
|
|
|
/// <summary>A handle to an additional certificate store that will be added to the signature.</summary>
|
|
public HCERTSTORE hAdditionalCertStore;
|
|
|
|
/// <summary>A pointer to a CRYPT_ATTRIBUTES structure that contains authenticated attributes supplied by the user.</summary>
|
|
public IntPtr psAuthenticated;
|
|
|
|
/// <summary>A pointer to a CRYPT_ATTRIBUTES structure that contains unauthenticated attributes supplied by the user.</summary>
|
|
public IntPtr psUnauthenticated;
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>
|
|
/// [The <c>CRYPTUI_WIZ_DIGITAL_SIGN_INFO</c> structure is available for use in the operating systems specified in the Requirements
|
|
/// section. It may be altered or unavailable in subsequent versions.]
|
|
/// </para>
|
|
/// <para>
|
|
/// The <c>CRYPTUI_WIZ_DIGITAL_SIGN_INFO</c> structure contains information about digital signing. This structure is used by the
|
|
/// CryptUIWizDigitalSign function.
|
|
/// </para>
|
|
/// </summary>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/ns-cryptuiapi-cryptui_wiz_digital_sign_info typedef struct
|
|
// _CRYPTUI_WIZ_DIGITAL_SIGN_INFO { DWORD dwSize; DWORD dwSubjectChoice; union { LPCWSTR pwszFileName;
|
|
// PCCRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO pSignBlobInfo; }; DWORD dwSigningCertChoice; union { PCCERT_CONTEXT pSigningCertContext;
|
|
// PCCRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO pSigningCertStore; PCCRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO pSigningCertPvkInfo; }; LPCWSTR
|
|
// pwszTimestampURL; DWORD dwAdditionalCertChoice; PCCRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO pSignExtInfo; }
|
|
// CRYPTUI_WIZ_DIGITAL_SIGN_INFO, *PCRYPTUI_WIZ_DIGITAL_SIGN_INFO;
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "22d0bc45-0f66-4f5f-87d3-0849c4327eed")]
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct CRYPTUI_WIZ_DIGITAL_SIGN_INFO
|
|
{
|
|
/// <summary>The size, in bytes, of the structure.</summary>
|
|
public uint dwSize;
|
|
|
|
/// <summary>
|
|
/// <para>
|
|
/// A value that indicates the entity that is to be signed. This member is required if <c>CRYPTUI_WIZ_NO_UI</c> is specified in
|
|
/// the dwFlags parameter of the CryptUIWizDigitalSign function. This can be one of the following values.
|
|
/// </para>
|
|
/// <list type="table">
|
|
/// <listheader>
|
|
/// <term>Value</term>
|
|
/// <term>Meaning</term>
|
|
/// </listheader>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_DIGITAL_SIGN_SUBJECT_BLOB</term>
|
|
/// <term>The memory BLOB specified by the pSignBlobInfo member is to be signed.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_DIGITAL_SIGN_SUBJECT_FILE</term>
|
|
/// <term>The file specified by the pwszFileName member is to be signed.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>0</term>
|
|
/// <term>The user will be prompted for a file to sign.</term>
|
|
/// </item>
|
|
/// </list>
|
|
/// </summary>
|
|
public CryptUIWizToSign dwSubjectChoice;
|
|
|
|
/// <summary/>
|
|
public CRYPTUI_WIZ_DIGITAL_SIGN_INFO_UNION ToSign;
|
|
|
|
/// <summary/>
|
|
[StructLayout(LayoutKind.Explicit)]
|
|
public struct CRYPTUI_WIZ_DIGITAL_SIGN_INFO_UNION
|
|
{
|
|
/// <summary>
|
|
/// A pointer to a null-terminated Unicode string that contains the path and file name of the file to sign. This member is
|
|
/// used if <c>CRYPTUI_WIZ_DIGITAL_SIGN_SUBJECT_FILE</c> is specified for the <c>dwSubjectChoice</c> member.
|
|
/// </summary>
|
|
[FieldOffset(0)]
|
|
public StrPtrUni pwszFileName;
|
|
|
|
/// <summary>
|
|
/// A pointer to a CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO structure that contains the BLOB to sign. This member is used if
|
|
/// <c>CRYPTUI_WIZ_DIGITAL_SIGN_SUBJECT_BLOB</c> is specified for the <c>dwSubjectChoice</c> member.
|
|
/// </summary>
|
|
[FieldOffset(0)]
|
|
public IntPtr pSignBlobInfo;
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>
|
|
/// A value that specifies the location of the certificate that is used to sign the entity. The default value is zero. This can
|
|
/// be one of the following values.
|
|
/// </para>
|
|
/// <para>
|
|
/// <c>Note</c> If <c>CRYPTUI_WIZ_NO_UI</c> is specified in the dwFlags parameter of the CryptUIWizDigitalSign function, this
|
|
/// value must be either <c>CRYPTUI_WIZ_DIGITAL_SIGN_CERT</c> or <c>CRYPTUI_WIZ_DIGITAL_SIGN_PVK</c>.
|
|
/// </para>
|
|
/// <list type="table">
|
|
/// <listheader>
|
|
/// <term>Value</term>
|
|
/// <term>Meaning</term>
|
|
/// </listheader>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_DIGITAL_SIGN_CERT</term>
|
|
/// <term>The certificate is contained in the CERT_CONTEXT structure pointed to by the pSigningCertContext member.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_DIGITAL_SIGN_STORE</term>
|
|
/// <term>
|
|
/// The certificate is contained in the certificate store contained in the CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO structure pointed
|
|
/// to by the pSigningCertStore member.
|
|
/// </term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_DIGITAL_SIGN_PVK</term>
|
|
/// <term>
|
|
/// The certificate is contained in the PVK file contained in the CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO structure pointed to by
|
|
/// the pSigningCertPvkInfo member.
|
|
/// </term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>0</term>
|
|
/// <term>The certificates in the My store are used.</term>
|
|
/// </item>
|
|
/// </list>
|
|
/// </summary>
|
|
public CryptUIWizSignLoc dwSigningCertChoice;
|
|
|
|
/// <summary>
|
|
/// A pointer to a CERT_CONTEXT structure that contains the certificate to use to sign the entity. This member is used if
|
|
/// <c>CRYPTUI_WIZ_DIGITAL_SIGN_CERT</c> is specified for the <c>dwSigningCertChoice</c> member.
|
|
/// <para>OR</para>
|
|
/// <para>
|
|
/// A pointer to a CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO structure that contains the certificate to use to sign the entity. This
|
|
/// member is used if <c>CRYPTUI_WIZ_DIGITAL_SIGN_STORE</c> is specified for the <c>dwSigningCertChoice</c> member.
|
|
/// </para>
|
|
/// <para>OR</para>
|
|
/// <para>
|
|
/// A pointer to a CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO structure that contains the certificate to use to sign the entity.
|
|
/// This member is used if <c>CRYPTUI_WIZ_DIGITAL_SIGN_PVK</c> is specified for the <c>dwSigningCertChoice</c> member.
|
|
/// </para>
|
|
/// </summary>
|
|
public IntPtr pSigningCertObject;
|
|
|
|
/// <summary>A pointer to a null-terminated Unicode string that contains the URL for the time stamp.</summary>
|
|
[MarshalAs(UnmanagedType.LPWStr)] public string pwszTimestampURL;
|
|
|
|
/// <summary>
|
|
/// <para>
|
|
/// A value that indicates whether additional certificates will be included in the signature. The default value is zero. This
|
|
/// can be one of the following values.
|
|
/// </para>
|
|
/// <list type="table">
|
|
/// <listheader>
|
|
/// <term>Value</term>
|
|
/// <term>Meaning</term>
|
|
/// </listheader>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_DIGITAL_SIGN_ADD_CHAIN</term>
|
|
/// <term>The entire certificate chain will be included in the signature.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_DIGITAL_SIGN_ADD_CHAIN_NO_ROOT</term>
|
|
/// <term>All certificates in the certificate chain except the root will be included in the signature.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>0</term>
|
|
/// <term>No additional certificates will be included in the signature.</term>
|
|
/// </item>
|
|
/// </list>
|
|
/// </summary>
|
|
public CryptUIWizAddChoice dwAdditionalCertChoice;
|
|
|
|
/// <summary>
|
|
/// A pointer to a CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO structure that contains extended information about the signature.
|
|
/// </summary>
|
|
public IntPtr pSignExtInfo;
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>
|
|
/// [The <c>CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO</c> structure is available for use in the operating systems specified in the
|
|
/// Requirements section. It may be altered or unavailable in subsequent versions.]
|
|
/// </para>
|
|
/// <para>
|
|
/// The <c>CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO</c> structure is used with the CRYPTUI_WIZ_DIGITAL_SIGN_INFO structure to contain
|
|
/// information about the PVK file used by the digital signature wizard.
|
|
/// </para>
|
|
/// </summary>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/ns-cryptuiapi-cryptui_wiz_digital_sign_pvk_file_info typedef struct
|
|
// _CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO { DWORD dwSize; LPWSTR pwszPvkFileName; LPWSTR pwszProvName; DWORD dwProvType; }
|
|
// CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO, *PCRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO;
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "0e737661-2cc3-47be-ab32-0efbc18fefbd")]
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO
|
|
{
|
|
/// <summary>The size, in bytes, of the structure.</summary>
|
|
public uint dwSize;
|
|
|
|
/// <summary>A pointer to a null-terminated Unicode string that contains the path and file name of the PVK file.</summary>
|
|
[MarshalAs(UnmanagedType.LPWStr)] public string pwszPvkFileName;
|
|
|
|
/// <summary>A pointer to a null-terminated Unicode string that contains the name of the provider.</summary>
|
|
[MarshalAs(UnmanagedType.LPWStr)] public string pwszProvName;
|
|
|
|
/// <summary>
|
|
/// Contains the provider type identifier. For more information about the provider types, see Cryptographic Provider Types.
|
|
/// </summary>
|
|
public uint dwProvType;
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>
|
|
/// [The <c>CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO</c> structure is available for use in the operating systems specified in the
|
|
/// Requirements section. It may be altered or unavailable in subsequent versions.]
|
|
/// </para>
|
|
/// <para>
|
|
/// The <c>CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO</c> structure contains information about the certificate store used by the digital
|
|
/// signature wizard.
|
|
/// </para>
|
|
/// </summary>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/ns-cryptuiapi-cryptui_wiz_digital_sign_store_info typedef struct
|
|
// _CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO { DWORD dwSize; DWORD cCertStore; HCERTSTORE *rghCertStore; PFNCFILTERPROC pFilterCallback;
|
|
// void *pvCallbackData; } CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO, *PCRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO;
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "d3ffbf1c-e8c2-44ab-84d2-d32350d04407")]
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO
|
|
{
|
|
/// <summary>The size, in bytes, of the structure. This value must be set to .</summary>
|
|
public uint dwSize;
|
|
|
|
/// <summary>Number of certificates in the <c>rghCertStore</c> member.</summary>
|
|
public uint cCertStore;
|
|
|
|
/// <summary>A pointer to a handle to the certificate store that will be used by the digital signature wizard.</summary>
|
|
public IntPtr rghCertStore;
|
|
|
|
/// <summary>Filter callback function used to display the certificate.</summary>
|
|
[MarshalAs(UnmanagedType.FunctionPtr)]
|
|
public PFNCFILTERPROC pFilterCallback;
|
|
|
|
/// <summary>A pointer to the callback data.</summary>
|
|
public IntPtr pvCallbackData;
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>
|
|
/// [The <c>CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO</c> structure is available for use in the operating systems specified in the
|
|
/// Requirements section. It may be altered or unavailable in subsequent versions.]
|
|
/// </para>
|
|
/// <para>
|
|
/// The <c>CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO</c> structure contains information that controls the operation of the
|
|
/// CryptUIWizExport function when a certificate is the object being exported.
|
|
/// </para>
|
|
/// </summary>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/ns-cryptuiapi-cryptui_wiz_export_certcontext_info typedef struct
|
|
// _CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO { DWORD dwSize; DWORD dwExportFormat; BOOL fExportChain; BOOL fExportPrivateKeys; LPCWSTR
|
|
// pwszPassword; BOOL fStrongEncryption; } CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO, *PCRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO;
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "6be86c4f-0ac7-43c2-81fb-9767279ebeaf")]
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO
|
|
{
|
|
/// <summary>The size, in bytes, of this structure.</summary>
|
|
public uint dwSize;
|
|
|
|
/// <summary>
|
|
/// <para>A value that indicates the export format of the certificate. This member can be one of the following values.</para>
|
|
/// <list type="table">
|
|
/// <listheader>
|
|
/// <term>Value</term>
|
|
/// <term>Meaning</term>
|
|
/// </listheader>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_EXPORT_FORMAT_DER</term>
|
|
/// <term>Export in Abstract Syntax Notation One (ASN.1) Distinguished Encoding Rules (DER) format.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_EXPORT_FORMAT_PFX</term>
|
|
/// <term>Export in Private Information Exchange (PFX) format.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_EXPORT_FORMAT_PKCS7</term>
|
|
/// <term>Export in Public Key Cryptography Standard #7 (PKCS #7) format.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_EXPORT_FORMAT_BASE64</term>
|
|
/// <term>Export in base 64 format.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_EXPORT_FORMAT_CRL</term>
|
|
/// <term>Export in certificate revocation list (CRL) format.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_EXPORT_FORMAT_CTL</term>
|
|
/// <term>Export in certificate trust list (CTL) format.</term>
|
|
/// </item>
|
|
/// </list>
|
|
/// </summary>
|
|
public uint dwExportFormat;
|
|
|
|
/// <summary>
|
|
/// Indicates whether the certificate chain should be exported in addition to the certificate. Contains nonzero to export the
|
|
/// chain or zero to not export the chain.
|
|
/// </summary>
|
|
[MarshalAs(UnmanagedType.Bool)] public bool fExportChain;
|
|
|
|
/// <summary>
|
|
/// Indicates whether the private key should be exported in addition to the certificate. Contains nonzero to export the private
|
|
/// key or zero to not export the private key.
|
|
/// </summary>
|
|
[MarshalAs(UnmanagedType.Bool)] public bool fExportPrivateKeys;
|
|
|
|
/// <summary>
|
|
/// A pointer to a null-terminated Unicode string that contains the password used to access the private key. This is required if
|
|
/// <c>fExportPrivateKeys</c> is nonzero and is otherwise ignored.
|
|
/// </summary>
|
|
[MarshalAs(UnmanagedType.LPWStr)] public string pwszPassword;
|
|
|
|
/// <summary>
|
|
/// <para>
|
|
/// Indicates whether strong encryption should be used in the export process. Contains nonzero to use strong encryption or zero
|
|
/// to use weak encryption. This must be nonzero if <c>dwExportFormat</c> is <c>CRYPTUI_WIZ_EXPORT_FORMAT_PFX</c>. If this is
|
|
/// nonzero, the PFX BLOB produced is not compatible with Internet Explorer 4.0 or earlier versions.
|
|
/// </para>
|
|
/// <para>
|
|
/// <c>Note</c> We recommend that you set this to nonzero; otherwise, a substantially weaker encryption algorithm is used in the
|
|
/// export process.
|
|
/// </para>
|
|
/// </summary>
|
|
[MarshalAs(UnmanagedType.Bool)] public bool fStrongEncryption;
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>
|
|
/// [The <c>CRYPTUI_WIZ_EXPORT_INFO</c> structure is available for use in the operating systems specified in the Requirements
|
|
/// section. It may be altered or unavailable in subsequent versions.]
|
|
/// </para>
|
|
/// <para>
|
|
/// The <c>CRYPTUI_WIZ_EXPORT_INFO</c> structure contains information that controls the operation of the CryptUIWizExport function.
|
|
/// </para>
|
|
/// </summary>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/ns-cryptuiapi-cryptui_wiz_export_info typedef struct
|
|
// _CRYPTUI_WIZ_EXPORT_INFO { DWORD dwSize; LPCWSTR pwszExportFileName; DWORD dwSubjectChoice; union { PCCERT_CONTEXT pCertContext;
|
|
// PCCTL_CONTEXT pCTLContext; PCCRL_CONTEXT pCRLContext; HCERTSTORE hCertStore; }; DWORD cStores; HCERTSTORE *rghStores; }
|
|
// CRYPTUI_WIZ_EXPORT_INFO, *PCRYPTUI_WIZ_EXPORT_INFO;
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "3c509bb6-d391-4b59-809c-23466c8196ea")]
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct CRYPTUI_WIZ_EXPORT_INFO
|
|
{
|
|
/// <summary>The size, in bytes, of this structure.</summary>
|
|
public uint dwSize;
|
|
|
|
/// <summary>
|
|
/// A pointer to a null-terminated Unicode string that contains the fully qualified file name to export to. If this member is
|
|
/// not <c>NULL</c> and the <c>CRYPTUI_WIZ_NO_UI</c> flag in the dwFlags parameter of the CryptUIWizExport function is not set,
|
|
/// this string is displayed to the user as the default file name. This member is required if the <c>CRYPTUI_WIZ_NO_UI</c> flag
|
|
/// is set. This member is otherwise optional.
|
|
/// </summary>
|
|
[MarshalAs(UnmanagedType.LPWStr)] public string pwszExportFileName;
|
|
|
|
/// <summary>
|
|
/// <para>Indicates the type of the subject to export. This member can be one of the following values.</para>
|
|
/// <list type="table">
|
|
/// <listheader>
|
|
/// <term>Value</term>
|
|
/// <term>Meaning</term>
|
|
/// </listheader>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_EXPORT_CERT_CONTEXT</term>
|
|
/// <term>Export the certificate context that is specified in the pCertContext member.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_EXPORT_CTL_CONTEXT</term>
|
|
/// <term>Export the certificate trust list (CTL) context that is specified in the pCTLContext member.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_EXPORT_CRL_CONTEXT</term>
|
|
/// <term>Export the certificate revocation list (CRL) context that is specified in the pCRLContext member.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_EXPORT_CERT_STORE</term>
|
|
/// <term>Export the certificate store that is specified in the hCertStore member.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_EXPORT_CERT_STORE_CERTIFICATES_ONLY</term>
|
|
/// <term>Export only the certificates from the certificate store that is specified in the hCertStore member.</term>
|
|
/// </item>
|
|
/// </list>
|
|
/// </summary>
|
|
public CryptUIWizExportType dwSubjectChoice;
|
|
|
|
/// <summary/>
|
|
public CRYPTUI_WIZ_EXPORT_INFO_UNION Subject;
|
|
|
|
/// <summary/>
|
|
[StructLayout(LayoutKind.Explicit)]
|
|
public struct CRYPTUI_WIZ_EXPORT_INFO_UNION
|
|
{
|
|
/// <summary>
|
|
/// A pointer to the CERT_CONTEXT structure that contains the certificate to export. This member is used if the
|
|
/// <c>dwSubjectChoice</c> member contains <c>CRYPTUI_WIZ_EXPORT_CERT_CONTEXT</c>.
|
|
/// </summary>
|
|
[FieldOffset(0)]
|
|
public PCCERT_CONTEXT pCertContext;
|
|
|
|
/// <summary>
|
|
/// A pointer to the CTL_CONTEXT structure that contains the CTL to export. This member is used if the
|
|
/// <c>dwSubjectChoice</c> member contains <c>CRYPTUI_WIZ_EXPORT_CTL_CONTEXT</c>.
|
|
/// </summary>
|
|
[FieldOffset(0)]
|
|
public PCCTL_CONTEXT pCTLContext;
|
|
|
|
/// <summary>
|
|
/// A pointer to the CRL_CONTEXT structure that contains the CRL to export. This member is used if the
|
|
/// <c>dwSubjectChoice</c> member contains <c>CRYPTUI_WIZ_EXPORT_CRL_CONTEXT</c>.
|
|
/// </summary>
|
|
[FieldOffset(0)]
|
|
public PCCRL_CONTEXT pCRLContext;
|
|
|
|
/// <summary>
|
|
/// A handle to the certificate store to export. This member is used if the <c>dwSubjectChoice</c> member contains
|
|
/// <c>CRYPTUI_WIZ_EXPORT_CERT_STORE</c> or <c>CRYPTUI_WIZ_EXPORT_CERT_STORE_CERTIFICATES_ONLY</c>.
|
|
/// </summary>
|
|
[FieldOffset(0)]
|
|
public HCERTSTORE hCertStore;
|
|
}
|
|
|
|
/// <summary>The number of elements in the <c>rghStores</c> array.</summary>
|
|
public uint cStores;
|
|
|
|
/// <summary>
|
|
/// An array of extra certificate stores to search for certificates in the trust chain if the chain is being exported with a
|
|
/// certificate. This member is ignored if <c>dwSubjectChoice</c> is anything other than the
|
|
/// <c>CRYPTUI_WIZ_EXPORT_CERT_CONTEXT</c> value. The <c>cStores</c> member contains the number of elements in this array.
|
|
/// </summary>
|
|
public IntPtr rghStores;
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>
|
|
/// [The <c>CRYPTUI_WIZ_IMPORT_SRC_INFO</c> structure is available for use in the operating systems specified in the Requirements
|
|
/// section. It may be altered or unavailable in subsequent versions.]
|
|
/// </para>
|
|
/// <para>
|
|
/// The <c>CRYPTUI_WIZ_IMPORT_SRC_INFO</c> structure contains the subject to import into the CryptUIWizImport function. The subject
|
|
/// can be a certificate, a certificate trust list (CTL), or a certificate revocation list (CRL).
|
|
/// </para>
|
|
/// </summary>
|
|
// https://docs.microsoft.com/en-us/windows/win32/api/cryptuiapi/ns-cryptuiapi-cryptui_wiz_import_src_info typedef struct
|
|
// _CRYPTUI_WIZ_IMPORT_SUBJECT_INFO { DWORD dwSize; DWORD dwSubjectChoice; union { LPCWSTR pwszFileName; PCCERT_CONTEXT
|
|
// pCertContext; PCCTL_CONTEXT pCTLContext; PCCRL_CONTEXT pCRLContext; HCERTSTORE hCertStore; }; DWORD dwFlags; LPCWSTR
|
|
// pwszPassword; } CRYPTUI_WIZ_IMPORT_SRC_INFO, *PCRYPTUI_WIZ_IMPORT_SRC_INFO;
|
|
[PInvokeData("cryptuiapi.h", MSDNShortId = "17d932e3-05ea-4ed0-9f88-fbb674b6b070")]
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct CRYPTUI_WIZ_IMPORT_SRC_INFO
|
|
{
|
|
/// <summary>The size, in bytes, of this structure.</summary>
|
|
public uint dwSize;
|
|
|
|
/// <summary>
|
|
/// <para>Indicates the type of subject to import. This member can be one of the following values.</para>
|
|
/// <list type="table">
|
|
/// <listheader>
|
|
/// <term>Value</term>
|
|
/// <term>Meaning</term>
|
|
/// </listheader>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_SUBJECT_FILE</term>
|
|
/// <term>Import the certificate stored in the file referenced in the pwszFileName member.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_CONTEXT</term>
|
|
/// <term>Import the certificate referenced in the pCertContext member.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_SUBJECT_CTL_CONTEXT</term>
|
|
/// <term>Import the CTL referenced in the pCTLContext member.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_SUBJECT_CRL_CONTEXT</term>
|
|
/// <term>Import the CRL referenced in the pCRLContext member.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_STORE</term>
|
|
/// <term>Import the certificate store referenced in the hCertStore member.</term>
|
|
/// </item>
|
|
/// </list>
|
|
/// </summary>
|
|
public CryptUIWizImportType dwSubjectChoice;
|
|
|
|
/// <summary/>
|
|
public CRYPTUI_WIZ_IMPORT_SRC_INFO_UNION Subject;
|
|
|
|
/// <summary/>
|
|
[StructLayout(LayoutKind.Explicit)]
|
|
public struct CRYPTUI_WIZ_IMPORT_SRC_INFO_UNION
|
|
{
|
|
/// <summary>
|
|
/// A pointer to a null-terminated Unicode string that contains the path and file name of the file that contains the
|
|
/// certificate to import. This member is used if the <c>dwSubjectChoice</c> member contains <c>CRYPTUI_WIZ_IMPORT_SUBJECT_FILE</c>.
|
|
/// </summary>
|
|
[FieldOffset(0)]
|
|
public StrPtrUni pwszFileName;
|
|
|
|
/// <summary>
|
|
/// A pointer to the CERT_CONTEXT structure that contains the certificate to import. This member is used if the
|
|
/// <c>dwSubjectChoice</c> member contains <c>CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_CONTEXT</c>.
|
|
/// </summary>
|
|
[FieldOffset(0)]
|
|
public PCCERT_CONTEXT pCertContext;
|
|
|
|
/// <summary>
|
|
/// A pointer to the CTL_CONTEXT structure that contains the CTL to import. This member is used if the
|
|
/// <c>dwSubjectChoice</c> member contains <c>CRYPTUI_WIZ_IMPORT_SUBJECT_CTL_CONTEXT</c>.
|
|
/// </summary>
|
|
[FieldOffset(0)]
|
|
public PCCTL_CONTEXT pCTLContext;
|
|
|
|
/// <summary>
|
|
/// A pointer to the CRL_CONTEXT structure that contains the CRL to import. This member is used if the
|
|
/// <c>dwSubjectChoice</c> member contains <c>CRYPTUI_WIZ_IMPORT_SUBJECT_CRL_CONTEXT</c>.
|
|
/// </summary>
|
|
[FieldOffset(0)]
|
|
public PCCRL_CONTEXT pCRLContext;
|
|
|
|
/// <summary>
|
|
/// A handle to the certificate store to import. This member is used if the <c>dwSubjectChoice</c> member contains <c>CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_STORE</c>.
|
|
/// </summary>
|
|
[FieldOffset(0)]
|
|
public HCERTSTORE hCertStore;
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>
|
|
/// Contains flags that modify the import operation. This member is required if <c>pwszFileName</c> contains a Personal
|
|
/// Information Exchange (PFX) BLOB. Otherwise, this member is ignored. This member can be zero or a combination of one or more
|
|
/// of the following values.
|
|
/// </para>
|
|
/// <list type="table">
|
|
/// <listheader>
|
|
/// <term>Value</term>
|
|
/// <term>Meaning</term>
|
|
/// </listheader>
|
|
/// <item>
|
|
/// <term>CRYPT_EXPORTABLE</term>
|
|
/// <term>
|
|
/// Imported keys are marked as exportable. If this flag is not used, calls to the CryptExportKey function with the key handle fail.
|
|
/// </term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPT_USER_PROTECTED</term>
|
|
/// <term>
|
|
/// The user is to be notified by means of a dialog box or some other manner when certain actions are attempting to use this
|
|
/// key. The precise behavior is specified by the cryptographic service provider (CSP) that is being used. Prior to Internet
|
|
/// Explorer 4.0, Microsoft CSPs ignored this flag. Starting with Internet Explorer 4.0, Microsoft CSPs support this flag. If
|
|
/// the provider context was opened with the CRYPT_SILENT flag set, using this flag causes a failure, and the last error is set
|
|
/// to NTE_SILENT_CONTEXT.
|
|
/// </term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPT_MACHINE_KEYSET</term>
|
|
/// <term>The private keys are stored under the local computer and not under the current user.</term>
|
|
/// </item>
|
|
/// <item>
|
|
/// <term>CRYPT_USER_KEYSET</term>
|
|
/// <term>
|
|
/// The private keys are stored under the current user and not under the local computer, even if the PFX BLOB specifies that
|
|
/// they should go under the local computer.
|
|
/// </term>
|
|
/// </item>
|
|
/// </list>
|
|
/// </summary>
|
|
public PFXImportFlags dwFlags;
|
|
|
|
/// <summary>
|
|
/// Pointer to a null-terminated Unicode string that contains the password used to access the private key. A password is
|
|
/// required if <c>pwszFileName</c> contains a PFX BLOB. If a password is not required, the variable can be an empty string.
|
|
/// This member cannot be <c>NULL</c>.
|
|
/// </summary>
|
|
[MarshalAs(UnmanagedType.LPWStr)] public string pwszPassword;
|
|
}
|
|
|
|
/// <summary>Provides a pointer to a CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT structure.</summary>
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT : IHandle
|
|
{
|
|
private readonly IntPtr handle;
|
|
|
|
/// <summary>Initializes a new instance of the <see cref="PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT"/> struct.</summary>
|
|
/// <param name="preexistingHandle">An <see cref="IntPtr"/> object that represents the pre-existing handle to use.</param>
|
|
public PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT(IntPtr preexistingHandle) => handle = preexistingHandle;
|
|
|
|
/// <summary>
|
|
/// Returns an invalid handle by instantiating a <see cref="PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT"/> object with <see cref="IntPtr.Zero"/>.
|
|
/// </summary>
|
|
public static PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT NULL => new(IntPtr.Zero);
|
|
|
|
/// <summary>Gets a value indicating whether this instance is a null handle.</summary>
|
|
public bool IsNull => handle == IntPtr.Zero;
|
|
|
|
/// <summary>Performs an explicit conversion from <see cref="PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT"/> to <see cref="IntPtr"/>.</summary>
|
|
/// <param name="h">The handle.</param>
|
|
/// <returns>The result of the conversion.</returns>
|
|
public static explicit operator IntPtr(PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT h) => h.handle;
|
|
|
|
/// <summary>Performs an explicit conversion from <see cref="PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT"/> to <see cref="CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT"/>.</summary>
|
|
/// <param name="h">The handle.</param>
|
|
/// <returns>The resulting <see cref="CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT"/> instance from the conversion.</returns>
|
|
public static explicit operator CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT(PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT h) => h.handle.ToStructure<CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT>();
|
|
|
|
/// <summary>Performs an implicit conversion from <see cref="IntPtr"/> to <see cref="PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT"/>.</summary>
|
|
/// <param name="h">The pointer to a handle.</param>
|
|
/// <returns>The result of the conversion.</returns>
|
|
public static implicit operator PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT(IntPtr h) => new(h);
|
|
|
|
/// <summary>Implements the operator !=.</summary>
|
|
/// <param name="h1">The first handle.</param>
|
|
/// <param name="h2">The second handle.</param>
|
|
/// <returns>The result of the operator.</returns>
|
|
public static bool operator !=(PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT h1, PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT h2) => !(h1 == h2);
|
|
|
|
/// <summary>Implements the operator ==.</summary>
|
|
/// <param name="h1">The first handle.</param>
|
|
/// <param name="h2">The second handle.</param>
|
|
/// <returns>The result of the operator.</returns>
|
|
public static bool operator ==(PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT h1, PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT h2) => h1.Equals(h2);
|
|
|
|
/// <inheritdoc/>
|
|
public override bool Equals(object obj) => obj is PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT h && handle == h.handle;
|
|
|
|
/// <inheritdoc/>
|
|
public override int GetHashCode() => handle.GetHashCode();
|
|
|
|
/// <inheritdoc/>
|
|
public IntPtr DangerousGetHandle() => handle;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Provides a <see cref="SafeHandle"/> for <see cref="PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT"/> that is disposed using <see cref="CryptUIWizFreeDigitalSignContext"/>.
|
|
/// </summary>
|
|
public class SafePCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT : SafeHANDLE
|
|
{
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="SafePCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT"/> class and assigns an existing handle.
|
|
/// </summary>
|
|
/// <param name="preexistingHandle">An <see cref="IntPtr"/> object that represents the pre-existing handle to use.</param>
|
|
/// <param name="ownsHandle">
|
|
/// <see langword="true"/> to reliably release the handle during the finalization phase; otherwise, <see langword="false"/> (not recommended).
|
|
/// </param>
|
|
public SafePCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT(IntPtr preexistingHandle, bool ownsHandle = true) : base(preexistingHandle, ownsHandle) { }
|
|
|
|
/// <summary>Initializes a new instance of the <see cref="SafePCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT"/> class.</summary>
|
|
private SafePCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT() : base() { }
|
|
|
|
/// <summary>Performs an implicit conversion from <see cref="SafePCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT"/> to <see cref="PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT"/>.</summary>
|
|
/// <param name="h">The safe handle instance.</param>
|
|
/// <returns>The result of the conversion.</returns>
|
|
public static implicit operator PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT(SafePCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT h) => h.handle;
|
|
|
|
/// <inheritdoc/>
|
|
protected override bool InternalReleaseHandle() => CryptUIWizFreeDigitalSignContext(handle);
|
|
}
|
|
}
|
|
} |