summaryrefslogtreecommitdiff
path: root/src/libs/dutil/WixToolset.DUtil/polcutil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/dutil/WixToolset.DUtil/polcutil.cpp')
-rw-r--r--src/libs/dutil/WixToolset.DUtil/polcutil.cpp48
1 files changed, 32 insertions, 16 deletions
diff --git a/src/libs/dutil/WixToolset.DUtil/polcutil.cpp b/src/libs/dutil/WixToolset.DUtil/polcutil.cpp
index c2247bc1..a56c380b 100644
--- a/src/libs/dutil/WixToolset.DUtil/polcutil.cpp
+++ b/src/libs/dutil/WixToolset.DUtil/polcutil.cpp
@@ -16,6 +16,7 @@
16#define PolcExitOnInvalidHandleWithLastError(p, x, s, ...) ExitOnInvalidHandleWithLastErrorSource(DUTIL_SOURCE_POLCUTIL, p, x, s, __VA_ARGS__) 16#define PolcExitOnInvalidHandleWithLastError(p, x, s, ...) ExitOnInvalidHandleWithLastErrorSource(DUTIL_SOURCE_POLCUTIL, p, x, s, __VA_ARGS__)
17#define PolcExitOnWin32Error(e, x, s, ...) ExitOnWin32ErrorSource(DUTIL_SOURCE_POLCUTIL, e, x, s, __VA_ARGS__) 17#define PolcExitOnWin32Error(e, x, s, ...) ExitOnWin32ErrorSource(DUTIL_SOURCE_POLCUTIL, e, x, s, __VA_ARGS__)
18#define PolcExitOnGdipFailure(g, x, s, ...) ExitOnGdipFailureSource(DUTIL_SOURCE_POLCUTIL, g, x, s, __VA_ARGS__) 18#define PolcExitOnGdipFailure(g, x, s, ...) ExitOnGdipFailureSource(DUTIL_SOURCE_POLCUTIL, g, x, s, __VA_ARGS__)
19#define PolcExitOnPathFailure(x, b, s, ...) ExitOnPathFailureSource(DUTIL_SOURCE_POLCUTIL, x, b, s, __VA_ARGS__)
19 20
20const LPCWSTR REGISTRY_POLICIES_KEY = L"SOFTWARE\\Policies\\"; 21const LPCWSTR REGISTRY_POLICIES_KEY = L"SOFTWARE\\Policies\\";
21 22
@@ -34,25 +35,28 @@ extern "C" HRESULT DAPI PolcReadNumber(
34{ 35{
35 HRESULT hr = S_OK; 36 HRESULT hr = S_OK;
36 HKEY hk = NULL; 37 HKEY hk = NULL;
38 BOOL fExists = FALSE;
37 39
38 hr = OpenPolicyKey(wzPolicyPath, &hk); 40 hr = OpenPolicyKey(wzPolicyPath, &hk);
39 if (E_FILENOTFOUND == hr || E_PATHNOTFOUND == hr) 41 PolcExitOnFailure(hr, "Failed to open policy key: %ls", wzPolicyPath);
42
43 if (!hk)
40 { 44 {
41 ExitFunction1(hr = S_FALSE); 45 ExitFunction1(hr = S_FALSE);
42 } 46 }
43 PolcExitOnFailure(hr, "Failed to open policy key: %ls", wzPolicyPath);
44 47
45 hr = RegReadNumber(hk, wzPolicyName, pdw); 48 hr = RegReadNumber(hk, wzPolicyName, pdw);
46 if (E_FILENOTFOUND == hr || E_PATHNOTFOUND == hr) 49 PolcExitOnPathFailure(hr, fExists, "Failed to open policy key: %ls, name: %ls", wzPolicyPath, wzPolicyName);
50
51 if (!fExists)
47 { 52 {
48 ExitFunction1(hr = S_FALSE); 53 ExitFunction1(hr = S_FALSE);
49 } 54 }
50 PolcExitOnFailure(hr, "Failed to open policy key: %ls, name: %ls", wzPolicyPath, wzPolicyName);
51 55
52LExit: 56LExit:
53 ReleaseRegKey(hk); 57 ReleaseRegKey(hk);
54 58
55 if (S_FALSE == hr || FAILED(hr)) 59 if (!fExists)
56 { 60 {
57 *pdw = dwDefault; 61 *pdw = dwDefault;
58 } 62 }
@@ -69,25 +73,28 @@ extern "C" HRESULT DAPI PolcReadString(
69{ 73{
70 HRESULT hr = S_OK; 74 HRESULT hr = S_OK;
71 HKEY hk = NULL; 75 HKEY hk = NULL;
76 BOOL fExists = FALSE;
72 77
73 hr = OpenPolicyKey(wzPolicyPath, &hk); 78 hr = OpenPolicyKey(wzPolicyPath, &hk);
74 if (E_FILENOTFOUND == hr || E_PATHNOTFOUND == hr) 79 PolcExitOnFailure(hr, "Failed to open policy key: %ls", wzPolicyPath);
80
81 if (!hk)
75 { 82 {
76 ExitFunction1(hr = S_FALSE); 83 ExitFunction1(hr = S_FALSE);
77 } 84 }
78 PolcExitOnFailure(hr, "Failed to open policy key: %ls", wzPolicyPath);
79 85
80 hr = RegReadString(hk, wzPolicyName, pscz); 86 hr = RegReadString(hk, wzPolicyName, pscz);
81 if (E_FILENOTFOUND == hr || E_PATHNOTFOUND == hr) 87 PolcExitOnPathFailure(hr, fExists, "Failed to open policy key: %ls, name: %ls", wzPolicyPath, wzPolicyName);
88
89 if (!fExists)
82 { 90 {
83 ExitFunction1(hr = S_FALSE); 91 ExitFunction1(hr = S_FALSE);
84 } 92 }
85 PolcExitOnFailure(hr, "Failed to open policy key: %ls, name: %ls", wzPolicyPath, wzPolicyName);
86 93
87LExit: 94LExit:
88 ReleaseRegKey(hk); 95 ReleaseRegKey(hk);
89 96
90 if (S_FALSE == hr || FAILED(hr)) 97 if (!fExists)
91 { 98 {
92 if (NULL == wzDefault) 99 if (NULL == wzDefault)
93 { 100 {
@@ -112,25 +119,28 @@ extern "C" HRESULT DAPI PolcReadUnexpandedString(
112{ 119{
113 HRESULT hr = S_OK; 120 HRESULT hr = S_OK;
114 HKEY hk = NULL; 121 HKEY hk = NULL;
122 BOOL fExists = FALSE;
115 123
116 hr = OpenPolicyKey(wzPolicyPath, &hk); 124 hr = OpenPolicyKey(wzPolicyPath, &hk);
117 if (E_FILENOTFOUND == hr || E_PATHNOTFOUND == hr) 125 PolcExitOnFailure(hr, "Failed to open policy key: %ls", wzPolicyPath);
126
127 if (!hk)
118 { 128 {
119 ExitFunction1(hr = S_FALSE); 129 ExitFunction1(hr = S_FALSE);
120 } 130 }
121 PolcExitOnFailure(hr, "Failed to open policy key: %ls", wzPolicyPath);
122 131
123 hr = RegReadUnexpandedString(hk, wzPolicyName, pfNeedsExpansion, pscz); 132 hr = RegReadUnexpandedString(hk, wzPolicyName, pfNeedsExpansion, pscz);
124 if (E_FILENOTFOUND == hr || E_PATHNOTFOUND == hr) 133 PolcExitOnPathFailure(hr, fExists, "Failed to open policy key: %ls, name: %ls", wzPolicyPath, wzPolicyName);
134
135 if (!fExists)
125 { 136 {
126 ExitFunction1(hr = S_FALSE); 137 ExitFunction1(hr = S_FALSE);
127 } 138 }
128 PolcExitOnFailure(hr, "Failed to open policy key: %ls, name: %ls", wzPolicyPath, wzPolicyName);
129 139
130LExit: 140LExit:
131 ReleaseRegKey(hk); 141 ReleaseRegKey(hk);
132 142
133 if (S_FALSE == hr || FAILED(hr)) 143 if (!fExists)
134 { 144 {
135 if (NULL == wzDefault) 145 if (NULL == wzDefault)
136 { 146 {
@@ -155,12 +165,18 @@ static HRESULT OpenPolicyKey(
155{ 165{
156 HRESULT hr = S_OK; 166 HRESULT hr = S_OK;
157 LPWSTR sczPath = NULL; 167 LPWSTR sczPath = NULL;
168 BOOL fExists = FALSE;
158 169
159 hr = PathConcat(REGISTRY_POLICIES_KEY, wzPolicyPath, &sczPath); 170 hr = PathConcat(REGISTRY_POLICIES_KEY, wzPolicyPath, &sczPath);
160 PolcExitOnFailure(hr, "Failed to combine logging path with root path."); 171 PolcExitOnFailure(hr, "Failed to combine logging path with root path.");
161 172
162 hr = RegOpen(HKEY_LOCAL_MACHINE, sczPath, KEY_READ, phk); 173 hr = RegOpen(HKEY_LOCAL_MACHINE, sczPath, KEY_READ, phk);
163 PolcExitOnFailure(hr, "Failed to open policy registry key."); 174 PolcExitOnPathFailure(hr, fExists, "Failed to open policy registry key.");
175
176 if (!fExists)
177 {
178 ReleaseRegKey(*phk);
179 }
164 180
165LExit: 181LExit:
166 ReleaseStr(sczPath); 182 ReleaseStr(sczPath);