In Vulkan, you can query each physical device (adapter) for the queue types it supports and the number of queues of each type. What is the equivalent in D3D12? I see lots of apparently conflicting information on MSDN and the rest of the web. Sometimes, it seems D3D12 supports one queue of each type, and other times, it seems it supports more, particularly for compute and copy queues. Are you just supposed to call ID3D12Device::CreateCommandQueue until it fails, like how you enumerate adapters by calling IDXGIFactory1::EnumAdapters1? Do you create any number of logical queues of each type and let the driver handle scheduling them to the actual physical queues? It's all very confusing.
Querying queue support
It seems like that D3D12 queues sit a bit higher in the abstraction levels than the Vulkan queues. So your assessment of creating queues until failure seems correct. I just wrote a small test to create 4096 queues in D3D12 and nothing happened. OTOH, vkGetDeviceQueue will probably result in an access violation if you attempt to grab a queue that exceeds the number of queues in the queue family.
I've also have not yet seen any functions that returns queue properties in D3D12.
Queues are essentially virtualized in D3D12. There's no guarantee that each queue you create maps to some dedicated hardware or driver queue. So even if you create two queues and submit on them, your submissions may end up getting serialized and fed to single queue on the hardware or driver level.