windows-nt/Source/XPSP1/NT/base/ntsetup/oobe/msobmain/userinfo.h
2020-09-26 16:20:57 +08:00

180 lines
6.8 KiB
C++

//*********************************************************************
//* Microsoft Windows **
//* Copyright(c) Microsoft Corp., 1999 **
//*********************************************************************
//
// USERINFO.H - Header for the implementation of CUserInfo
//
// HISTORY:
//
// 1/27/99 a-jaswed Created.
//
#ifndef _USERINFO_H_
#define _USERINFO_H_
#include <windows.h>
#include <assert.h>
#include <oleauto.h>
#include <lmcons.h>
#include "util.h"
typedef struct tag_REGDATAELEMENT
{
LPCWSTR lpQueryElementName; // Static name to put in query string
LPWSTR lpQueryElementValue; // data for element
DWORD dwValidateFlag; // validation bit flag for this element
}REGDATAELEMENT, *LPREGDATAELEMENT;
// "IdentityXXX" where XXX is 3 digit integer
const USHORT IDENTITY_REGVALUE_LEN_MAX = 12;
// Maximum length for data in an identity
//
const USHORT IDENTITY_CCH_MAX = UNLEN;
typedef struct tag_IDENTITYELEMENT
{
WCHAR rgchRegValue[IDENTITY_REGVALUE_LEN_MAX];
WCHAR rgchIdentity[IDENTITY_CCH_MAX + 1];
} IDENTITYELEMENT;
class CUserInfo : public IDispatch
{
public:
const static USHORT IDENTITIES_MAX = 6;
const static USHORT RESERVED_IDENTITIES_MAX = 2;
const static int RESERVED_IDENTITIES_IDS[RESERVED_IDENTITIES_MAX];
private:
HINSTANCE m_hInstance;
ULONG m_cRef;
DWORD m_dwCountryCode;
WCHAR m_szUserInfoINIFile [MAX_PATH];
// BUGBUG: Do all these buffers really need to be MAX_PATH characters??
// Registration data
WCHAR m_szFirstName [MAX_PATH];
WCHAR m_szMiddleInitial [MAX_PATH];
WCHAR m_szLastName [MAX_PATH];
WCHAR m_szFuriganaName [MAX_PATH];
WCHAR m_szCompanyName [MAX_PATH];
WCHAR m_szAddress1 [MAX_PATH*2];
WCHAR m_szAddress2 [MAX_PATH*2];
WCHAR m_szCity [MAX_PATH];
WCHAR m_szState [MAX_PATH];
WCHAR m_szZip [MAX_PATH];
WCHAR m_szCountry [MAX_PATH];
WCHAR m_szPrimaryEmail [MAX_PATH];
WCHAR m_szSecondaryEmail [MAX_PATH];
WCHAR m_szAreaCode [MAX_PATH];
WCHAR m_szPhoneNumber [MAX_PATH];
VARIANT_BOOL m_fMSUpdate;
VARIANT_BOOL m_fMSOffer;
VARIANT_BOOL m_fOtherOffer;
DWORD m_dwCountryID;
LPREGDATAELEMENT m_RegDataElements;
// New user accounts
WCHAR m_szOwnerName[MAX_PATH];
VARIANT_BOOL m_fOEMIdentities;
VARIANT_BOOL m_fUseIdentities;
IDENTITYELEMENT m_rgIdentities[IDENTITIES_MAX];
TCHAR m_szReservedIdentities[RESERVED_IDENTITIES_MAX][MAX_PATH];
WCHAR m_szDefaultNewUser[MAX_PATH];
//GET functions
HRESULT get_FuriganaName (BSTR* pbstrVal);
HRESULT get_SecondaryEmail (BSTR* pbstrVal);
HRESULT get_AreaCode (BSTR* pbstrVal);
HRESULT get_PhoneNumber (BSTR* pbstrVal);
//SET functions
HRESULT set_FirstName (WCHAR* pszVal);
HRESULT set_MiddleInitial (WCHAR* pszVal);
HRESULT set_LastName (WCHAR* pszVal);
HRESULT set_CompanyName (WCHAR* pszVal);
HRESULT set_Address1 (WCHAR* pszVal);
HRESULT set_Address2 (WCHAR* pszVal);
HRESULT set_City (WCHAR* pszVal);
HRESULT set_State (WCHAR* pszVal);
HRESULT set_Zip (WCHAR* pszVal);
HRESULT set_Country (WCHAR* pszVal);
HRESULT set_PrimaryEmail (WCHAR* pszVal);
HRESULT set_SecondaryEmail (WCHAR* pszVal);
HRESULT set_AreaCode (WCHAR* pszVal);
HRESULT set_PhoneNumber (WCHAR* pszVal);
HRESULT set_FuriganaName (WCHAR* pszVal);
HRESULT set_OwnerName (WCHAR* pszVal);
HRESULT set_Identity (UINT uiIndex, WCHAR* pszVal);
HRESULT set_UseIdentities (VARIANT_BOOL fVal);
HRESULT set_MSUpdate (VARIANT_BOOL fVal);
HRESULT set_MSOffer (VARIANT_BOOL fVal);
HRESULT set_OtherOffer (VARIANT_BOOL fVal);
HRESULT set_CountryID (DWORD dwVal);
// CHECK functions
HRESULT check_Identity (UINT uiIndex, VARIANT_BOOL* pfValid);
HRESULT check_Identity (WCHAR* pszVal, VARIANT_BOOL* pfValid);
STDMETHOD(SuggestIdentity0)();
void ReadUserInfo (HKEY hKey, WCHAR* pszKey, WCHAR* pszValue, DWORD dwSize);
void WriteUserInfo (WCHAR* pszBuf, WCHAR* pszKey, WCHAR* pszValue);
void FixString (BSTR bstrVal);
public:
CUserInfo (HINSTANCE hInstance);
~CUserInfo ();
HRESULT GetQueryString (BSTR bstrBaseURL, BSTR *lpReturnURL);
//Public GET functions
HRESULT get_FirstName (BSTR* pbstrVal);
HRESULT get_MiddleInitial (BSTR* pbstrVal);
HRESULT get_LastName (BSTR* pbstrVal);
HRESULT get_Address1 (BSTR* pbstrVal);
HRESULT get_Address2 (BSTR* pbstrVal);
HRESULT get_City (BSTR* pbstrVal);
HRESULT get_State (BSTR* pbstrVal);
HRESULT get_Zip (BSTR* pbstrVal);
HRESULT get_Country (BSTR* pbstrVal);
HRESULT get_PrimaryEmail (BSTR* pbstrVal);
HRESULT get_CompanyName (BSTR* pbstrVal);
HRESULT set_CountryCode (DWORD dwCountryCd);
HRESULT get_OwnerName (BSTR* pbstrVal);
HRESULT get_Identity (UINT uiIndex, BSTR* pbstrVal);
HRESULT get_UseIdentities (VARIANT_BOOL* pfVal);
HRESULT get_MSUpdate (VARIANT_BOOL* pfVal);
HRESULT get_MSOffer (VARIANT_BOOL* pfVal);
HRESULT get_OtherOffer (VARIANT_BOOL* pfVal);
HRESULT get_CountryID (DWORD* pdwVal);
HRESULT get_OEMIdentities (VARIANT_BOOL* pfVal){
*pfVal = m_fOEMIdentities;
return S_OK;
}
HRESULT get_IdentitiesMax (SHORT* uiMax){
*uiMax = IDENTITIES_MAX;
return S_OK;
}
HRESULT get_Identities (PSTRINGLIST* pUserList);
HRESULT set_DefaultNewUser (WCHAR * pszVal);
HRESULT get_DefaultNewUser (BSTR* pszVal);
// IUnknown Interfaces
STDMETHODIMP QueryInterface (REFIID riid, LPVOID* ppvObj);
STDMETHODIMP_(ULONG) AddRef ();
STDMETHODIMP_(ULONG) Release ();
//IDispatch Interfaces
STDMETHOD (GetTypeInfoCount) (UINT* pcInfo);
STDMETHOD (GetTypeInfo) (UINT, LCID, ITypeInfo** );
STDMETHOD (GetIDsOfNames) (REFIID, OLECHAR**, UINT, LCID, DISPID* );
STDMETHOD (Invoke) (DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pdispparams, VARIANT* pvarResult, EXCEPINFO* pexcepinfo, UINT* puArgErr);
};
#endif