VBoxCredProvCredential.h revision 4ddd24feeef95a6bb2f72fba69fe3bc9630409fa
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync/* $Id$ */
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync/** @file
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync * VBoxCredProvCredential - Class for keeping and handling the passed credentials.
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync */
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync/*
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync * Copyright (C) 2012 Oracle Corporation
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync *
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync * available from http://www.virtualbox.org. This file is free software;
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync * you can redistribute it and/or modify it under the terms of the GNU
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync * General Public License (GPL) as published by the Free Software
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync */
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync#ifndef ___VBOX_CREDPROV_CREDENTIAL_H___
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync#define ___VBOX_CREDPROV_CREDENTIAL_H___
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync/*******************************************************************************
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync* Header Files *
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync*******************************************************************************/
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync#include <Windows.h>
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync#include <NTSecAPI.h>
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync#define SECURITY_WIN32
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync#include <Security.h>
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync#include <ShlGuid.h>
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync#include <strsafe.h>
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync#pragma warning(push)
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync#pragma warning(disable : 4995)
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync#include <Shlwapi.h>
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync#pragma warning(pop)
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync#include <iprt/string.h>
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync#include "VBoxCredentialProvider.h"
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsyncclass VBoxCredProvProvider;
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsyncclass VBoxCredProvCredential : public ICredentialProviderCredential
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync{
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsyncpublic:
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync VBoxCredProvCredential(void);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync virtual ~VBoxCredProvCredential(void);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync /** @name IUnknown methods
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync * @{ */
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync IFACEMETHODIMP_(ULONG) AddRef(void);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync IFACEMETHODIMP_(ULONG) Release(void);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync IFACEMETHODIMP QueryInterface(REFIID interfaceID, void **ppvInterface);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync /** @} */
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync /** @name ICredentialProviderCredential methods.
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync * @{ */
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync IFACEMETHODIMP Advise(ICredentialProviderCredentialEvents* pcpce);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync IFACEMETHODIMP UnAdvise(void);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync IFACEMETHODIMP SetSelected(PBOOL pfAutoLogon);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync IFACEMETHODIMP SetDeselected(void);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync IFACEMETHODIMP GetFieldState(DWORD dwFieldID,
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync CREDENTIAL_PROVIDER_FIELD_STATE* pcpfs,
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync CREDENTIAL_PROVIDER_FIELD_INTERACTIVE_STATE* pcpfis);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync IFACEMETHODIMP GetStringValue(DWORD dwFieldID, PWSTR *ppwsz);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync IFACEMETHODIMP GetBitmapValue(DWORD dwFieldID, HBITMAP *phbmp);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync IFACEMETHODIMP GetCheckboxValue(DWORD dwFieldID, PBOOL pfChecked, PWSTR *ppwszLabel);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync IFACEMETHODIMP GetComboBoxValueCount(DWORD dwFieldID, DWORD* pcItems, DWORD *pdwSelectedItem);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync IFACEMETHODIMP GetComboBoxValueAt(DWORD dwFieldID, DWORD dwItem, PWSTR *ppwszItem);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync IFACEMETHODIMP GetSubmitButtonValue(DWORD dwFieldID, DWORD *pdwAdjacentTo);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync IFACEMETHODIMP SetStringValue(DWORD dwFieldID, PCWSTR pcwzString);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync IFACEMETHODIMP SetCheckboxValue(DWORD dwFieldID, BOOL fChecked);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync IFACEMETHODIMP SetComboBoxSelectedValue(DWORD dwFieldID, DWORD dwSelectedItem);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync IFACEMETHODIMP CommandLinkClicked(DWORD dwFieldID);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync IFACEMETHODIMP GetSerialization(CREDENTIAL_PROVIDER_GET_SERIALIZATION_RESPONSE *pcpGetSerializationResponse,
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION *pcpCredentialSerialization,
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync PWSTR *ppwszOptionalStatusText, CREDENTIAL_PROVIDER_STATUS_ICON *pcpsiOptionalStatusIcon);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync IFACEMETHODIMP ReportResult(NTSTATUS ntStatus, NTSTATUS ntSubStatus,
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync PWSTR *ppwszOptionalStatusText,
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync CREDENTIAL_PROVIDER_STATUS_ICON* pcpsiOptionalStatusIcon);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync /** @} */
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync HRESULT Reset(void);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync HRESULT Initialize(CREDENTIAL_PROVIDER_USAGE_SCENARIO cpus);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync int RetrieveCredentials(void);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync BOOL TranslateAccountName(PWSTR pwszDisplayName, PWSTR *ppwszAccoutName);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync BOOL ExtractAccoutData(PWSTR pwszAccountData, PWSTR *ppwszAccoutName, PWSTR *ppwszDomain);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsyncprotected:
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync HRESULT RTUTF16ToUnicode(PUNICODE_STRING pUnicodeDest, PRTUTF16 pwszSource, bool fCopy);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync HRESULT AllocateLogonPackage(const KERB_INTERACTIVE_UNLOCK_LOGON &rUnlockLogon,
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync BYTE **ppPackage, DWORD *pcbPackage);
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsyncprivate:
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync /** Internal reference count. */
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync LONG m_cRefs;
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync /** The usage scenario for which we were enumerated. */
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync CREDENTIAL_PROVIDER_USAGE_SCENARIO m_enmUsageScenario;
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync /** The actual credential strings. */
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync PRTUTF16 m_apwszCredentials[VBOXCREDPROV_NUM_FIELDS];
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync /** Pointer to event handler. */
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync ICredentialProviderCredentialEvents *m_pEvents;
4ddd24feeef95a6bb2f72fba69fe3bc9630409favboxsync /** Flag indicating whether credentials already were retrieved. */
4ddd24feeef95a6bb2f72fba69fe3bc9630409favboxsync bool m_fHaveCreds;
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync};
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync#endif /* !___VBOX_CREDPROV_CREDENTIAL_H___ */
352bb6b9d2fa1f7df7797f50c58e297ac37059a2vboxsync