A bit more on optimizing (or, rather, not regressing) performance of the "normal" case, did you consider attempting to write first and then query protection only if write failed with the status suggesting missing memory write access? Also, the new behaviour still rejects PAGE_READONLY, PAGE_NOACCESS. It seems to me that only PAGE_EXECUTE_READ (and maybe PAGE_EXECUTE in theory) are left, maybe it would be clearer to check for allowed cases instead?