Index: /trunk/src/VBox/Devices/Audio/testcase/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Devices/Audio/testcase/Makefile.kmk	(revision 87839)
+++ /trunk/src/VBox/Devices/Audio/testcase/Makefile.kmk	(revision 87840)
@@ -37,6 +37,19 @@
 	$(QUIET)$(APPEND) -t "$@" "done"
 
+ ifeq ($(KBUILD_TARGET),win.amd64) # Note: Only runs on Windows 8 or newer.
+  tstAudioClient3_TEMPLATE = VBOXR3TSTEXE
+  tstAudioClient3_DEFS = TESTCASE
+  tstAudioClient3_DEFS.debug = VBOX_WITH_EF_WRAPS
+  tstAudioClient3_SOURCES = tstAudioClient3.cpp
+  tstAudioClient3_LIBS = $(LIB_RUNTIME)
+  tstAudioClient3_INCS = \
+	$(KBUILD_DEVTOOLS)/win.x86/sdk/v10.0.17134.0/Include/10.0.17134.0/um \
+	$(KBUILD_DEVTOOLS)/win.x86/sdk/v10.0.17134.0/include/10.0.17134.0/shared
+
+  # Requires manual execution / verification.
+  PROGRAMS += tstAudioClient3
+ endif
+
 endif
 
 include $(FILE_KBUILD_SUB_FOOTER)
-
Index: /trunk/src/VBox/Devices/Audio/testcase/tstAudioClient3.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/testcase/tstAudioClient3.cpp	(revision 87840)
+++ /trunk/src/VBox/Devices/Audio/testcase/tstAudioClient3.cpp	(revision 87840)
@@ -0,0 +1,102 @@
+/* $Id$ */
+/** @file
+ * Audio testcase - Tests for the IAudioClient3 interface.
+ */
+
+/*
+ * Copyright (C) 2021 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+
+#include <iprt/errcore.h>
+#include <iprt/initterm.h>
+#include <iprt/mem.h>
+#include <iprt/rand.h>
+#include <iprt/stream.h>
+#include <iprt/string.h>
+#include <iprt/test.h>
+
+#include <iprt/win/windows.h>
+
+#include <Audioclient.h>
+#include <mmdeviceapi.h>
+
+int main(int argc, char **argv)
+{
+    RTR3InitExe(argc, &argv, 0);
+
+    /*
+     * Initialize IPRT and create the test.
+     */
+    RTTEST hTest;
+    int rc = RTTestInitAndCreate("tstAudioMixBuffer", &hTest);
+    if (rc)
+        return rc;
+    RTTestBanner(hTest);
+
+    /* Note: IAudioClient3 is supported on Win8 or newer. */
+
+    /** @todo Very crude for now, lacks error checking and such. Later. */
+
+    HRESULT hr = CoInitialize(NULL);
+
+    IMMDeviceEnumerator* pEnumerator;
+    hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL,
+                          __uuidof(IMMDeviceEnumerator),
+                          reinterpret_cast<void**>(&pEnumerator));
+
+    IMMDevice* pDevice;
+    hr = pEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &pDevice);
+
+    IAudioClient3* pAudioClient;
+    hr = pDevice->Activate(__uuidof(IAudioClient3), CLSCTX_ALL, NULL, reinterpret_cast<void**>(&pAudioClient));
+
+    WAVEFORMATEX* pFormat;
+    hr = pAudioClient->GetMixFormat(&pFormat);
+
+    UINT32 defaultPeriodInFrames;
+    UINT32 fundamentalPeriodInFrames;
+    UINT32 minPeriodInFrames;
+    UINT32 maxPeriodInFrames;
+    hr = pAudioClient->GetSharedModeEnginePeriod(pFormat,
+                                                 &defaultPeriodInFrames,
+                                                 &fundamentalPeriodInFrames,
+                                                 &minPeriodInFrames,
+                                                 &maxPeriodInFrames);
+
+    RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "def=%RU32, fundamental=%RU32, min=%RU32, max=%RU32\n",
+                 defaultPeriodInFrames, fundamentalPeriodInFrames, minPeriodInFrames,  maxPeriodInFrames);
+
+    uint32_t cfDefault = defaultPeriodInFrames * 2;
+
+    RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "Trying to set %RU32 as default ...\n", cfDefault);
+
+    hr = pAudioClient->InitializeSharedAudioStream(0, cfDefault, pFormat, NULL);
+    if (hr != S_OK)
+        RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "Unable to set new period");
+    else
+    {
+        RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "OK");
+
+        hr = pAudioClient->Start();
+
+        /** @todo Do some waiting / testing here. */
+    }
+
+    /*
+     * Summary
+     */
+    return RTTestSummaryAndDestroy(hTest);
+}
