2006-06-23 Dick Porter <dick@ximian.com>
[mono.git] / mono / io-layer / processes.h
index 09756dc0084eb1abdbb452a5f5d729010708b631..bd636e878ffdbee67393d0d048b5aaf2ea6ee44b 100644 (file)
 
 #include <glib.h>
 
-#include "mono/io-layer/handles.h"
+#include <mono/io-layer/handles.h>
+#include <mono/io-layer/access.h>
+
+G_BEGIN_DECLS
+
+typedef enum {
+       STARTF_USESHOWWINDOW=0x001,
+       STARTF_USESIZE=0x002,
+       STARTF_USEPOSITION=0x004,
+       STARTF_USECOUNTCHARS=0x008,
+       STARTF_USEFILLATTRIBUTE=0x010,
+       STARTF_RUNFULLSCREEN=0x020,
+       STARTF_FORCEONFEEDBACK=0x040,
+       STARTF_FORCEOFFFEEDBACK=0x080,
+       STARTF_USESTDHANDLES=0x100
+} WapiStartupFlags;
+
 
 typedef struct _WapiStartupInfo WapiStartupInfo;
 
@@ -29,7 +45,7 @@ struct _WapiStartupInfo
        guint32 dwXCountChars;
        guint32 dwYCountChars;
        guint32 dwFillAttribute;
-       guint32 dwFlags;
+       WapiStartupFlags dwFlags;
        guint16 wShowWindow;
        guint16 cbReserved2;
        guint8 *lpReserved2;
@@ -48,6 +64,65 @@ struct _WapiProcessInformation
        guint32 dwThreadId;
 };
 
+typedef enum {
+       SEE_MASK_CLASSNAME      = 0x01,
+       SEE_MASK_CLASSKEY       = 0x03,
+       SEE_MASK_IDLIST         = 0x04,
+       SEE_MASK_INVOKEIDLIST   = 0x0c,
+       SEE_MASK_ICON           = 0x10,
+       SEE_MASK_HOTKEY         = 0x20,
+       SEE_MASK_NOCLOSEPROCESS = 0x40,
+       SEE_MASK_CONNECTNETDRV  = 0x80,
+       SEE_MASK_FLAG_DDEWAIT   = 0x100,
+       SEE_MASK_DOENVSUBST     = 0x200,
+       SEE_MASK_FLAG_NO_UI     = 0x400,
+       SEE_MASK_NO_CONSOLE     = 0x8000,
+       SEE_MASK_UNICODE        = 0x10000,
+       SEE_MASK_HMONITOR       = 0x200000,
+       /*SEE_MASK_FLAG_LOG_USAGE,*/
+       /*SEE_MASK_NOZONECHECKS,*/
+} WapiShellExecuteInfoFlags;
+
+typedef enum {
+       SW_HIDE = 0,
+       SW_SHOWNORMAL = 1,
+       SW_SHOWMINIMIZED = 2,
+       SW_MAXIMIZE = 3,
+       SW_SHOWMAXIMIZED = 3,
+       SW_SHOWNOACTIVATE = 4,
+       SW_SHOW = 5,
+       SW_MINIMIZE = 6,
+       SW_SHOWMINNOACTIVE = 7,
+       SW_SHOWNA = 8,
+       SW_RESTORE = 9,
+       SW_SHOWDEFAULT = 10,
+} WapiShellExecuteShowFlags;
+
+typedef struct _WapiShellExecuteInfo WapiShellExecuteInfo;
+
+struct _WapiShellExecuteInfo
+{
+       guint32 cbSize;
+       WapiShellExecuteInfoFlags fMask;
+       gpointer hwnd;
+       const gunichar2 *lpVerb;
+       const gunichar2 *lpFile;
+       const gunichar2 *lpParameters;
+       const gunichar2 *lpDirectory;
+       WapiShellExecuteShowFlags nShow;
+       gpointer hInstApp;
+       gpointer lpIDList;
+       const gunichar2 *lpClass;
+       gpointer hkeyClass;
+       guint32 dwHotKey;
+       union 
+       {
+               gpointer hIcon;
+               gpointer hMonitor;
+       } u;
+       gpointer hProcess;
+};
+
        
 #define DEBUG_PROCESS 0x00000001
 #define DEBUG_ONLY_THIS_PROCESS 0x00000002
@@ -74,12 +149,49 @@ struct _WapiProcessInformation
 #define CREATE_PRESERVE_CODE_AUTHZ_LEVEL find out the value for this one...
 #endif
 
-extern gboolean CreateProcess (const gunichar2 *appname, gunichar2 *cmdline,
+#define        PROCESS_TERMINATE               0x0001
+#define        PROCESS_CREATE_THREAD           0x0002
+#define        PROCESS_SET_SESSIONID           0x0004
+#define        PROCESS_VM_OPERATION            0x0008
+#define        PROCESS_VM_READ                 0x0010
+#define        PROCESS_VM_WRITE                0x0020
+#define        PROCESS_DUP_HANDLE              0x0040
+#define        PROCESS_CREATE_PROCESS          0x0080
+#define        PROCESS_SET_QUOTA               0x0100
+#define        PROCESS_SET_INFORMATION         0x0200
+#define        PROCESS_QUERY_INFORMATION       0x0400
+#define        PROCESS_ALL_ACCESS              (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xfff)
+
+extern gboolean ShellExecuteEx (WapiShellExecuteInfo *sei);
+extern gboolean CreateProcess (const gunichar2 *appname,
+                              const gunichar2 *cmdline,
                               WapiSecurityAttributes *process_attrs,
                               WapiSecurityAttributes *thread_attrs,
                               gboolean inherit_handles, guint32 create_flags,
-                              gpointer env, const gunichar2 *cwd,
+                              gpointer environ, const gunichar2 *cwd,
                               WapiStartupInfo *startup,
                               WapiProcessInformation *process_info);
+extern gpointer GetCurrentProcess (void);
+extern guint32 GetProcessId (gpointer handle);
+extern guint32 GetCurrentProcessId (void);
+extern gboolean EnumProcesses (guint32 *pids, guint32 len, guint32 *needed);
+extern gpointer OpenProcess (guint32 access, gboolean inherit, guint32 pid);
+extern gboolean GetExitCodeProcess (gpointer process, guint32 *code);
+extern gboolean GetProcessTimes (gpointer process, WapiFileTime *create_time,
+                                WapiFileTime *exit_time,
+                                WapiFileTime *kernel_time,
+                                WapiFileTime *user_time);
+extern gboolean EnumProcessModules (gpointer process, gpointer *modules,
+                                   guint32 size, guint32 *needed);
+extern guint32 GetModuleBaseName (gpointer process, gpointer module,
+                                 gunichar2 *basename, guint32 size);
+extern gboolean GetProcessWorkingSetSize (gpointer process, size_t *min,
+                                         size_t *max);
+extern gboolean SetProcessWorkingSetSize (gpointer process, size_t min,
+                                         size_t max);
+
+extern gboolean TerminateProcess (gpointer process, gint32 exitCode);
+
+G_END_DECLS
 
 #endif /* _WAPI_PROCESSES_H_ */