Well, I fixed all the other problems (I will skip my rant on how ""successful"" this peer review was.)
- ROS_EPROCESS was not covered by pshpack4.h/poppack.h like EPROCESS was. This caused alignment mismatches when typecasting. - SECTION_OBJECT was allocated with sizeof(SECTION_OBJECT), then freed with sizeof(ROS_SECTION_OBJECT), and other similar size problems. - The thread callback went from (IN BOOLEAN Create) to (IN SOMEENUM Type), where Type 0 is create, and Type 1 is destroy. However the calling logic was not reversed.
I am going to commit the patch tomorrow, then work on the following:
1) Undo the HANDLE_TABLE/HANDLE_TABLE_ENTRY hacks and see why they were the cause of that strange APC_LEVEL assertion during mutex release. 2) Use PVOID Spare0[3]; in the real EPROCESS to store the LockThread and LockCount, and change the lock implementation to allocate the event so that the last spare can be used as a PKEVENT instead. Of course, once pushlocks work, this should all go away, but like this, ROS_EPROCESS can die. 3) Get rid of MADDRESS_SPACE and use the NT Type instead. I think most fields can be mapped to the NT Type, without changing any of Filip's implementation. 4) Write a local patch to use NT-style object directories, to avoid using a list_entry and so that ROS_OBJECT_HEADER can become OBJECT_HEADER again. 5) MSVC Support
Best regards, Alex Ionescu