/vmafd/server/db/regdbutil.c

https://github.com/vmware/lightwave · C · 352 lines · 286 code · 63 blank · 3 comment · 18 complexity · 06a580097cedcf4549625c27d0847b86 MD5 · raw file

  1. /*
  2. * Copyright (C) 2011-2013 VMware, Inc. All rights reserved.
  3. */
  4. #include "includes.h"
  5. DWORD
  6. VmAfdRegGetString(
  7. PCSTR pszSubKey, /* IN */
  8. PCSTR pszValueName, /* IN */
  9. PWSTR* ppwszValue /* OUT */
  10. )
  11. {
  12. DWORD dwError = 0;
  13. PVMAF_CFG_CONNECTION pConnection = NULL;
  14. PVMAF_CFG_KEY pRootKey = NULL;
  15. PVMAF_CFG_KEY pParamsKey = NULL;
  16. PSTR pszValue = NULL;
  17. PWSTR pwszValue = NULL;
  18. BAIL_ON_VMAFD_INVALID_POINTER(ppwszValue, dwError);
  19. dwError = VmAfConfigOpenConnection(&pConnection);
  20. BAIL_ON_VMAFD_ERROR(dwError);
  21. dwError = VmAfConfigOpenRootKey(
  22. pConnection,
  23. "HKEY_LOCAL_MACHINE",
  24. 0,
  25. KEY_READ,
  26. &pRootKey);
  27. BAIL_ON_VMAFD_ERROR(dwError);
  28. dwError = VmAfConfigOpenKey(
  29. pConnection,
  30. pRootKey,
  31. pszSubKey,
  32. 0,
  33. KEY_READ,
  34. &pParamsKey);
  35. BAIL_ON_VMAFD_ERROR(dwError);
  36. dwError = VmAfConfigReadStringValue(
  37. pParamsKey,
  38. NULL,
  39. pszValueName,
  40. &pszValue);
  41. BAIL_ON_VMAFD_ERROR(dwError);
  42. dwError = VmAfdAllocateStringWFromA(pszValue, &pwszValue);
  43. BAIL_ON_VMAFD_ERROR(dwError);
  44. *ppwszValue = pwszValue;
  45. cleanup:
  46. if (pParamsKey)
  47. {
  48. VmAfConfigCloseKey(pParamsKey);
  49. }
  50. if (pRootKey)
  51. {
  52. VmAfConfigCloseKey(pRootKey);
  53. }
  54. if (pConnection)
  55. {
  56. VmAfConfigCloseConnection(pConnection);
  57. }
  58. VMAFD_SAFE_FREE_STRINGA(pszValue);
  59. return dwError;
  60. error:
  61. if (ppwszValue)
  62. {
  63. *ppwszValue = NULL;
  64. }
  65. goto cleanup;
  66. }
  67. DWORD
  68. VmAfdRegSetString(
  69. PCSTR pszSubKeyParam, /* IN */
  70. PCSTR pszValueName, /* IN */
  71. PCWSTR pwszValue /* IN */
  72. )
  73. {
  74. DWORD dwError = 0;
  75. PVMAF_CFG_CONNECTION pConnection = NULL;
  76. PVMAF_CFG_KEY pRootKey = NULL;
  77. PVMAF_CFG_KEY pParamsKey = NULL;
  78. PCSTR pszSubKey = pszSubKeyParam ? pszSubKeyParam : VMAFD_CONFIG_PARAMETER_KEY_PATH;
  79. PSTR pszValue = NULL;
  80. if (IsNullOrEmptyString(pszValueName) ||
  81. IsNullOrEmptyString(pwszValue))
  82. {
  83. dwError = ERROR_INVALID_PARAMETER;
  84. BAIL_ON_VMAFD_ERROR(dwError);
  85. }
  86. dwError = VmAfConfigOpenConnection(&pConnection);
  87. BAIL_ON_VMAFD_ERROR(dwError);
  88. dwError = VmAfConfigOpenRootKey(
  89. pConnection,
  90. "HKEY_LOCAL_MACHINE",
  91. 0,
  92. KEY_READ,
  93. &pRootKey);
  94. BAIL_ON_VMAFD_ERROR(dwError);
  95. dwError = VmAfConfigOpenKey(
  96. pConnection,
  97. pRootKey,
  98. pszSubKey,
  99. 0,
  100. KEY_SET_VALUE,
  101. &pParamsKey);
  102. BAIL_ON_VMAFD_ERROR(dwError);
  103. dwError = VmAfdAllocateStringAFromW(pwszValue, &pszValue);
  104. BAIL_ON_VMAFD_ERROR(dwError);
  105. dwError = VmAfConfigSetValue(
  106. pParamsKey,
  107. pszValueName,
  108. REG_SZ,
  109. (PBYTE)pszValue,
  110. (DWORD)strlen(pszValue) + 1);
  111. BAIL_ON_VMAFD_ERROR(dwError);
  112. cleanup:
  113. if (pParamsKey)
  114. {
  115. VmAfConfigCloseKey(pParamsKey);
  116. }
  117. if (pRootKey)
  118. {
  119. VmAfConfigCloseKey(pRootKey);
  120. }
  121. if (pConnection)
  122. {
  123. VmAfConfigCloseConnection(pConnection);
  124. }
  125. VMAFD_SAFE_FREE_STRINGA(pszValue);
  126. return dwError;
  127. error:
  128. goto cleanup;
  129. }
  130. DWORD
  131. VmAfdRegGetInteger(
  132. PCSTR pszValueName, /* IN */
  133. PDWORD pdwValue /* OUT */
  134. )
  135. {
  136. DWORD dwError = 0;
  137. PVMAF_CFG_CONNECTION pConnection = NULL;
  138. PVMAF_CFG_KEY pRootKey = NULL;
  139. PVMAF_CFG_KEY pParamsKey = NULL;
  140. PCSTR pszSubKey = VMAFD_CONFIG_PARAMETER_KEY_PATH;
  141. DWORD dwValue = 0;
  142. BAIL_ON_VMAFD_INVALID_POINTER(pdwValue, dwError);
  143. dwError = VmAfConfigOpenConnection(&pConnection);
  144. BAIL_ON_VMAFD_ERROR(dwError);
  145. dwError = VmAfConfigOpenRootKey(
  146. pConnection,
  147. "HKEY_LOCAL_MACHINE",
  148. 0,
  149. KEY_READ,
  150. &pRootKey);
  151. BAIL_ON_VMAFD_ERROR(dwError);
  152. dwError = VmAfConfigOpenKey(
  153. pConnection,
  154. pRootKey,
  155. pszSubKey,
  156. 0,
  157. KEY_READ,
  158. &pParamsKey);
  159. BAIL_ON_VMAFD_ERROR(dwError);
  160. dwError = VmAfConfigReadDWORDValue(
  161. pParamsKey,
  162. NULL,
  163. pszValueName,
  164. &dwValue);
  165. BAIL_ON_VMAFD_ERROR(dwError);
  166. *pdwValue = dwValue;
  167. cleanup:
  168. if (pParamsKey)
  169. {
  170. VmAfConfigCloseKey(pParamsKey);
  171. }
  172. if (pRootKey)
  173. {
  174. VmAfConfigCloseKey(pRootKey);
  175. }
  176. if (pConnection)
  177. {
  178. VmAfConfigCloseConnection(pConnection);
  179. }
  180. return dwError;
  181. error:
  182. goto cleanup;
  183. }
  184. DWORD
  185. VmAfdRegSetInteger(
  186. PCSTR pszValueName, /* IN */
  187. DWORD dwValue /* IN */
  188. )
  189. {
  190. DWORD dwError = 0;
  191. PVMAF_CFG_CONNECTION pConnection = NULL;
  192. PVMAF_CFG_KEY pRootKey = NULL;
  193. PVMAF_CFG_KEY pParamsKey = NULL;
  194. PCSTR pszSubKey = VMAFD_CONFIG_PARAMETER_KEY_PATH;
  195. if (IsNullOrEmptyString(pszValueName))
  196. {
  197. dwError = ERROR_INVALID_PARAMETER;
  198. BAIL_ON_VMAFD_ERROR(dwError);
  199. }
  200. dwError = VmAfConfigOpenConnection(&pConnection);
  201. BAIL_ON_VMAFD_ERROR(dwError);
  202. dwError = VmAfConfigOpenRootKey(
  203. pConnection,
  204. "HKEY_LOCAL_MACHINE",
  205. 0,
  206. KEY_READ,
  207. &pRootKey);
  208. BAIL_ON_VMAFD_ERROR(dwError);
  209. dwError = VmAfConfigOpenKey(
  210. pConnection,
  211. pRootKey,
  212. pszSubKey,
  213. 0,
  214. KEY_SET_VALUE,
  215. &pParamsKey);
  216. BAIL_ON_VMAFD_ERROR(dwError);
  217. dwError = VmAfConfigSetValue(
  218. pParamsKey,
  219. pszValueName,
  220. REG_DWORD,
  221. (PBYTE)&dwValue,
  222. sizeof(DWORD));
  223. BAIL_ON_VMAFD_ERROR(dwError);
  224. cleanup:
  225. if (pParamsKey)
  226. {
  227. VmAfConfigCloseKey(pParamsKey);
  228. }
  229. if (pRootKey)
  230. {
  231. VmAfConfigCloseKey(pRootKey);
  232. }
  233. if (pConnection)
  234. {
  235. VmAfConfigCloseConnection(pConnection);
  236. }
  237. return dwError;
  238. error:
  239. goto cleanup;
  240. }
  241. DWORD
  242. VmAfdRegDeleteValue(
  243. PCSTR pszSubKey, /* IN */
  244. PCSTR pszValueName /* IN */
  245. )
  246. {
  247. DWORD dwError = 0;
  248. PVMAF_CFG_CONNECTION pConnection = NULL;
  249. PVMAF_CFG_KEY pRootKey = NULL;
  250. PVMAF_CFG_KEY pParamsKey = NULL;
  251. dwError = VmAfConfigOpenConnection(&pConnection);
  252. BAIL_ON_VMAFD_ERROR(dwError);
  253. dwError = VmAfConfigOpenRootKey(
  254. pConnection,
  255. "HKEY_LOCAL_MACHINE",
  256. 0,
  257. KEY_SET_VALUE,
  258. &pRootKey);
  259. BAIL_ON_VMAFD_ERROR(dwError);
  260. dwError = VmAfConfigOpenKey(
  261. pConnection,
  262. pRootKey,
  263. pszSubKey,
  264. 0,
  265. KEY_SET_VALUE,
  266. &pParamsKey);
  267. BAIL_ON_VMAFD_ERROR(dwError);
  268. dwError = VmAfConfigDeleteValue(
  269. pParamsKey,
  270. pszValueName
  271. );
  272. BAIL_ON_VMAFD_ERROR(dwError);
  273. cleanup:
  274. if (pParamsKey)
  275. {
  276. VmAfConfigCloseKey(pParamsKey);
  277. }
  278. if (pRootKey)
  279. {
  280. VmAfConfigCloseKey(pRootKey);
  281. }
  282. if (pConnection)
  283. {
  284. VmAfConfigCloseConnection(pConnection);
  285. }
  286. return dwError;
  287. error:
  288. goto cleanup;
  289. }