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.
95 lines
2.6 KiB
95 lines
2.6 KiB
#ifndef _LSAKEYS_H_
|
|
#define _LSAKEYS_H_
|
|
|
|
#ifndef _CHICAGO_
|
|
|
|
// This class is to help setup retrieve the old-style LSA keys and convert them
|
|
// into the new MetaData keys.
|
|
|
|
// error codes
|
|
enum {
|
|
KEYLSA_SUCCESS = 0,
|
|
KEYLSA_INVALID_VERSION,
|
|
KEYLSA_NO_MORE_KEYS,
|
|
KEYLSA_UNABLE_TO_OPEN_POLICY
|
|
};
|
|
|
|
|
|
// Note: once you call LoadFirstKey, there is an open LSA policy until the object is deleted.
|
|
// This is done for speed purposes. So if you don't want the policy hanging around, don't
|
|
// keep the object around.
|
|
|
|
class CLSAKeys : public CObject
|
|
{
|
|
public:
|
|
|
|
// construction
|
|
CLSAKeys();
|
|
~CLSAKeys();
|
|
|
|
// loading the keys
|
|
// LoadFirstKey loads the first key on the specified target machine. Until
|
|
// this method is called, the data values in the object are meaningless
|
|
DWORD LoadFirstKey( PWCHAR pszwTargetMachine );
|
|
|
|
// LoadNextKey loads the next key on the target machine specified in LoadFirstKey
|
|
// LoadNextKey automatically cleans up the memory used by the previous key.
|
|
DWORD LoadNextKey();
|
|
|
|
// DeleteAllLSAKeys deletes ALL remenents of the LSA keys in the Metabase.
|
|
// (not including, of course anything written out there in the future as part
|
|
// of some backup scheme when uninstalling). Call this only AFTER ALL the keys
|
|
// have been converted to the metabase. They will no longer be there after
|
|
// this routine is used.
|
|
DWORD DeleteAllLSAKeys();
|
|
|
|
// the data values that are to be filled in.
|
|
// The public portion of the key - may be NULL and zero size
|
|
DWORD m_cbPublic;
|
|
PVOID m_pPublic;
|
|
|
|
// the private portion of the key
|
|
DWORD m_cbPrivate;
|
|
PVOID m_pPrivate;
|
|
|
|
// the password
|
|
DWORD m_cbPassword;
|
|
PVOID m_pPassword;
|
|
|
|
// the certificate request - may be NULL and zero size
|
|
DWORD m_cbRequest;
|
|
PVOID m_pRequest;
|
|
|
|
|
|
// the friendly name
|
|
CHAR m_szFriendlyName[256];
|
|
|
|
// the name that should be given to the metabase object for this key
|
|
CHAR m_szMetaName[256];
|
|
|
|
private:
|
|
// clean up the currently loaded key
|
|
void UnloadKey();
|
|
|
|
// delete utilities
|
|
DWORD DeleteKMKeys();
|
|
DWORD DeleteServerKeys();
|
|
|
|
// LSA Utility routines
|
|
HANDLE HOpenLSAPolicy( PWCHAR pszwServer, DWORD *pErr );
|
|
BOOL FCloseLSAPolicy( HANDLE hPolicy, DWORD *pErr );
|
|
|
|
BOOL FStoreLSASecret( HANDLE hPolicy, WCHAR* pszwSecretName, void* pvData, WORD cbData, DWORD *pErr );
|
|
PLSA_UNICODE_STRING FRetrieveLSASecret( HANDLE hPolicy, WCHAR* pszwSecretName, DWORD *pErr );
|
|
|
|
void DisposeLSAData( PVOID pData );
|
|
|
|
// the handle to the LSA policy
|
|
HANDLE m_hPolicy;
|
|
|
|
// index of the current key
|
|
DWORD m_iKey;
|
|
};
|
|
|
|
#endif //_CHICAGO_
|
|
#endif //_LSAKEYS_H_
|