//+--------------------------------------------------------------------------- // // Microsoft Windows NT Security // Copyright (C) Microsoft Corporation, 1997 - 1999 // // File: rporprov.h // // Contents: Remote PKI Object Retrieval Provider Prototypes // // History: 23-Jul-97 kirtd Created // 01-Jan-02 philh Moved from wininet to winhttp // //---------------------------------------------------------------------------- #if !defined(__RPORPROV_H__) #define __RPORPROV_H__ #include #if defined(__cplusplus) extern "C" { #endif // The cached URL Blob Arrays are stored at: // - %UserProfile%\Microsoft\CryptnetUrlCache\MetaData // - %UserProfile%\Microsoft\CryptnetUrlCache\Content // // Where each filename is the ASCII HEX of the MD5 hash of its Unicode URL // string excluding the NULL terminator. #define SCHEME_URL_FILENAME_LEN (MD5DIGESTLEN * 2 + 1) #define SCHEME_CRYPTNET_URL_CACHE_DIR L"\\Microsoft\\CryptnetUrlCache\\" #define SCHEME_META_DATA_SUBDIR L"MetaData" #define SCHEME_CCH_META_DATA_SUBDIR (wcslen(SCHEME_META_DATA_SUBDIR)) #define SCHEME_CONTENT_SUBDIR L"Content" #define SCHEME_CCH_CONTENT_SUBDIR (wcslen(SCHEME_CONTENT_SUBDIR)) // The MetaData file consists of: // - SCHEME_CACHE_META_DATA_HEADER (cbSize bytes in length) // - DWORD rgcbBlob[cBlob] - length of each blob in the Content file // - BYTE rgbUrl[cbUrl] - NULL terminated Unicode URL // The Content file consists of: // BYTE rgbBlob[][cBlob] - where the length of each blob is obtained from // rgcbBlob[] in the MetaData file typedef struct _SCHEME_CACHE_META_DATA_HEADER { DWORD cbSize; DWORD dwMagic; DWORD cBlob; DWORD cbUrl; FILETIME LastSyncTime; } SCHEME_CACHE_META_DATA_HEADER, *PSCHEME_CACHE_META_DATA_HEADER; #define SCHEME_CACHE_META_DATA_MAGIC 0x20020101 // // Scheme provider prototypes // typedef BOOL (WINAPI *PFN_SCHEME_RETRIEVE_FUNC) ( IN LPCWSTR pwszUrl, IN LPCSTR pszObjectOid, IN DWORD dwRetrievalFlags, IN DWORD dwTimeout, OUT PCRYPT_BLOB_ARRAY pObject, OUT PFN_FREE_ENCODED_OBJECT_FUNC* ppfnFreeObject, OUT LPVOID* ppvFreeContext, IN HCRYPTASYNC hAsyncRetrieve, IN PCRYPT_CREDENTIALS pCredentials, IN PCRYPT_RETRIEVE_AUX_INFO pAuxInfo ); typedef BOOL (WINAPI *PFN_CONTEXT_CREATE_FUNC) ( IN LPCSTR pszObjectOid, IN DWORD dwRetrievalFlags, IN PCRYPT_BLOB_ARRAY pObject, OUT LPVOID* ppvContext ); // // Generic scheme provider utility functions // BOOL WINAPI SchemeCacheCryptBlobArray ( IN LPCWSTR pwszUrl, IN DWORD dwRetrievalFlags, IN PCRYPT_BLOB_ARRAY pcba, IN PCRYPT_RETRIEVE_AUX_INFO pAuxInfo ); BOOL WINAPI SchemeRetrieveCachedCryptBlobArray ( IN LPCWSTR pwszUrl, IN DWORD dwRetrievalFlags, OUT PCRYPT_BLOB_ARRAY pcba, OUT PFN_FREE_ENCODED_OBJECT_FUNC* ppfnFreeObject, OUT LPVOID* ppvFreeContext, IN OUT PCRYPT_RETRIEVE_AUX_INFO pAuxInfo ); BOOL WINAPI SchemeRetrieveUncachedAuxInfo ( IN PCRYPT_RETRIEVE_AUX_INFO pAuxInfo ); BOOL WINAPI SchemeDeleteUrlCacheEntry ( IN LPCWSTR pwszUrl ); VOID WINAPI SchemeFreeEncodedCryptBlobArray ( IN LPCSTR pszObjectOid, IN PCRYPT_BLOB_ARRAY pcba, IN LPVOID pvFreeContext ); BOOL WINAPI SchemeGetPasswordCredentialsW ( IN PCRYPT_CREDENTIALS pCredentials, OUT PCRYPT_PASSWORD_CREDENTIALSW pPasswordCredentials, OUT BOOL* pfFreeCredentials ); VOID WINAPI SchemeFreePasswordCredentialsW ( IN PCRYPT_PASSWORD_CREDENTIALSW pPasswordCredentials ); BOOL WINAPI SchemeGetAuthIdentityFromPasswordCredentialsW ( IN PCRYPT_PASSWORD_CREDENTIALSW pPasswordCredentials, OUT PSEC_WINNT_AUTH_IDENTITY_W pAuthIdentity ); VOID WINAPI SchemeFreeAuthIdentityFromPasswordCredentialsW ( IN PCRYPT_PASSWORD_CREDENTIALSW pPasswordCredentials, IN OUT PSEC_WINNT_AUTH_IDENTITY_W pAuthIdentity ); // // LDAP // #include // // HTTP, HTTPS // #include // // Win32 File I/O // #include // // Context Provider prototypes // // // Any, controlled via fQuerySingleContext and dwExpectedContentTypeFlags // BOOL WINAPI CreateObjectContext ( IN DWORD dwRetrievalFlags, IN PCRYPT_BLOB_ARRAY pObject, IN DWORD dwExpectedContentTypeFlags, IN BOOL fQuerySingleContext, OUT LPVOID* ppvContext ); // // Certificate // BOOL WINAPI CertificateCreateObjectContext ( IN LPCSTR pszObjectOid, IN DWORD dwRetrievalFlags, IN PCRYPT_BLOB_ARRAY pObject, OUT LPVOID* ppvContext ); // // CTL // BOOL WINAPI CTLCreateObjectContext ( IN LPCSTR pszObjectOid, IN DWORD dwRetrievalFlags, IN PCRYPT_BLOB_ARRAY pObject, OUT LPVOID* ppvContext ); // // CRL // BOOL WINAPI CRLCreateObjectContext ( IN LPCSTR pszObjectOid, IN DWORD dwRetrievalFlags, IN PCRYPT_BLOB_ARRAY pObject, OUT LPVOID* ppvContext ); // // PKCS7 // BOOL WINAPI Pkcs7CreateObjectContext ( IN LPCSTR pszObjectOid, IN DWORD dwRetrievalFlags, IN PCRYPT_BLOB_ARRAY pObject, OUT LPVOID* ppvContext ); // // CAPI2 objects // BOOL WINAPI Capi2CreateObjectContext ( IN LPCSTR pszObjectOid, IN DWORD dwRetrievalFlags, IN PCRYPT_BLOB_ARRAY pObject, OUT LPVOID* ppvContext ); #if defined(__cplusplus) } #endif #endif