The desktop bounds, or 'WorkingArea' of the adapter can be found using the Screen(System.Windows.Forms.Screen) class. First you must have the handle of the device window(System.Windows.Forms.Form) displayed on the adapter. Then you can get the working area like this:
// get the adapter monitor
Screen adapterMonitor = Screen.FromHandle(GetForm().Handle);
// get the working area(System.Windows.Forms.Rectangle)
Rectangle workingArea = adapterMonitor.WorkingArea;
Retrieves a Screen for the display that contains the largest portion of the object referred to by the specified handle. (From MSDN)
Also, the Direct3D9 object has a function that returns the handle(IntPtr) of the adapter monitor. I haven't worked with multiple monitors yet so I couldn't say that this method will work well but here is code for SlimDX:
// get the index for the desired adapter
int adapterOrdinal = ?
// you should have this function somewhere in order to retrieve your Direct3D9 object
SlimDX.Direct3D9.Direct3D d3d9 = GetDirect3D9();
// get adapter monitor handle
IntPtr ptr = d3d9.GetAdapterMonitor(adapterOrdinal);
You'll need to compare the monitor handle returned to the list of screens found on the system. Screen.AllScreens is a list of all screens.
As for the adapter mode comments above you should see the DirectX SDK and check out the DXUT classes, especially DXUTenum.cpp. This class is necessary for an application. It will enumerate all adapter display modes and build a collection of 'combinations' that can be used. Display Modes have specific capabilities. Certain modes cannot go fullscreen. Certain modes require a particular back buffer format for use with the adapter format. Certain depth/stencil buffer formats conflict with multisample types...and so on. Were you to try and create a device using improper settings the API will throw an exception...or return 'Invalid Call'. DXUT is very useful and is a great tool for avoiding conflicts.