Start implementing named pipes.

diff --git a/files/file.c b/files/file.c
index fecfce3..e976bf3 100644
--- a/files/file.c
+++ b/files/file.c
@@ -339,6 +339,31 @@
     return ret;
 }
 
+static HANDLE FILE_OpenPipe(LPCSTR name, DWORD access)
+{
+    HANDLE ret;
+    DWORD len = name ? MultiByteToWideChar( CP_ACP, 0, name, strlen(name), NULL, 0 ) : 0;
+
+    TRACE("name %s access %lx\n",name,access);
+
+    if (len >= MAX_PATH)
+    {
+        SetLastError( ERROR_FILENAME_EXCED_RANGE );
+        return 0;
+    }
+    SERVER_START_VAR_REQ( open_named_pipe, len * sizeof(WCHAR) )
+    {
+        req->access = access;
+
+        if (len) MultiByteToWideChar( CP_ACP, 0, name, strlen(name), server_data_ptr(req), len );
+        SetLastError(0);
+        SERVER_CALL_ERR();
+        ret = req->handle;
+    }
+    SERVER_END_VAR_REQ;
+    TRACE("Returned %d\n",ret);
+    return ret;
+}
 
 /*************************************************************************
  * CreateFileA [KERNEL32.@]  Creates or opens a file or other object
@@ -365,7 +390,7 @@
  *
  * BUGS
  *
- * Doesn't support character devices, pipes, template files, or a
+ * Doesn't support character devices, template files, or a
  * lot of the 'attributes' flags yet.
  */
 HANDLE WINAPI CreateFileA( LPCSTR filename, DWORD access, DWORD sharing,
@@ -406,7 +431,12 @@
     }
 
     if (!strncmp(filename, "\\\\.\\", 4)) {
-        if (!DOSFS_GetDevice( filename ))
+        if(!strncasecmp(&filename[4],"pipe\\",5))
+        {
+            TRACE("Opening a pipe: %s\n",filename);
+            return FILE_OpenPipe(filename,access);
+        }
+        else if (!DOSFS_GetDevice( filename ))
         {
             ret = DEVICE_Open( filename+4, access, sa );
             goto done;