ReactOS 0.4.17-dev-357-ga8f14ff
CIniPropertyBag Class Reference
Inheritance diagram for CIniPropertyBag:
Collaboration diagram for CIniPropertyBag:

Public Member Functions

 CIniPropertyBag (DWORD dwMode)
 
 ~CIniPropertyBag () override
 
HRESULT Init (LPCWSTR pszIniFile, LPCWSTR pszSection)
 
STDMETHODIMP Read (_In_z_ LPCWSTR pszPropName, _Inout_ VARIANT *pvari, _Inout_opt_ IErrorLog *pErrorLog) override
 
STDMETHODIMP Write (_In_z_ LPCWSTR pszPropName, _In_ VARIANT *pvari) override
 
- Public Member Functions inherited from CBasePropertyBag
 CBasePropertyBag (DWORD dwMode)
 
virtual ~CBasePropertyBag ()
 
STDMETHODIMP QueryInterface (REFIID riid, void **ppvObject) override
 
 STDMETHODIMP_ (ULONG) AddRef() override
 
 STDMETHODIMP_ (ULONG) Release() override
 
- Public Member Functions inherited from IPropertyBag
HRESULT Read ([in] LPCOLESTR pszPropName, [in, out] VARIANT *pVar, [in] IErrorLog *pErrorLog)
 
HRESULT RemoteRead ([in] LPCOLESTR pszPropName, [out] VARIANT *pVar, [in] IErrorLog *pErrorLog, [in] DWORD varType, [in] IUnknown *pUnkObj)
 
HRESULT Write ([in] LPCOLESTR pszPropName, [in] VARIANT *pVar)
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 

Protected Member Functions

HRESULT _GetSectionAndName (LPCWSTR pszStart, LPWSTR pszSection, UINT cchSectionMax, LPWSTR pszName, UINT cchNameMax)
 

Static Protected Member Functions

static BOOL LooksLikeAnAlternateStream (LPCWSTR pszStart)
 

Protected Attributes

LPWSTR m_pszFileName
 
LPWSTR m_pszSection
 
BOOL m_bAlternateStream
 
- Protected Attributes inherited from CBasePropertyBag
LONG m_cRefs
 
DWORD m_dwMode
 

Additional Inherited Members

- Public Types inherited from IPropertyBag
typedef IPropertyBagLPPROPERTYBAG
 
- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 

Detailed Description

Definition at line 770 of file propbag.cpp.

Constructor & Destructor Documentation

◆ CIniPropertyBag()

CIniPropertyBag::CIniPropertyBag ( DWORD  dwMode)
inline

Definition at line 794 of file propbag.cpp.

795 : CBasePropertyBag(dwMode)
799 {
800 }
LPWSTR m_pszFileName
Definition: propbag.cpp:773
LPWSTR m_pszSection
Definition: propbag.cpp:774
BOOL m_bAlternateStream
Definition: propbag.cpp:775
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117

◆ ~CIniPropertyBag()

CIniPropertyBag::~CIniPropertyBag ( )
inlineoverride

Definition at line 802 of file propbag.cpp.

803 {
806 }
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594

Member Function Documentation

◆ _GetSectionAndName()

HRESULT CIniPropertyBag::_GetSectionAndName ( LPCWSTR  pszStart,
LPWSTR  pszSection,
UINT  cchSectionMax,
LPWSTR  pszName,
UINT  cchNameMax 
)
protected

Definition at line 838 of file propbag.cpp.

844{
845 LPCWSTR pchSep = StrChrW(pszStart, L'\\');
846 if (pchSep)
847 {
848 UINT cchSep = (UINT)(pchSep - pszStart + 1);
849 StrCpyNW(pszSection, pszStart, __min(cchSep, cchSectionMax));
850 StrCpyNW(pszName, pchSep + 1, cchNameMax);
851 return S_OK;
852 }
853
854 if (m_pszSection)
855 {
856 StrCpyNW(pszSection, m_pszSection, cchSectionMax);
857 StrCpyNW(pszName, pszStart, cchNameMax);
858 return S_OK;
859 }
860
861 ERR("%p: %s\n", this, debugstr_w(pszStart));
862 return E_INVALIDARG;
863}
#define ERR(fmt,...)
Definition: precomp.h:57
#define E_INVALIDARG
Definition: ddrawi.h:101
LPWSTR WINAPI StrChrW(LPCWSTR lpszStr, WCHAR ch)
Definition: string.c:464
WCHAR *WINAPI StrCpyNW(WCHAR *dst, const WCHAR *src, int count)
Definition: string.c:470
#define __min(a, b)
Definition: stdlib.h:66
#define L(x)
Definition: resources.c:13
#define S_OK
Definition: intsafe.h:52
#define debugstr_w
Definition: kernel32.h:32
unsigned int UINT
Definition: ndis.h:50
const uint16_t * LPCWSTR
Definition: typedefs.h:57

Referenced by Read(), and Write().

◆ Init()

HRESULT CIniPropertyBag::Init ( LPCWSTR  pszIniFile,
LPCWSTR  pszSection 
)

Definition at line 818 of file propbag.cpp.

819{
820 m_pszFileName = StrDupW(pszIniFile);
821 if (!m_pszFileName)
822 return E_OUTOFMEMORY;
823
824 // Is it an ADS (Alternate Data Stream) pathname?
826
827 if (pszSection)
828 {
829 m_pszSection = StrDupW(pszSection);
830 if (!m_pszSection)
831 return E_OUTOFMEMORY;
832 }
833
834 return S_OK;
835}
static BOOL LooksLikeAnAlternateStream(LPCWSTR pszStart)
Definition: propbag.cpp:777
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
WCHAR *WINAPI StrDupW(const WCHAR *str)
Definition: string.c:317

◆ LooksLikeAnAlternateStream()

static BOOL CIniPropertyBag::LooksLikeAnAlternateStream ( LPCWSTR  pszStart)
inlinestaticprotected

Definition at line 777 of file propbag.cpp.

778 {
779 LPCWSTR pch = StrRChrW(pszStart, NULL, L'\\');
780 if (!pch)
781 pch = pszStart;
782 return StrChrW(pch, L':') != NULL;
783 }
LPWSTR WINAPI StrRChrW(LPCWSTR str, LPCWSTR end, WORD ch)
Definition: string.c:552
#define pch(ap)
Definition: match.c:418

Referenced by Init().

◆ Read()

STDMETHODIMP CIniPropertyBag::Read ( _In_z_ LPCWSTR  pszPropName,
_Inout_ VARIANT pvari,
_Inout_opt_ IErrorLog pErrorLog 
)
override

Definition at line 866 of file propbag.cpp.

870{
871 UNREFERENCED_PARAMETER(pErrorLog);
872
873 TRACE("%p: %s %p %p\n", this, debugstr_w(pszPropName), pvari, pErrorLog);
874
875 VARTYPE vt = V_VT(pvari);
876
877 ::VariantInit(pvari);
878
880 {
881 ERR("%p: 0x%X\n", this, m_dwMode);
882 return E_ACCESSDENIED;
883 }
884
885 WCHAR szSection[64], szName[64];
886 HRESULT hr =
887 _GetSectionAndName(pszPropName, szSection, _countof(szSection), szName, _countof(szName));
888 if (FAILED(hr))
889 return hr;
890
891 const INT cchBuffMax = 4 * MAX_PATH; // UTF-7 needs 4 times length buffer.
892 CComHeapPtr<WCHAR> pszBuff;
893 if (!pszBuff.Allocate(cchBuffMax * sizeof(WCHAR)))
894 return E_OUTOFMEMORY;
895
896 if (!SHGetIniStringUTF7W(szSection, szName, pszBuff, cchBuffMax, m_pszFileName))
897 return E_FAIL;
898
899 BSTR bstr = ::SysAllocString(pszBuff);
900 V_BSTR(pvari) = bstr;
901 if (!bstr)
902 return E_OUTOFMEMORY;
903
904 V_VT(pvari) = VT_BSTR;
905 return ::VariantChangeTypeForRead(pvari, vt);
906}
bool Allocate(_In_ size_t nElements=1)
Definition: atlalloc.h:143
HRESULT _GetSectionAndName(LPCWSTR pszStart, LPWSTR pszSection, UINT cchSectionMax, LPWSTR pszName, UINT cchNameMax)
Definition: propbag.cpp:838
#define E_FAIL
Definition: ddrawi.h:102
HRESULT hr
Definition: delayimp.cpp:582
OLECHAR * BSTR
Definition: compat.h:2293
#define MAX_PATH
Definition: compat.h:34
unsigned short VARTYPE
Definition: compat.h:2254
@ VT_BSTR
Definition: compat.h:2303
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
Definition: suminfo.c:91
#define FAILED(hr)
Definition: intsafe.h:51
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:329
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
#define V_VT(A)
Definition: oleauto.h:211
#define V_BSTR(A)
Definition: oleauto.h:226
short WCHAR
Definition: pedump.c:58
static const WCHAR szName[]
Definition: powrprof.c:45
EXTERN_C DWORD WINAPI SHGetIniStringUTF7W(_In_opt_z_ LPCWSTR lpAppName, _In_z_ LPCWSTR lpKeyName, _Out_writes_to_(nSize, return+1) _Post_z_ LPWSTR lpReturnedString, _In_ DWORD nSize, _In_z_ LPCWSTR lpFileName)
Definition: propbag.cpp:732
#define MODE_CAN_READ(dwMode)
Definition: propbag.cpp:24
#define _countof(array)
Definition: sndvol32.h:70
#define TRACE(s)
Definition: solgame.cpp:4
int32_t INT
Definition: typedefs.h:58
void WINAPI VariantInit(VARIANTARG *pVarg)
Definition: variant.c:568
#define E_ACCESSDENIED
Definition: winerror.h:4116

◆ Write()

STDMETHODIMP CIniPropertyBag::Write ( _In_z_ LPCWSTR  pszPropName,
_In_ VARIANT pvari 
)
override

Definition at line 909 of file propbag.cpp.

910{
911 TRACE("%p: %s %p\n", this, debugstr_w(pszPropName), pvari);
912
914 {
915 ERR("%p: 0x%X\n", this, m_dwMode);
916 return E_ACCESSDENIED;
917 }
918
919 HRESULT hr;
920 BSTR bstr;
921 VARIANTARG vargTemp = { 0 };
922 switch (V_VT(pvari))
923 {
924 case VT_EMPTY:
925 bstr = NULL;
926 break;
927
928 case VT_BSTR:
929 bstr = V_BSTR(pvari);
930 break;
931
932 default:
933 hr = ::VariantChangeType(&vargTemp, pvari, 0, VT_BSTR);
934 if (FAILED(hr))
935 goto Quit;
936
937 bstr = V_BSTR(&vargTemp);
938 break;
939 }
940
941 WCHAR szSection[64], szName[64];
942 hr = _GetSectionAndName(pszPropName, szSection, _countof(szSection), szName, _countof(szName));
943 if (SUCCEEDED(hr))
944 {
945 if (SHSetIniStringUTF7W(szSection, szName, bstr, m_pszFileName))
946 {
949 }
950 else
951 {
952 hr = E_FAIL;
953 }
954 }
955
956Quit:
957 ::VariantClear(&vargTemp);
958 return hr;
959}
EXTERN_C void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
@ VT_EMPTY
Definition: compat.h:2295
#define SUCCEEDED(hr)
Definition: intsafe.h:50
EXTERN_C BOOL WINAPI SHSetIniStringUTF7W(_In_z_ LPCWSTR lpAppName, _In_z_ LPCWSTR lpKeyName, _In_opt_z_ LPCWSTR lpString, _In_z_ LPCWSTR lpFileName)
Definition: propbag.cpp:758
#define MODE_CAN_WRITE(dwMode)
Definition: propbag.cpp:26
#define SHCNE_UPDATEITEM
Definition: shlobj.h:1910
#define SHCNF_PATHW
Definition: shlobj.h:1933
HRESULT WINAPI DECLSPEC_HOTPATCH VariantChangeType(VARIANTARG *pvargDest, VARIANTARG *pvargSrc, USHORT wFlags, VARTYPE vt)
Definition: variant.c:962
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648

Member Data Documentation

◆ m_bAlternateStream

BOOL CIniPropertyBag::m_bAlternateStream
protected

Definition at line 775 of file propbag.cpp.

Referenced by Init(), and Write().

◆ m_pszFileName

LPWSTR CIniPropertyBag::m_pszFileName
protected

Definition at line 773 of file propbag.cpp.

Referenced by Init(), Read(), Write(), and ~CIniPropertyBag().

◆ m_pszSection

LPWSTR CIniPropertyBag::m_pszSection
protected

Definition at line 774 of file propbag.cpp.

Referenced by _GetSectionAndName(), Init(), and ~CIniPropertyBag().


The documentation for this class was generated from the following file: