A fat read/write lock works exactly like the SRW locks featured in the Windows SDK. The main difference is that these fat versions can be acquired recursively. Access cannot be upgraded from shared to exclusive without releasing the lock first but shared access will be granted if the thread already has exclusive access.

After initialization, flags can be set to RTL_RESOURCE_WAIT_INDEFINITIELY to change the wait timeout in the RtlAcquireResource* functions. Setting the bit enables infinite waits. Without it, the wait timeout is the value of Peb->CriticalSectionTimeout which defaults to 30 days.