The Microsoft documentation for the WAVEOUTCAPS struct lists a number of formats that an audio device can support:
I do not see any 24-bit variables listed here, although through I have confirmed my sound card is capable of opening a 24-bit output with a call to WaveOutOpen (and playing 24bit audio files through that output).
I'm guessing that Microsoft defined additional variables somewhere for 18/20/24/32/48/64 bit output, but I can't find them. I tried searching on the net and nothing came up, and I tried using Visual Studio to search for variables in my current name space that start with "WAVE_FORMAT_" but did not find any additionally defined formats that way.
Is it possible to check for 4/18/20/24/32/48/64 bit output availability on Windows using the function WaveOutGetDevCap(), or any similar function? If so, how?

waveOutXxxis legacy API you, generally speaking, should not be used nowadays. This API is an emulation layer on top of real audio API and does not have to support 24-bit scenarios which did not exist at the time ofwaveOutXxx. There are no specific new constants defined for newer formats and there are so many of them that there cannot be a separate bit for every one.You can compose a
WAVEFORMATEXstructure that describes your high bitness format (you would typically useWAVEFORMATEXTENSIBLEvariant of it) and check it againstwaveOutOpenfunction.Or, rather, use WASAPI and
IAudioClient::Initialize, see Rendering a Stream for details and the wayWAVEFORMATEXstructure is used there.