347 lines
11 KiB
C
347 lines
11 KiB
C
//+----------------------------------------------------------------------------
|
|
//
|
|
// 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
|