Hi,
I am aware that I broke trunk. This is because I've removed the code in ObReferenceObjectByHandle which allowed GENERIC access masks to be converted. This API does NOT support GENERIC access masks and converting to them was incorrect, however, as always, plenty of code in ROS abused the system and calls this API incorrectly. Although ObOpenObjectByName should return a handle and IoCreateFile should be done with it, because parsing is broken (so it creeps up again!), we try to re-reference it by handle to get its pointer... however, this attempt is made with the current AccessMode, which happens to be User, and if the AccessMask was GENERIC... we fail. ObOpenObjectByName is made to be used with GENERIC access masks so that's really not a problem. Hopefully the I/O File stuff is the only place where this happens, so I will implement a simple hack - call ObReferenceObjectByHandle with a KernelMode parameter so that access checks are skipped (we've already done them in ObOpenObjectByName anyways!).
Best regards, Alex Ionescu