[ros-dev] WIN32K: LPC use

Emanuele Aliberti ea at iol.it
Sun Jan 16 22:14:26 CET 2005


Hi Alex,
I hope you are fine now, after the party and a restful night... ;-)

> I'm currently working/researching on the LPC implementation and I'm 
> about to soon start reworking some of our code. Just to avoid any 
> duplication, are you also working on such a thing, or simply exploring?

David Welch wrote our initial LPC code to resemble the BSD sockets 
general design (an LPC port behaves exactly like a BSD socket; there are 
ports in listening state and connected ports to send/receive datagrams). 
That is, of course, not the way NT LPC works, but at the time David 
wrote the code, we knew almost nothing about LPC, but the incomplete 
information Prasad Dabak wrote in "Undocumented Windows NT" (1999). That 
code was good enough to start with user mode subsystem servers, but till 
now it has prevented us from testing real system components like the SM, 
CSR and friends etc. for compatibility in ROS. This is what I have done 
for the last three years. What I got from the researching is some better 
understanding of how LPC works, but not a complete picture. I am glad to 
see you are working or planning to work on LPC, because there is at 
least one API that is incompatible with NT's, and the general semantics 
of the path connect->request->reply is wrong. In short, it is the the 
listening port that receives the messages from the clients even after 
the connection happens and not the server side connected port). This 
could be deducted by studing more carefully the sample code provided by 
Dabak, but I found it indipendently with some simple c/s test code. I 
told it to David, Eric and others and they agreed that should be 
correct. I will share what I know and I can send my unfinished code if 
it may be of interest (not that I am that a skilled coder, but you could 
just tour it for fun).
Recalling what David Welch told me in many occasions, NT LPC has many 
flaws, many are security related (this led Microsoft to introduce secure 
ports with NT 5.0, mostly to armour the LSA). The overall problem with 
the real LPC is that it looks like really old, not well understood in 
Microsoft and almost untouched for years (many unfixed LPC bugs still 
plague Windows). You could even imagine it was part of the Prism project 
at DEC, in the '80s, perhaps with the name "Channel" for what we now 
know as "port" (undocumented and unimplemented APIs existed in NT 3.1, 
NT 3.5, NT 3.51, NT 4.0 and NT 5.0, but disappeared in NT 5.1 and NT 
5.2). It seems that only lately (1999+) Microsoft forced the NT kernel 
team to face the old LPC code to improve it.
Alex, what are your plans for rewriting the LPC code?

Emanuele


More information about the Ros-dev mailing list