What's oEndScene? If that finalizes the rendering, you should call it _after_ you render your crosshair, because the game, should in theory, be about to finalize the rendering when calling xEndScene, and so it would make sense to draw there and then finalize.
Also, you shouldn't be clearing the screen if you're rendering over an existing frame.
AFAIK, you don't seem to be initilizing pRect2 either.
Why don't you just initilize a basic vertex buffer and draw a line-list on the near-plane? I see what you're trying to do with the clear member function of the device but it's a bit of an odd route to take.