+MIXER_STATUS
+QueryKeyValue(
+ IN HANDLE hKey,
+ IN LPWSTR KeyName,
+ OUT PVOID * ResultBuffer,
+ OUT PULONG ResultLength,
+ OUT PULONG KeyType)
+{
+ if (RegQueryValueExW((HKEY)hKey, KeyName, NULL, KeyType, NULL, ResultLength) == ERROR_FILE_NOT_FOUND)
+ return MM_STATUS_UNSUCCESSFUL;
+
+ *ResultBuffer = HeapAlloc(GetProcessHeap(), 0, *ResultLength);
+ if (*ResultBuffer == NULL)
+ return MM_STATUS_NO_MEMORY;
+
+ if (RegQueryValueExW((HKEY)hKey, KeyName, NULL, KeyType, *ResultBuffer, ResultLength) != ERROR_SUCCESS)
+ {
+ HeapFree(GetProcessHeap(), 0, *ResultBuffer);
+ return MM_STATUS_UNSUCCESSFUL;
+ }
+ return MM_STATUS_SUCCESS;
+}
+
+MIXER_STATUS
+OpenKey(
+ IN HANDLE hKey,
+ IN LPWSTR SubKey,
+ IN ULONG DesiredAccess,
+ OUT PHANDLE OutKey)
+{
+ if (RegOpenKeyExW((HKEY)hKey, SubKey, 0, DesiredAccess, (PHKEY)OutKey) == ERROR_SUCCESS)
+ return MM_STATUS_SUCCESS;
+
+ return MM_STATUS_UNSUCCESSFUL;
+}
+
+MIXER_STATUS
+CloseKey(
+ IN HANDLE hKey)
+{
+ RegCloseKey((HKEY)hKey);
+ return MM_STATUS_SUCCESS;
+}
+
+