Following KimL's suggestion I contacted NI email support. To summarise their answer:
CAUSE: The GPIB card has no sending buffer - if data can't be sent the OS generates a wait function to hold transmission until the device is ready to receive. When NRFD goes low (i.e. the device is ready) the wait function transmits the data. Too much data too fast and the OS generates too many waits. Result - the blue-screen noted.
SOLUTION - Use *ESE, *SRE, and WaitSRQ() to block the calling code until the operation ("RESET" in the example below) has completed.
Example:
Send(m_nBoardId, addr[0], "RESET", 5, NLend);
Send(m_nBoardId, addr[0], "*ESE 0x1", 8, NLend);
Send(m_nBoardId, addr[0], "*SRE 0x1", 8, NLend);
WaitSRQ (m_nBoardId, Finished) // Finished being 1
or 0
ReadStatusByte(m_nBoardId, addr[0], serialres) // serialres is the serial
byte
We've tried this, and it definitely improves things. However, we are still getting the same blue-screen, but far less frequently. We are currently investigating further...