|
|
//+----------------------------------------------------------------------------
//
// Copyright (C) 1996, Microsoft Corporation
//
// File: cacheapi.h
//
// Contents: The definitions of functions and structures which are used
// external to the core of this library.
//
// Functions:
//
// History: 8/28/96 JayH created
//
// Todo:
//
// Bugs:
//
//-----------------------------------------------------------------------------
#ifdef __cplusplus
extern "C" { #endif //__cplusplus
typedef DWORD HCACHE; typedef HCACHE FAR * LPHCACHE; typedef DWORD HFORMAT; //
// CACHE_TYPE is used to identify the type of cache entry being stored. Currently
// the only cache entry type is USERNAME_PASSWORD. This type uses a secret blob
// to hold the password, and does not store anything in the nonsecret blob.
//
typedef enum _CACHE_TYPE { CT_NONE, CT_USERNAME_PASSWORD } CACHE_TYPE;
//
// HFORMAT's for hashes are derived by concating two words which represent the
// authentication algorithm they are used for and the version of the hash algorithm
//
#define HFORMAT_DPA_HASH_1 0x00010001
#define HFORMAT_RPA_HASH_1 0x00020001
#define CR_SAVE_SECRET 0x00000001
#define CR_DELETE_PEERS 0x00000002
#define CL_STORED_CACHE 0x00000010
#define CL_CONFIRMED_CACHE 0x00000020
//+------------------------------------------------------------
//
// Function: OpenCommonCache
//
// Synopsis: This function opens the common cache and performs
// everything necessary to get it to work. That means if this
// is the first time it is being called, it will call
// InitCacheLibrary. This keeps a ref count.
//
// Arguments: szUserName -- Presently unused. This can be used to support
// the sharing of the cache between users.
// phCache -- The handle to the opened common cache is
// returned here.
// Returns: Nothing.
//
// History: Jayhoo Created 8/28/1996
//
//-------------------------------------------------------------
HRESULT OpenCommonCache(LPTSTR szUserName, LPHCACHE phCache);
//+------------------------------------------------------------
//
// Function: CloseCommonCache
//
// Synopsis: This function closes the cache and decrements the ref count on
// it. If the reference count reaches zero, the library will be
// closed.
//
// Arguments: szUserName -- Presently unused. This can be used to support
// the sharing of the commmon cache between users.
// phCache -- The handle to the opened common cache is
// returned here.
// Returns: Nothing.
//
// History: Jayhoo Created 8/28/1996
//
//-------------------------------------------------------------
HRESULT CloseCommonCache(HCACHE hCache);
//+------------------------------------------------------------
//
// Function: SetCacheEntry
//
// Synopsis: This function sets an entry in the cache. If the entry does
// not already exist, it will create the entry. It sets the entry
// in the persistent cache and the non-persistent cache, and it
// creates hashed versions of the secret for every hash secret
// format that it knows about.
//
// Arguments: hCache Handle of a valid, opened cache
//
// szEntryName The name of the entry, currently this must be
// this must be the username since that is the
// only supported form of cache entry.
//
// szListName This list of entries which that entry is valid
// within. Currently this must be the domain name
//
// ctCacheType The type of cache entry being used. This must
// be CT_USERNAME_PASSWORD.
//
// lpbSecretOpaque The secret information to be hashed before
// it is stored (Sssshhh!)
//
// dwSizeSecretOpaque The size of the secret information
//
// lpbOpaque The information which doesn't need to be hashed
//
// dwSizeOpaque The size of the opaque info
//
// fCacheReq The flags about how this should be cached. The
// only defined flag currently is CR_SAVE_SECRET
//
// fCacheLoc Allows the caller to specify where the cache
// should be saved to. It is a bitmask of
// CL_PERSISTENT and CL_NONPERSISTENT
//
// History: Jayhoo Created 8/28/1996
//
//-------------------------------------------------------------
HRESULT SetCacheEntry(HCACHE hCache, LPTSTR szEntryName, LPTSTR szListName, CACHE_TYPE ctCacheType, LPBYTE lpbSecretOpaque, DWORD dwSizeSecretOpaque, LPBYTE lpbOpaque, DWORD dwSizeOpaque, DWORD fCacheReq, DWORD fCacheLoc);
//+------------------------------------------------------------
//
// Function: DeleteCacheEntry
//
// Synopsis: This function gets an entry in the cache. If the entry does
// not already exist, it returns failure. If the username
// entered into the function is null, the default user will be
// returned. Currently the default user is the only one in the
// cache. You can only get secret information in the hashed
// format.
//
// Arguments: hCache Handle of a valid, opened cache
//
// szEntryName The name of the entry to delete
//
// szListName The name of the list that entry is in
//
// ctCacheType The type of the entry
//
// fCacheLoc Allows the caller to specify where the cache
// should be deleted from. It is a bitmask of
// CL_PERSISTENT and CL_NONPERSISTENT
//
// History: Jayhoo Created 8/28/1996
//
//-------------------------------------------------------------
HRESULT DeleteCacheEntry(HCACHE hCache, LPTSTR szEntryName, LPTSTR szListName, CACHE_TYPE ctCacheType, DWORD fCacheLoc);
//+------------------------------------------------------------
//
// Function: GetCacheEntry
//
// Synopsis: This function gets an entry in the cache. If the entry does
// not already exist, it returns failure. If the username
// entered into the function is null, the default user will be
// returned. Currently the default user is the only one in the
// cache. You can only get secret information in the hashed
// format.
//
// Arguments: hCache Handle of a valid, opened cache
//
// hFormat Handle of the format we wish to use
//
// szEntryName The name of the entry, currently this must be
// this must be the username since that is the
// only supported form of cache entry.
//
// szListName This list of entries which that entry is valid
// within. Currently this must be the domain name
//
// ctCacheType The type of cache entry being used. This must
// be CT_USERNAME_PASSWORD.
//
// lppbSecretOpaque Used to return the hashed secret. The
// caller must free this by calling the
// ReleaseBuffer function.
//
// lpdwSizeSecretOpaque returns he size of the secret data
//
// lppbOpaque Used to return the insecure information. The
// caller must free this by calling the
// ReleaseBuffer fucntion
//
// lpdwSizeOpaque Returns the size of the opaque info
//
// pfCacheReq Returns the flags about how this should be
// cached. The only defined flag currently is
// CR_SAVE_SECRET
//
// fCacheLoc Allows the caller to specify where the cache
// should be loaded from. It is a bitmask of
// CL_PERSISTENT and CL_NONPERSISTENT
//
// History: Jayhoo Created 8/28/1996
//
//-------------------------------------------------------------
HRESULT GetCacheEntry(HCACHE hCache, HFORMAT hFormat, LPTSTR szEntryName, LPTSTR szListName, CACHE_TYPE ctCacheType, LPBYTE FAR *lppbSecretOpaque, LPDWORD lpdwSizeSecretOpaque, LPBYTE FAR *lppbOpaque, LPDWORD lpdwSizeOpaque, LPTSTR FAR *lpszEntryName, LPDWORD pfCacheReq, DWORD fCacheLoc);
//+------------------------------------------------------------
//
// Function: AllocateBuffer
//
// Synopsis: This function is used to allocate all memory in the cache
// library. This gives us a centralized way to optimize memory
// allocation. Note that classes might use a cpool.
//
// Arguments: dwSizeBuffer The size of the buffer to be allocated
//
// History: Jayhoo Created 8/28/1996
//
//-------------------------------------------------------------
LPBYTE AllocateBuffer(DWORD dwSizeBuffer);
//+------------------------------------------------------------
//
// Function: ReleaseBuffer
//
// Synopsis: This function will release the buffer. This API is exposed
// to the world so that we can allocate and return buffers and
// have some way to be rid of them.
//
// Arguments: lpbBuffer The buffer to be released
//
// History: Jayhoo Created 8/28/1996
//
//-------------------------------------------------------------
HRESULT ReleaseBuffer(LPBYTE lpbBuffer);
//+------------------------------------------------------------
//
// Function: HashSecret
//
// Synopsis: This function will hash the secret for the caller. This
// is done so that the hashing funciton will not be implemented
// in multiple files.
//
// Arguments: lpbBuffer The buffer to be released
//
// History: Jayhoo Created 8/28/1996
//
//-------------------------------------------------------------
HRESULT HashSecret(HFORMAT hFormat, CACHE_TYPE ctCacheType, LPBYTE lpbSecretBlob, DWORD dwSizeSecret, LPBYTE FAR * lppbHashedBlob, LPDWORD lpdwSizeHashedBlob);
//+------------------------------------------------------------
//
// Function: ChangeEntryName
//
// Synopsis: This function will change the name of an entry in a given
// list of a given cache type, for all formats in which it exists
//
// Arguments: lpbBuffer The buffer to be released
//
// History: Jayhoo Created 8/28/1996
//
//-------------------------------------------------------------
HRESULT ChangeEntryName(HCACHE hCache, CACHE_TYPE ctCacheType, LPTSTR szStartEntryName, LPTSTR szEndEntryName, LPTSTR szListName, DWORD fCacheReq);
//+------------------------------------------------------------
//
// Function: ConfirmCacheEntry
//
// Synopsis: This function will copy an entry in the stored cache to
// the confirmed cache, for all hashed secret formats that
// the cache type supports.
//
// Arguments: hCache Handle of a valid, opened cache
//
// szEntryName The name of the entry, currently this must be
// this must be the username since that is the
// only supported form of cache entry.
//
// szListName This list of entries which that entry is valid
// within. Currently this must be the domain name
//
// ctCacheType The type of cache entry being used. This must
// be CT_USERNAME_PASSWORD.
//
// History: Jayhoo Created 8/28/1996
//
//-------------------------------------------------------------
HRESULT ConfirmCacheEntry(HCACHE hCache, LPTSTR szEntryName, LPTSTR szListName, CACHE_TYPE ctCacheType, DWORD fCacheReq);
#ifdef __cplusplus
} #endif //__cplusplus
|