I don't like CriticalUnblock (and it means that the critsec is briefly and pointlessly regained a tthe end of the function).

It looks to me as though what was ACTUALLY intended was that the critblock scope should be shorter - if so, then it should be coded like that.