|
|
//+-------------------------------------------------------------------------
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1997 - 1999
//
// File: certprot.h
//
// Contents: Certificate Protection APIs
//
// APIs: I_CertProtectFunction
// I_CertCltProtectFunction
// I_CertSrvProtectFunction
//
// History: 27-Nov-97 philh created
//--------------------------------------------------------------------------
#ifndef __CERTPROT_H__
#define __CERTPROT_H__
#ifdef __cplusplus
extern "C" { #endif
//+-------------------------------------------------------------------------
// Calls the services process to do a protected certificate function,
// such as, add or delete a protected root certificate.
//
// CryptMemFree must be called to free the returned *ppbOut.
//--------------------------------------------------------------------------
BOOL WINAPI I_CertProtectFunction( IN DWORD dwFuncId, IN DWORD dwFlags, IN OPTIONAL LPCWSTR pwszIn, IN OPTIONAL BYTE *pbIn, IN DWORD cbIn, OUT OPTIONAL BYTE **ppbOut, OUT OPTIONAL DWORD *pcbOut );
#define CERT_PROT_INIT_ROOTS_FUNC_ID 1
#define CERT_PROT_PURGE_LM_ROOTS_FUNC_ID 2
#define CERT_PROT_ADD_ROOT_FUNC_ID 3
#define CERT_PROT_DELETE_ROOT_FUNC_ID 4
#define CERT_PROT_DELETE_UNKNOWN_ROOTS_FUNC_ID 5
#define CERT_PROT_ROOT_LIST_FUNC_ID 6
#define CERT_PROT_ADD_ROOT_IN_CTL_FUNC_ID 7
#define CERT_PROT_LOG_EVENT_FUNC_ID 8
//+-------------------------------------------------------------------------
// CERT_PROT_INIT_ROOTS_FUNC_ID
//
// Initialize the protected list of CurrentUser roots. Note, no UI.
//
// No IN/OUT parameters.
//--------------------------------------------------------------------------
//+-------------------------------------------------------------------------
// CERT_PROT_PURGE_LM_ROOTS_FUNC_ID
//
// Purge all CurrentUser roots from the protected list that also exist
// in the LocalMachine SystemRegistry "Root" store. Also removes duplicated
// certificates from the CurrentUser SystemRegistry "Root" store.
//
// Note, no UI. Purging can be disabled by setting the
// CERT_PROT_ROOT_INHIBIT_PURGE_LM_FLAG in the registry's ProtectedRootFlags
// value.
//
// No IN/OUT parameters.
//
// Even if purging is disabled, the protected list of roots is still
// initialized.
//--------------------------------------------------------------------------
//+-------------------------------------------------------------------------
// CERT_PROT_ADD_ROOT_FUNC_ID
//
// Add the specified certificate to the CurrentUser SystemRegistry "Root"
// store and the protected list of roots. The user is prompted before doing
// the add.
//
// pbIn and cbIn must be updated with the pointer to and length of the
// serialized certificate context to be added. No other IN/OUT parameters.
//--------------------------------------------------------------------------
//+-------------------------------------------------------------------------
// CERT_PROT_DELETE_ROOT_FUNC_ID
//
// Delete the specified certificate from the CurrentUser SystemRegistry "Root"
// store and the protected list of roots. The user is prompted before doing
// the delete.
//
// pbIn and cbIn must be updated with the pointer to and length of the
// certificate's SHA1 hash property. No other IN/OUT parameters.
//--------------------------------------------------------------------------
//+-------------------------------------------------------------------------
// CERT_PROT_DELETE_UNKNOWN_ROOTS_FUNC_ID
//
// Delete all CurrentUser roots from the protected list that don't also
// exist in the CurrentUser SystemRegistry "Root" store. The user is
// prompted before doing the delete.
//
// No IN/OUT parameters.
//--------------------------------------------------------------------------
//+-------------------------------------------------------------------------
// CERT_PROT_ROOT_LIST_FUNC_ID
//
// Add or remove the signed list of certificates to/from the CurrentUser
// SystemRegistry "Root" store and the protected list of roots. The user
// isn't prompted before doing the add or remove.
//
// pbIn and cbIn must be updated with the pointer to and length of the
// serialized CTL containing the signed list of roots to be added or
// removed. No other IN/OUT parameters.
//
// CURRENTLY NOT SUPPORTED!!!
//--------------------------------------------------------------------------
//+-------------------------------------------------------------------------
// CERT_PROT_ADD_ROOT_IN_CTL_FUNC_ID
//
// Add the certificate in the Auto Update CTL to the HKLM AuthRoot store.
//
// pbIn and cbIn must be updated with the pointer to and length of the
// serialized X.509 certificate immediately followed by the
// serialized CTL. No other IN/OUT parameters.
//--------------------------------------------------------------------------
//+-------------------------------------------------------------------------
// CERT_PROT_LOG_EVENT_FUNC_ID
//
// Logs a crypt32 event.
//
// pbIn and cbIn must be updated to point to the following
// CERT_PROT_EVENT_LOG_PARA data structure. It contains the parameters
// passed to advapi32!ReportEventW.
//
// wNumString NULL terminated unicode strings immediately follow. Followed by
// dwDataSize binary data bytes.
//
// wCategory, wNumStrings and dwDataSize are optional.
//--------------------------------------------------------------------------
typedef struct _CERT_PROT_EVENT_LOG_PARA { WORD wType; WORD wCategory; // OPTIONAL, may be 0
DWORD dwEventID; WORD wNumStrings; // OPTIONAL, may be 0
WORD wPad1; DWORD dwDataSize; // OPTIONAL, may be 0
} CERT_PROT_EVENT_LOG_PARA, *PCERT_PROT_EVENT_LOG_PARA;
//+-------------------------------------------------------------------------
// Called from the client process to do the RPC to the server process.
//--------------------------------------------------------------------------
BOOL WINAPI I_CertCltProtectFunction( IN DWORD dwFuncId, IN DWORD dwFlags, IN OPTIONAL LPCWSTR pwszIn, IN OPTIONAL BYTE *pbIn, IN DWORD cbIn, OUT OPTIONAL BYTE **ppbOut, OUT OPTIONAL DWORD *pcbOut );
typedef void __RPC_FAR * (__RPC_USER *PFN_CERT_PROT_MIDL_USER_ALLOC)( IN size_t cb ); typedef void (__RPC_USER *PFN_CERT_PROT_MIDL_USER_FREE)( IN void __RPC_FAR *pv );
//+-------------------------------------------------------------------------
// Called from the services process to process a protected certificate
// function.
//
// Returns the error status, ie, not returned in LastError.
//--------------------------------------------------------------------------
DWORD WINAPI I_CertSrvProtectFunction( IN handle_t hRpc, IN DWORD dwFuncId, IN DWORD dwFlags, IN LPCWSTR pwszIn, IN BYTE *pbIn, IN DWORD cbIn, OUT BYTE **ppbOut, OUT DWORD *pcbOut, IN PFN_CERT_PROT_MIDL_USER_ALLOC pfnAlloc, IN PFN_CERT_PROT_MIDL_USER_FREE pfnFree );
typedef DWORD (WINAPI *PFN_CERT_SRV_PROTECT_FUNCTION)( IN handle_t hRpc, IN DWORD dwFuncId, IN DWORD dwFlags, IN LPCWSTR pwszIn, IN BYTE *pbIn, IN DWORD cbIn, OUT BYTE **ppbOut, OUT DWORD *pcbOut, IN PFN_CERT_PROT_MIDL_USER_ALLOC pfnAlloc, IN PFN_CERT_PROT_MIDL_USER_FREE pfnFree );
#ifdef __cplusplus
} // Balance extern "C" above
#endif
#endif
|