[RFC] Named Pipes emulation and interoperability layer

Luke Kenneth Casson Leighton luke.leighton at googlemail.com
Tue Feb 17 10:07:57 CST 2009


http://lkcl.net/namedpipes/namedpipes-emulation.txt

this specification is intended to be implemented as a library, similar
to a systems library that provides for example TCP/IP in userspace.
thus it could easily be utilised by samba, samba tng, samba 4, apache
runtime or in fact any POSIX-compliant system that intends to offer
interoperable "Windows NT Named Pipe Emulation".

the purpose of the document is to provide a guide to creating emulated
implementation of Windows NT Named Pipes.  implementors could use this
to communicate between clients and servers inside their applications
(such as the Wine application), with the added benefit that additional
applications (such as the Samba application) that also conformed to
the specification could interoperate.  For example, the creation of a
NamedPipe inside a Samba service could be talked to by a Wine client,
and vice-versa.

ultimately the specification _could_ potentially be used as a guide to
writing a kernel-level implementation of Windows NT Named Pipes
emulation.

Note that this specification does NOT include "transfer of data over a
network", as that task is carried out by SMB clients and SMB servers
utilising SMBopenX, SMBclose, SMBreadX, SMBwriteX and SMBtrans2
subcommands 0x1, 0x26 and 0x53 to represent SetNPHS, WaitNamedPipe and
TransactNamedPipe.

Note that this specification does NOT have the API of the Win32
functions it is intended to emulate but is instead based very much on
the design of the SMB protocols (much simplified), and thus provides
an exact topological mapping of all SMB operations necessary to
provide full Named Pipes functionality.

Missing from the specification (but mandatory) at this time is
PeekNamedPipe and GetNamedPipeHandleState, because it is clear that
the functionality inside of Samba is entirely missing support for such
(see call_trans2qpipeinfo in samba 3 smbd/trans2.c source code).
Research WILL be required at a later stage in the form of running
Win32 test applications, along with examination of the resultant
network traffic, in order to determine the necessary support inside
Samba for these two vital Named Pipe operations.  From the design of
Wine, and the stub code in smbd/trans2.c it is likely that these two
functions will simply be direct mappings from NtQueryFileInformation
#defines onto Trans2_QueryFileInfo, with blindingly obvious parameters
and data structures to anyone familiar with both dlls/ntdll/file.c in
Wine, and smbd/trans2.c in Samba.

l.



More information about the wine-devel mailing list