IPC: Difference between revisions

Created page with "Every RPC command sent to services starts with a u32 header code: {| class="wikitable" border="1" |- ! Bits ! Description |- | 0-5 | Number of translate parameters (=x) |- | 6..."
 
No edit summary
Line 40: Line 40:
Translate parameters are modified/translated transparently by the kernel. They are used to transfer handles/buffers between the different processes.
Translate parameters are modified/translated transparently by the kernel. They are used to transfer handles/buffers between the different processes.


Translate parameters comes in pairs of two words, one descriptor and one value.
The type of parameter is described by the bits 1-3 in the translation descriptor. Parameter types accepted by the kernel are: 0, 1, (2?), 5, 6, 7.
 
The number of parameters covered by a descriptor is type-dependent:
Type 0:
    length = (desc >> 26) + 1
Type 1, (2?), 5, 6, 7:
    length = 1
 
Type 0 does the following:
if desc & 0x30 == 0x20:
  write process id to value
else:
  translate handle
  if desc & 0x30 == 0x10:
    close handle for caller
 
--


{| class="wikitable" border="1"
{| class="wikitable" border="1"