Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

532 lines
23 KiB

//+----------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992-1999.
//
// File: cryptuiapi.h
//
// Contents: Cryptographic UI API Prototypes and Definitions
//
//-----------------------------------------------------------------------------
#ifndef __CRYPTUIAPI_H__
#define __CRYPTUIAPI_H__
#if defined (_MSC_VER) && (_MSC_VER >= 1020)
#pragma once
#endif
#include <wincrypt.h>
#ifdef __cplusplus
extern "C" {
#endif
#include <pshpack8.h>
//+----------------------------------------------------------------------------
// Dialog viewer of a certificate, CTL or CRL context.
//
// dwContextType and associated pvContext's
// CERT_STORE_CERTIFICATE_CONTEXT PCCERT_CONTEXT
// CERT_STORE_CRL_CONTEXT PCCRL_CONTEXT
// CERT_STORE_CTL_CONTEXT PCCTL_CONTEXT
//
// dwFlags currently isn't used and should be set to 0.
//-----------------------------------------------------------------------------
BOOL
WINAPI
CryptUIDlgViewContext(
IN DWORD dwContextType,
IN const void *pvContext,
IN OPTIONAL HWND hwnd, // Defaults to the desktop window
IN OPTIONAL LPCWSTR pwszTitle, // Defaults to the context type title
IN DWORD dwFlags,
IN void *pvReserved
);
//+----------------------------------------------------------------------------
// Dialog to select a certificate from the specified store.
//
// Returns the selected certificate context. If no certificate was
// selected, NULL is returned.
//
// pwszTitle is either NULL or the title to be used for the dialog.
// If NULL, the default title is used. The default title is
// "Select Certificate".
//
// pwszDisplayString is either NULL or the text statement in the selection
// dialog. If NULL, the default phrase
// "Select a certificate you wish to use" is used in the dialog.
//
// dwDontUseColumn can be set to exclude columns from the selection
// dialog. See the CRYPTDLG_SELECTCERT_*_COLUMN definitions below.
//
// dwFlags currently isn't used and should be set to 0.
//-----------------------------------------------------------------------------
PCCERT_CONTEXT
WINAPI
CryptUIDlgSelectCertificateFromStore(
IN HCERTSTORE hCertStore,
IN OPTIONAL HWND hwnd, // Defaults to the desktop window
IN OPTIONAL LPCWSTR pwszTitle,
IN OPTIONAL LPCWSTR pwszDisplayString,
IN DWORD dwDontUseColumn,
IN DWORD dwFlags,
IN void *pvReserved
);
// flags for dwDontUseColumn
#define CRYPTUI_SELECT_ISSUEDTO_COLUMN 0x000000001
#define CRYPTUI_SELECT_ISSUEDBY_COLUMN 0x000000002
#define CRYPTUI_SELECT_INTENDEDUSE_COLUMN 0x000000004
#define CRYPTUI_SELECT_FRIENDLYNAME_COLUMN 0x000000008
#define CRYPTUI_SELECT_LOCATION_COLUMN 0x000000010
#define CRYPTUI_SELECT_EXPIRATION_COLUMN 0x000000020
//+----------------------------------------------------------------------------
//
// The select cert dialog can be passed a filter proc to reduce the set of
// certificates displayed. Return TRUE to display the certificate and FALSE to
// hide it. If TRUE is returned then optionally the pfInitialSelectedCert
// boolean may be set to TRUE to indicate to the dialog that this cert should
// be the initially selected cert. Note that the most recent cert that had the
// pfInitialSelectedCert boolean set during the callback will be the initially
// selected cert.
//
//-----------------------------------------------------------------------------
typedef BOOL (WINAPI * PFNCFILTERPROC) (
PCCERT_CONTEXT pCertContext,
BOOL *pfInitialSelectedCert,
void *pvCallbackData
);
//+----------------------------------------------------------------------------
// Valid values for dwFlags in CRYPTUI_CERT_MGR_STRUCT struct.
//-----------------------------------------------------------------------------
#define CRYPTUI_CERT_MGR_TAB_MASK 0x0000000F
#define CRYPTUI_CERT_MGR_PUBLISHER_TAB 0x00000004
#define CRYPTUI_CERT_MGR_SINGLE_TAB_FLAG 0x00008000
//+----------------------------------------------------------------------------
//
// CRYPTUI_CERT_MGR_STRUCT
//
// dwSize IN Required: Should be set to
// sizeof(CRYPTUI_CERT_MGR_STRUCT)
//
// hwndParent IN Optional: Parent of this dialog.
//
// dwFlags IN Optional: Personal is the default initially selected
// tab.
//
// CRYPTUI_CERT_MGR_PUBLISHER_TAB may be set
// to select Trusted Publishers as the
// initially selected tab.
//
// CRYPTUI_CERT_MGR_SINGLE_TAB_FLAG may also
// be set to only display the Trusted
// Publishers tab.
//
// pwszTitle IN Optional: Title of the dialog.
//
// pszInitUsageOID IN Optional: The enhanced key usage object identifier
// (OID). Certificates with this OID will
// initially be shown as a default. User
// can then choose different OIDs. NULL
// means all certificates will be shown
// initially.
//
//-----------------------------------------------------------------------------
typedef struct _CRYPTUI_CERT_MGR_STRUCT
{
DWORD dwSize;
HWND hwndParent;
DWORD dwFlags;
LPCWSTR pwszTitle;
LPCSTR pszInitUsageOID;
} CRYPTUI_CERT_MGR_STRUCT, *PCRYPTUI_CERT_MGR_STRUCT;
typedef const CRYPTUI_CERT_MGR_STRUCT *PCCRYPTUI_CERT_MGR_STRUCT;
//+----------------------------------------------------------------------------
//
// CryptUIDlgCertMgr
//
// The wizard to manage certificates in store.
//
// pCryptUICertMgr IN Required: Poitner to CRYPTUI_CERT_MGR_STRUCT
// structure.
//
//-----------------------------------------------------------------------------
BOOL
WINAPI
CryptUIDlgCertMgr(
IN PCCRYPTUI_CERT_MGR_STRUCT pCryptUICertMgr
);
//+----------------------------------------------------------------------------
//
// CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO
//
// dwSize IN Required: Should be set to
// sizeof(CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO)
//
// pGuidSubject IN Required: Idenfity the sip functions to load
//
// cbBlob IN Required: The size of blob, in bytes
//
// pwszDispalyName IN Optional: The display name of the blob to sign
//
//-----------------------------------------------------------------------------
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;
typedef const CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO *PCCRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO;
//+----------------------------------------------------------------------------
//
// CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO
//
// dwSize IN Required: Should be set to
// sizeof(CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO)
//
// cCertStore IN Required: The acount of certificate store array that
// includes potentical sining certs
//
// rghCertStore IN Required: The certificate store array that includes
// potential signing certs
//
// pFilterCallback IN Optional: The filter call back function for display
// the certificate
//
// pvCallbackData IN Optional: The call back data
//
//-----------------------------------------------------------------------------
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;
typedef const CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO *PCCRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO;
//+----------------------------------------------------------------------------
//
// CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO
//
// dwSize IN Required: Should be set to
// sizeof(CRYPT_WIZ_DIGITAL_SIGN_PVK_FILE_INFO)
//
// pwszPvkFileName IN Required: The PVK file name
//
// pwszProvName IN Required: The provider name
//
// dwProvType IN Required: The provider type
//
//-----------------------------------------------------------------------------
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;
typedef const CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO *PCCRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO;
//+----------------------------------------------------------------------------
// Valid values for dwPvkChoice in CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO
// struct.
//-----------------------------------------------------------------------------
#define CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE 0x01
#define CRYPTUI_WIZ_DIGITAL_SIGN_PVK_PROV 0x02
//+----------------------------------------------------------------------------
//
// CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO
//
// dwSize IN Required: Should be set to
// sizeof(CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO)
//
// pwszSigningCertFileName IN Required: The file name that contains the
// signing cert(s)
//
// dwPvkChoice IN Required: Indicate the private key type.
// It can be one of the following:
// CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE
// CRYPTUI_WIZ_DIGITAL_SIGN_PVK_PROV
//
// pPvkFileInfo IN Required: If dwPvkChoice == CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE
//
// pPvkProvInfo IN Required: If dwPvkContainer == CRYPTUI_WIZ_DIGITAL_SIGN_PVK_PROV
//
//-----------------------------------------------------------------------------
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;
typedef const CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO *PCCRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO;
//+----------------------------------------------------------------------------
// Valid values for dwAttrFlags in CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO
// struct.
//-----------------------------------------------------------------------------
#define CRYPTUI_WIZ_DIGITAL_SIGN_COMMERCIAL 0x0001
#define CRYPTUI_WIZ_DIGITAL_SIGN_INDIVIDUAL 0x0002
//+----------------------------------------------------------------------------
//
// CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO
//
// dwSize IN Required: Should be set to
// sizeof(CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO)
//
// dwAttrFlags IN Required: Flag to indicate signing options.
// It can be one of the following:
// CRYPTUI_WIZ_DIGITAL_SIGN_COMMERCIAL
// CRYPTUI_WIZ_DIGITAL_SIGN_INDIVIDUAL
//
// pwszDescription IN Optional: The description of the signing
// subject.
// pwszMoreInfoLocation IN Optional: The localtion to get more
// information about file this
// information will be shown upon
// download time.
//
// pszHashAlg IN Optional: The hashing algorithm for the
// signature. NULL means using SHA1
// hashing algorithm.
//
// pwszSigningCertDisplayString IN Optional: The display string to be
// displayed on the signing
// certificate wizard page. The
// string should prompt user to
// select a certificate for a
// particular purpose.
//
// hAddtionalCertStores IN Optional: The addtional cert store to add to
// the signature.
//
// psAuthenticated IN Optional: User supplied authenticated
// attributes added to the signature.
//
// psUnauthenticated IN Optional: User supplied unauthenticated
// attributes added to the signature.
//
//-----------------------------------------------------------------------------
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;
typedef const CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO *PCCRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO;
//+----------------------------------------------------------------------------
// Valid values for dwSubjectChoice in CRYPTUI_WIZ_DIGITAL_SIGN_INFO struct.
//-----------------------------------------------------------------------------
#define CRYPTUI_WIZ_DIGITAL_SIGN_SUBJECT_FILE 0x01
#define CRYPTUI_WIZ_DIGITAL_SIGN_SUBJECT_BLOB 0x02
//+----------------------------------------------------------------------------
// Valid values for dwSigningCertChoice in CRYPTUI_WIZ_DIGITAL_SIGN_INFO
// struct.
//-----------------------------------------------------------------------------
#define CRYPTUI_WIZ_DIGITAL_SIGN_CERT 0x01
#define CRYPTUI_WIZ_DIGITAL_SIGN_STORE 0x02
#define CRYPTUI_WIZ_DIGITAL_SIGN_PVK 0x03
//+----------------------------------------------------------------------------
// Valid values for dwAddtionalCertChoice in CRYPTUI_WIZ_DIGITAL_SIGN_INFO
// struct.
//-----------------------------------------------------------------------------
#define CRYPTUI_WIZ_DIGITAL_SIGN_ADD_CHAIN 0x00000001
#define CRYPTUI_WIZ_DIGITAL_SIGN_ADD_CHAIN_NO_ROOT 0x00000002
//+----------------------------------------------------------------------------
//
// CRYPTUI_WIZ_DIGITAL_SIGN_INFO
//
// dwSize IN Required: Should be set to
// sizeof(CRYPTUI_WIZ_DIGITAL_SIGN_INFO)
//
// dwSubjectChoice IN Required: If CRYPTUI_WIZ_NO_UI is set in dwFlags
// of the CryptUIWizDigitalSign call.
//
// Optional: If CRYPTUI_WIZ_NO_UI is not set in
// dwFlags of the CryptUIWizDigitalSign
// call.
//
// Indicate whether to sign a file or to
// sign a memory blob. 0 means promting
// user for the file to sign.
//
// It can be one of the following:
// CRYPTUI_WIZ_DIGITAL_SIGN_SUBJECT_FILE
// CRYPTUI_WIZ_DIGITAL_SIGN_SUBJECT_BLOB
//
// pwszFileName IN Required: If dwSubjectChoice == CRYPTUI_WIZ_DIGITAL_SIGN_SUBJECT_FILE
//
// pSignBlobInfo IN Required: If dwSubhectChoice == CRYPTUI_WIZ_DIGITAL_SIGN_SUBJECT_BLOB
//
// dwSigningCertChoice IN Optional: Indicate the signing certificate.
// 0 means using the certificates in
// "My" store".
//
// It can be one of the following choices:
// CRYPTUI_WIZ_DIGITAL_SIGN_CERT
// CRYPTUI_WIZ_DIGITAL_SIGN_STORE
// CRYPTUI_WIZ_DIGITAL_SIGN_PVK
//
// If CRYPTUI_WIZ_NO_UI is set in dwFlags
// of the CryptUIWizDigitalSign call,
// dwSigningCertChoice has to be
// CRYPTUI_WIZ_DIGITAL_SIGN_CERT or
// CRYPTUI_WIZ_DIGITAL_SIGN_PVK
//
// pSigningCertContext IN Required: If dwSigningCertChoice == CRYPTUI_WIZ_DIGITAL_SIGN_CERT
//
// pSigningCertStore IN Required: If dwSigningCertChoice == CRYPTUI_WIZ_DIGITAL_SIGN_STORE
//
// pSigningCertPvkInfo IN Required: If dwSigningCertChoise == CRYPTUI_WIZ_DIGITAL_SIGN_PVK
//
// pwszTimestampURL IN Optional: The timestamp URL address.
//
// dwAdditionalCertChoice IN Optional: Indicate additional certificates to be
// included in the signature. 0 means no
// addtional certificates will be added.
//
// The following flags are mutually
// exclusive.
// Only one of them can be set:
// CRYPTUI_WIZ_DIGITAL_SIGN_ADD_CHAIN
// CRYPTUI_WIZ_DIGITAL_SIGN_ADD_CHAIN_NO_ROOT
//
// pSignExtInfo IN Optional: The extended information for signing.
//
//-----------------------------------------------------------------------------
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;
typedef const CRYPTUI_WIZ_DIGITAL_SIGN_INFO *PCCRYPTUI_WIZ_DIGITAL_SIGN_INFO;
//+----------------------------------------------------------------------------
//
// CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT
//
// dwSize IN Required: Should be set to
// sizeof(CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT)
//
// cbBlob IN Required: The size of pbBlob in bytes.
//
// pbBlob IN Required: The signed blob.
//
//-----------------------------------------------------------------------------
typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT
{
DWORD dwSize;
DWORD cbBlob;
BYTE *pbBlob;
} CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT, *PCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT;
typedef const CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT *PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT;
//+----------------------------------------------------------------------------
// Valid values for dwFlags parameter to CryptUIWizDigitalSign.
//-----------------------------------------------------------------------------
#define CRYPTUI_WIZ_NO_UI 0x0001
//+----------------------------------------------------------------------------
//
// CryptUIWizDigitalSign
//
// The wizard to digitally sign a document or a blob.
//
// If CRYPTUI_WIZ_NO_UI is set in dwFlags, no UI will be shown. Otherwise,
// user will be prompted for input through a wizard.
//
// dwFlags IN Required: See dwFlags values above.
//
// hwndParent IN Optional: The parent window handle.
//
// pwszWizardTitle IN Optional: The title of the wizard.
//
// pDigitalSignInfo IN Required: The information about the signing process.
//
// ppSignContext OUT Optional: The context pointer points to the signed
// blob.
//
//-----------------------------------------------------------------------------
BOOL
WINAPI
CryptUIWizDigitalSign(
IN DWORD dwFlags,
IN OPTIONAL HWND hwndParent,
IN OPTIONAL LPCWSTR pwszWizardTitle,
IN PCCRYPTUI_WIZ_DIGITAL_SIGN_INFO pDigitalSignInfo,
OUT OPTIONAL PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT *ppSignContext
);
BOOL
WINAPI
CryptUIWizFreeDigitalSignContext(
IN PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT pSignContext
);
#include <poppack.h>
#ifdef __cplusplus
} // Balance extern "C" above
#endif
#endif // _CRYPTUIAPI_H_