Release 960712
[wine] / win32 / process.c
1 /*
2  * Win32 kernel functions
3  *
4  * Copyright 1995 Martin von Loewis
5  */
6
7 #include <stdio.h>
8 #include <string.h>
9 #include <unistd.h>
10 #include "windows.h"
11 #include "winerror.h"
12 #include "kernel32.h"
13 #include "handle32.h"
14 #include "task.h"
15 #include "stddebug.h"
16 #include "debug.h"
17
18 static HANDLE32 ProcessHeap = 0;  /* FIXME: should be in process database */
19
20 /***********************************************************************
21  *           ExitProcess   (KERNEL32.100)
22  */
23
24 void ExitProcess(DWORD status)
25 {
26     TASK_KillCurrentTask( status );
27 }
28
29 /***********************************************************************
30  *           CreateMutexA    (KERNEL32.52)
31  */
32 HANDLE32 CreateMutexA (SECURITY_ATTRIBUTES *sa, BOOL on, const char *a)
33 {
34         return 0;
35 }
36
37 /***********************************************************************
38  *           ReleaseMutex    (KERNEL32.435)
39  */
40 BOOL ReleaseMutex (HANDLE32 h)
41 {
42         return 0;
43 }
44
45 /***********************************************************************
46  *           CreateEventA    (KERNEL32.43)
47  */
48 HANDLE32 CreateEventA (SECURITY_ATTRIBUTES *sa, BOOL au, BOOL on, const char
49 *name)
50 {
51         return 0;
52 }
53 /***********************************************************************
54  *           SetEvent    (KERNEL32.487)
55  */
56 BOOL SetEvent (HANDLE32 h)
57 {
58         return 0;
59 }
60 /***********************************************************************
61  *           ResetEvent    (KERNEL32.439)
62  */
63 BOOL ResetEvent (HANDLE32 h)
64 {
65         return 0;
66 }
67 /***********************************************************************
68  *           WaitForSingleObject    (KERNEL32.561)
69  */
70 DWORD WaitForSingleObject(HANDLE32 h, DWORD a)
71 {
72         return 0;
73 }
74 /***********************************************************************
75  *           DuplicateHandle    (KERNEL32.78)
76  */
77 BOOL DuplicateHandle(HANDLE32 a, HANDLE32 b, HANDLE32 c, HANDLE32 * d, DWORD e, BOOL f, DWORD g)
78 {
79         *d = b;
80         return 1;
81 }
82 /***********************************************************************
83  *           GetCurrentProcess    (KERNEL32.198)
84  */
85 HANDLE32 GetCurrentProcess(void)
86 {
87         return 0;
88 }
89
90 /***********************************************************************
91  *           GetProcessHeap    (KERNEL32.259)
92  */
93 HANDLE32 GetProcessHeap(void)
94 {
95     if (!ProcessHeap) ProcessHeap = HeapCreate( 0, 0x10000, 0 );
96     return ProcessHeap;
97 }
98
99 /***********************************************************************
100  *           LoadLibraryA         (KERNEL32.365)
101  * copied from LoadLibrary
102  * This does not currently support built-in libraries
103  */
104 HANDLE32 LoadLibraryA(char *libname)
105 {
106         HANDLE handle;
107         dprintf_module( stddeb, "LoadLibrary: (%08x) %s\n", (int)libname, libname);
108         handle = LoadModule( libname, (LPVOID)-1 );
109         if (handle == (HANDLE) -1)
110         {
111                 char buffer[256];
112                 strcpy( buffer, libname );
113                 strcat( buffer, ".dll" );
114                 handle = LoadModule( buffer, (LPVOID)-1 );
115         }
116         /* Obtain module handle and call initialization function */
117 #ifndef WINELIB
118         if (handle >= (HANDLE)32) PE_InitializeDLLs( GetExePtr(handle));
119 #endif
120         return handle;
121 }
122
123 /***********************************************************************
124  *           FreeLibrary
125  */
126 BOOL FreeLibrary32(HINSTANCE hLibModule)
127 {
128         fprintf(stderr,"FreeLibrary: empty stub\n");
129         return TRUE;
130 }
131
132 /**********************************************************************
133  *          GetProcessAffinityMask
134  */
135 BOOL GetProcessAffinityMask(HANDLE32 hProcess, LPDWORD lpProcessAffinityMask,
136   LPDWORD lpSystemAffinityMask)
137 {
138         dprintf_task(stddeb,"GetProcessAffinityMask(%x,%x,%x)\n",
139                 hProcess,(lpProcessAffinityMask?*lpProcessAffinityMask:0),
140                 (lpSystemAffinityMask?*lpSystemAffinityMask:0));
141         /* It is definitely important for a process to know on what processor
142            it is running :-) */
143         if(lpProcessAffinityMask)
144                 *lpProcessAffinityMask=1;
145         if(lpSystemAffinityMask)
146                 *lpSystemAffinityMask=1;
147         return TRUE;
148 }
149
150 /**********************************************************************
151  *           SetThreadAffinityMask
152  */
153 BOOL SetThreadAffinityMask(HANDLE32 hThread, DWORD dwThreadAffinityMask)
154 {
155         dprintf_task(stddeb,"SetThreadAffinityMask(%x,%x)\n",hThread,
156                 dwThreadAffinityMask);
157         /* FIXME: We let it fail */
158         return 1;
159 }