As you note in your comment, most of this should go into wined3d. I also think this should for the most part use the same code that is used for CheckDeviceFormat in dlls/wined3d/directx.c. Roderick would probably be able to help you best there, but he's currently away.
I am not sure, ddraw has different pool requirements and behaviors I think. e.g. ddraw can create sysmem render targets it seems. (Of course ddraw doesn't do volume textures, but I think we shouldn't apply different rules to volume and 2D textures)