prototypes for __PdxSerializeProcessData and __PdxUnserializeProcessData
[reactos.git] / posix / include / psx / pdata.h
index 56d7308..264046c 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: pdata.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
+/* $Id: pdata.h,v 1.4 2002/03/10 17:03:18 hyperion Exp $
  */
 /*
  * psx/pdata.h
 /* TYPES */
 typedef struct __tagPDX_PDATA
 {
- UNICODE_STRING  NativePathBuffer;
- UNICODE_STRING  CurDir;
- UNICODE_STRING  RootPath;
- HANDLE          RootHandle;
- __fdtable_t    *FdTable;
+ BOOL            Spawned;          /* TRUE if process has been created through __PdxSpawnPosixProcess() */
+ int             ArgCount;         /* count of arguments passed to exec() */
+ char          **ArgVect;          /* array of arguments passed to exec() */
+ char         ***Environment;      /* pointer to user-provided environ variable */
+ UNICODE_STRING  NativePathBuffer; /* static buffer used by low-level calls for pathname conversions */
+ UNICODE_STRING  CurDir;           /* current working directory */
+ UNICODE_STRING  RootPath;         /* NT path to the process's root directory */
+ HANDLE          RootHandle;       /* handle to the process's root directory */
+ __fdtable_t     FdTable;          /* file descriptors table */
 } __PDX_PDATA, * __PPDX_PDATA;
 
+/* serialized process data block, used by __PdxSpawnPosixProcess() and __PdxExecThunk().
+   The layout of buffers inside the Buffer byte array is as following:
+
+   ArgVect[0] + null byte
+   ArgVect[1] + null byte
+   ...
+   ArgVect[ArgCount - 1] + null byte
+   Environment[0] + null byte
+   Environment[1] + null byte
+   ...
+   Environment[n - 1] + null byte (NOTE: the value of n is stored in ProcessData.Environment)
+   CurDir.Buffer
+   RootPath.Buffer
+   FdTable.Descriptors[0]
+   FdTable.Descriptors[1]
+   ...
+   FdTable.Descriptors[FdTable.AllocatedDescriptors - 1]
+   FdTable.Descriptors[x].ExtraData
+   FdTable.Descriptors[y].ExtraData
+   ...
+   padding for page boundary alignment
+ */
+typedef struct __tagPDX_SERIALIZED_PDATA
+{
+ __PDX_PDATA ProcessData;
+ ULONG       AllocSize;
+ BYTE        Buffer[1];
+} __PDX_SERIALIZED_PDATA, *__PPDX_SERIALIZED_PDATA;
+
 /* CONSTANTS */
 
 /* PROTOTYPES */
+NTSTATUS STDCALL __PdxSerializeProcessData(IN __PPDX_PDATA, OUT __PPDX_SERIALIZED_PDATA *);
+NTSTATUS STDCALL __PdxUnserializeProcessData(IN OUT __PPDX_SERIALIZED_PDATA *, OUT __PPDX_PDATA * OPTIONAL);
 
 /* MACROS */
 #define __PdxAcquirePdataLock() (RtlAcquirePebLock())
 #define __PdxReleasePdataLock() (RtlReleasePebLock())
 
-#define __PdxSetProcessData()(PPDATA) ((void)((NtCurrentPeb()->SubSystemData) = (PPDATA)))
-#define __PdxGetProcessData()         ((__PPDX_PDATA)(&(NtCurrentPeb()->SubSystemData)))
+#define __PdxSetProcessData(PPDATA) ((void)((NtCurrentPeb()->SubSystemData) = (PPDATA)))
+#define __PdxGetProcessData()       ((__PPDX_PDATA)(&(NtCurrentPeb()->SubSystemData)))
 
 #define __PdxGetNativePathBuffer() ((PUNICODE_STRING)(&(__PdxGetProcessData()->NativePathBuffer)))
 #define __PdxGetCurDir()           ((PUNICODE_STRING)(&(__PdxGetProcessData()->CurDir)))