VBoxCredProv.h revision f71804b40936663bf3cba489497c7b779e6f1f0a
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync//
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync// PARTICULAR PURPOSE.
c58f1213e628a545081c70e26c6b67a841cff880vboxsync//
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync// Copyright (c) Microsoft Corporation. All rights reserved.
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync//
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync// Modifications (c) 2009-2010 Oracle Corporation
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync//
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync#ifndef ___VBoxCredProv_h
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync#define ___VBoxCredProv_h
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync#include <credentialprovider.h>
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync#include <windows.h>
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync#include <strsafe.h>
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync#include "VBoxCredential.h"
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync#include "VBoxCredPoller.h"
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync#include "helpers.h"
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsyncclass VBoxCredProv : public ICredentialProvider
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync{
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync public:
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync // IUnknown
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync STDMETHOD_(ULONG, AddRef)()
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync {
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync return m_cRef++;
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync }
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync STDMETHOD_(ULONG, Release)()
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync {
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync LONG cRef = m_cRef--;
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync if (!cRef)
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync {
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync delete this;
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync }
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync return cRef;
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync }
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync STDMETHOD (QueryInterface)(REFIID riid, void **ppv)
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync {
4d939f327b6fe2b8201ab00e2d7e7d12b6d47d23vboxsync HRESULT hr;
if (IID_IUnknown == riid ||
IID_ICredentialProvider == riid)
{
*ppv = this;
reinterpret_cast<IUnknown*>(*ppv)->AddRef();
hr = S_OK;
}
else
{
*ppv = NULL;
hr = E_NOINTERFACE;
}
return hr;
}
public:
// ICredentialProvider
IFACEMETHODIMP SetUsageScenario(CREDENTIAL_PROVIDER_USAGE_SCENARIO cpus, DWORD dwFlags);
IFACEMETHODIMP SetSerialization(const CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION *pcpcs);
IFACEMETHODIMP Advise(__in ICredentialProviderEvents *pcpe, UINT_PTR upAdviseContext);
IFACEMETHODIMP UnAdvise();
IFACEMETHODIMP GetFieldDescriptorCount(__out DWORD* pdwCount);
IFACEMETHODIMP GetFieldDescriptorAt(DWORD dwIndex, __deref_out CREDENTIAL_PROVIDER_FIELD_DESCRIPTOR **ppcpfd);
IFACEMETHODIMP GetCredentialCount(__out DWORD *pdwCount,
__out DWORD *pdwDefault,
__out BOOL *pbAutoLogonWithDefault);
IFACEMETHODIMP GetCredentialAt(DWORD dwIndex,
__out ICredentialProviderCredential **ppcpc);
friend HRESULT VBoxCredProv_CreateInstance(REFIID riid, __deref_out void **ppv);
protected:
VBoxCredProv(void);
__override ~VBoxCredProv(void);
public:
// Events
void OnCredentialsProvided(const char *pszUser,
const char *pszPw,
const char *pszDomain);
private:
LONG m_cRef; /* Reference count */
VBoxCredential *m_pCred; /* Our one and only credential */
VBoxCredPoller *m_pPoller; /* Poller thread for credential lookup */
ICredentialProviderEvents *m_pCredProvEvents; /* Used to tell our owner to re-enumerate credentials */
UINT_PTR m_upAdviseContext; /* Used to tell our owner who we are when asking to re-enumerate credentials */
CREDENTIAL_PROVIDER_USAGE_SCENARIO m_cpUS; /* Saved usage scenario */
bool m_fGotCredentials; /* Flag indicating we got some credentials to work with */
};
#endif /* ___VBoxCredProv_h */