Content deleted Content added
Ivan Štambuk (talk | contribs) No edit summary |
|||
Line 1:
The '''
The (A)LPC interface is part of Windows NT's undocumented [[Native API]], and as such is not available to applications for direct use. However, it can be used indirectly in following instances:
* when using [[Remote Procedure Call]] API to communicate locally, i.e. between the processes on the same machine
* by calling Windows API which use (A)LPC (see below)
==Implementation==
(A)LPC is implemented using kernel "port" objects
# A server process first creates a ''named server connection port'' object, and waits for clients to connect.
# A client requests a connection to that named port by sending a connect message.
# If the server accepts the connection, two ''unnamed'' ports are created:
#* ''client communication port'' - used by client threads to communicate with a particular server
#* ''server communication port'' - used by server to communication with a particular client; one such port per client is created
# The client receives a handle to the client communication port, and server receives a handle to the server communication port, and the inter-process communication channel is established.
(A)LPC supports the following three modes of message exchange between the server and client:<ref>{{Harvcoltxt|Russinovich|Solomon|Ionescu|2009|p=203}}</ref>
* For short messages (fewer than
* Long messages longer than 256 bytes a shared memory section must be used to transfer data, which the (A)LPC service maps between the sending and receiving processes. First the sender places data into the shared memory, and then sends a notification (e.g. a small message, using the first method of (A)LPC) to the receiving process pointing to the sent data in the shared memory section.
* Server can directly read and write data from the client's address space, when the amount of data is too large to fit in a shared section.
ALPC has a performance advantage over the former LPC interface, as it can be configured to use [[Input/output completion port|I/O completion ports]] instead of synchronous request/reply mechanism that LPC exclusively uses.<ref>{{Harvcoltxt|Russinovich|Solomon|Ionescu|2009|p=204}}</ref> This enables ALPC ports high-speed communication which automatically balance the number of messages and threads. Additionally, ALPC messages can be batched together so as to minimize user-mode/kernel-mode switches.
==Known usage==
(A)LPC is used heavily in communication between internal subsystems in Windows NT. The Win32 subsystem used (A)LPC heavily for communication between client and the subsystem server ([[Client/Server Runtime Subsystem|CSRSS]]). Quick LPC was introduced in version 3.51 of Windows NT to make these calls faster. This method was largely abandoned in version 4.0 in favor of moving the performance critical server portions into kernel mode (win32k.sys).
The [[Local Security Authority Subsystem Service]] (LSASS), [[Session Manager]] (SMSS), and [[Service Control Manager]] all use (A)LPC ports directly to communicate with client processes. [[Winlogon]] and the [[Reference monitor|Security Reference Monitor]] use it to communicate with the LSASS process.
==See also==
* [[Doors (computing)|Doors]]
* [[Remote procedure call]]
==Notes==
{{reflist}}
==References==
* {{citation |first1=Prasad |last1=Dabak
* {{citation |title=Windows® Internals| edition=5th |first1=Mark |last1=Russinovich |author1-link=Mark Russinovich |first2=David |last2=Solomon |first3=Alex |last3=Ionescu |year=2009 |publisher=[[Microsoft Press]] |isbn=0735625301}}
==External links==
|