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.
225 lines
5.7 KiB
225 lines
5.7 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows NT Security
|
|
// Copyright (C) Microsoft Corporation, 1997 - 1999
|
|
//
|
|
// File: scstore.h
|
|
//
|
|
// Contents: Smart Card Store Provider
|
|
//
|
|
// History: 11-25-1997 kirtd Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
#if !defined(__SCSTORE_H__)
|
|
#define __SCSTORE_H__
|
|
|
|
//
|
|
// Store provider open store function name
|
|
//
|
|
|
|
#define SMART_CARD_OPEN_STORE_PROV_FUNC "SmartCardProvOpenStore"
|
|
|
|
//
|
|
// CSmartCardStore. This class implements all callbacks for the Smart Card
|
|
// Store provider. A pointer to an instance of this class is used as the
|
|
// hStoreProv parameter for the callback functions implemented
|
|
//
|
|
|
|
class CSmartCardStore
|
|
{
|
|
public:
|
|
|
|
//
|
|
// Construction
|
|
//
|
|
|
|
CSmartCardStore ();
|
|
~CSmartCardStore ();
|
|
|
|
//
|
|
// Store functions
|
|
//
|
|
|
|
BOOL OpenStore (
|
|
LPCSTR pszStoreProv,
|
|
DWORD dwMsgAndCertEncodingType,
|
|
HCRYPTPROV hCryptProv,
|
|
DWORD dwFlags,
|
|
const void* pvPara,
|
|
HCERTSTORE hCertStore,
|
|
PCERT_STORE_PROV_INFO pStoreProvInfo
|
|
);
|
|
|
|
VOID CloseStore (DWORD dwFlags);
|
|
|
|
BOOL DeleteCert (PCCERT_CONTEXT pCertContext, DWORD dwFlags);
|
|
|
|
BOOL SetCertProperty (
|
|
PCCERT_CONTEXT pCertContext,
|
|
DWORD dwPropId,
|
|
DWORD dwFlags,
|
|
const void* pvPara
|
|
);
|
|
|
|
BOOL WriteCert (PCCERT_CONTEXT pCertContext, DWORD dwFlags);
|
|
|
|
BOOL StoreControl (DWORD dwFlags, DWORD dwCtrlType, LPVOID pvCtrlPara);
|
|
|
|
BOOL Resync ();
|
|
|
|
private:
|
|
|
|
//
|
|
// Object lock
|
|
//
|
|
|
|
CRITICAL_SECTION m_StoreLock;
|
|
|
|
//
|
|
// Open Store flags
|
|
//
|
|
|
|
DWORD m_dwOpenFlags;
|
|
|
|
//
|
|
// Open filter parameters
|
|
//
|
|
|
|
LPWSTR m_pwszCardName;
|
|
LPWSTR m_pwszProvider;
|
|
DWORD m_dwProviderType;
|
|
LPWSTR m_pwszContainer;
|
|
|
|
//
|
|
// Cache Store
|
|
//
|
|
|
|
HCERTSTORE m_hCacheStore;
|
|
|
|
//
|
|
// Private methods
|
|
//
|
|
|
|
BOOL FillCacheStore (BOOL fClearCache);
|
|
|
|
BOOL ModifyCertOnCard (PCCERT_CONTEXT pCertContext, BOOL fDelete);
|
|
};
|
|
|
|
//
|
|
// Smart Card Store Provider functions
|
|
//
|
|
|
|
BOOL WINAPI SmartCardProvOpenStore (
|
|
IN LPCSTR pszStoreProv,
|
|
IN DWORD dwMsgAndCertEncodingType,
|
|
IN HCRYPTPROV hCryptProv,
|
|
IN DWORD dwFlags,
|
|
IN const void* pvPara,
|
|
IN HCERTSTORE hCertStore,
|
|
IN OUT PCERT_STORE_PROV_INFO pStoreProvInfo
|
|
);
|
|
|
|
void WINAPI SmartCardProvCloseStore (
|
|
IN HCERTSTOREPROV hStoreProv,
|
|
IN DWORD dwFlags
|
|
);
|
|
|
|
BOOL WINAPI SmartCardProvDeleteCert (
|
|
IN HCERTSTOREPROV hStoreProv,
|
|
IN PCCERT_CONTEXT pCertContext,
|
|
IN DWORD dwFlags
|
|
);
|
|
|
|
BOOL WINAPI SmartCardProvSetCertProperty (
|
|
IN HCERTSTOREPROV hStoreProv,
|
|
IN PCCERT_CONTEXT pCertContext,
|
|
IN DWORD dwPropId,
|
|
IN DWORD dwFlags,
|
|
IN const void* pvData
|
|
);
|
|
|
|
BOOL WINAPI SmartCardProvWriteCert (
|
|
IN HCERTSTOREPROV hStoreProv,
|
|
IN PCCERT_CONTEXT pCertContext,
|
|
IN DWORD dwFlags
|
|
);
|
|
|
|
BOOL WINAPI SmartCardProvStoreControl (
|
|
IN HCERTSTOREPROV hStoreProv,
|
|
IN DWORD dwFlags,
|
|
IN DWORD dwCtrlType,
|
|
IN LPVOID pvCtrlPara
|
|
);
|
|
|
|
//
|
|
// Smart Card Store Provider Function table
|
|
//
|
|
|
|
static void* const rgpvSmartCardProvFunc[] = {
|
|
|
|
// CERT_STORE_PROV_CLOSE_FUNC 0
|
|
SmartCardProvCloseStore,
|
|
// CERT_STORE_PROV_READ_CERT_FUNC 1
|
|
NULL,
|
|
// CERT_STORE_PROV_WRITE_CERT_FUNC 2
|
|
SmartCardProvWriteCert,
|
|
// CERT_STORE_PROV_DELETE_CERT_FUNC 3
|
|
SmartCardProvDeleteCert,
|
|
// CERT_STORE_PROV_SET_CERT_PROPERTY_FUNC 4
|
|
SmartCardProvSetCertProperty,
|
|
// CERT_STORE_PROV_READ_CRL_FUNC 5
|
|
NULL,
|
|
// CERT_STORE_PROV_WRITE_CRL_FUNC 6
|
|
NULL,
|
|
// CERT_STORE_PROV_DELETE_CRL_FUNC 7
|
|
NULL,
|
|
// CERT_STORE_PROV_SET_CRL_PROPERTY_FUNC 8
|
|
NULL,
|
|
// CERT_STORE_PROV_READ_CTL_FUNC 9
|
|
NULL,
|
|
// CERT_STORE_PROV_WRITE_CTL_FUNC 10
|
|
NULL,
|
|
// CERT_STORE_PROV_DELETE_CTL_FUNC 11
|
|
NULL,
|
|
// CERT_STORE_PROV_SET_CTL_PROPERTY_FUNC 12
|
|
NULL,
|
|
// CERT_STORE_PROV_CONTROL_FUNC 13
|
|
SmartCardProvStoreControl
|
|
};
|
|
|
|
#define SMART_CARD_PROV_FUNC_COUNT (sizeof(rgpvSmartCardProvFunc) / \
|
|
sizeof(rgpvSmartCardProvFunc[0]))
|
|
|
|
//
|
|
// Smart Card Store Helper Functions
|
|
//
|
|
|
|
BOOL WINAPI
|
|
SCStoreParseOpenFilter (
|
|
IN LPWSTR pwszOpenFilter,
|
|
OUT LPWSTR* ppwszCardName,
|
|
OUT LPWSTR* ppwszProvider,
|
|
OUT DWORD* pdwProviderType,
|
|
OUT LPWSTR* ppwszContainer
|
|
);
|
|
|
|
BOOL WINAPI
|
|
SCStoreAcquireHandleForCertKeyPair (
|
|
IN HCRYPTPROV hContainer,
|
|
IN PCCERT_CONTEXT pCertContext,
|
|
OUT HCRYPTKEY* phKeyPair
|
|
);
|
|
|
|
BOOL WINAPI
|
|
SCStoreWriteCertToCard (
|
|
IN OPTIONAL PCCERT_CONTEXT pCertContext,
|
|
IN HCRYPTKEY hKeyPair
|
|
);
|
|
|
|
//
|
|
// Open filter parsing definitions
|
|
//
|
|
|
|
#define PARSE_ELEM 4
|
|
|
|
#endif
|