Mathematica does not support this directly. You can do things of this sort using an external package called NCAlgebra.
The relevant documentation may be found at
http://math.ucsd.edu/~ncalg/DOWNLOAD2010/DOCUMENTATION/html/NCBIGDOCch4.html#x8-510004.4
In particular have a look at "4.4.8 NCLDUDecomposition[aMatrix, Options]"
Using this package, you would find the block inverse of the example matrix using:
c=0; inverse = NCInverse[matrix] (* Out[] = {{inv[a], -inv[a] ** b ** inv[d]}, {0, inv[d]}} *) Here inv[a] represents the general inverse of the a block of the matrix and the ** represents non-commutative (i.e. matrix) multiplication. This approach works for larger (3x3, 4x4, etc) square block matrices as well.