- static BOOL recursive = FALSE;
That static looks very suspicious. It should either be stored in the object or use some sort of locking.
Well, there is locking, it is done by the client library(ddraw, d3d8, d3d9). Still storing this in the object is a good idea I think