2 * Win32 kernel functions
4 * Copyright 1995 Martin von Loewis
18 static HANDLE32 ProcessHeap
= 0; /* FIXME: should be in process database */
20 /***********************************************************************
21 * ExitProcess (KERNEL32.100)
24 void ExitProcess(DWORD status
)
26 TASK_KillCurrentTask( status
);
29 /***********************************************************************
30 * CreateMutexA (KERNEL32.52)
32 HANDLE32
CreateMutexA (SECURITY_ATTRIBUTES
*sa
, BOOL on
, const char *a
)
37 /***********************************************************************
38 * ReleaseMutex (KERNEL32.435)
40 BOOL
ReleaseMutex (HANDLE32 h
)
45 /***********************************************************************
46 * CreateEventA (KERNEL32.43)
48 HANDLE32
CreateEventA (SECURITY_ATTRIBUTES
*sa
, BOOL au
, BOOL on
, const char
53 /***********************************************************************
54 * SetEvent (KERNEL32.487)
56 BOOL
SetEvent (HANDLE32 h
)
60 /***********************************************************************
61 * ResetEvent (KERNEL32.439)
63 BOOL
ResetEvent (HANDLE32 h
)
67 /***********************************************************************
68 * WaitForSingleObject (KERNEL32.561)
70 DWORD
WaitForSingleObject(HANDLE32 h
, DWORD a
)
74 /***********************************************************************
75 * DuplicateHandle (KERNEL32.78)
77 BOOL
DuplicateHandle(HANDLE32 a
, HANDLE32 b
, HANDLE32 c
, HANDLE32
* d
, DWORD e
, BOOL f
, DWORD g
)
82 /***********************************************************************
83 * GetCurrentProcess (KERNEL32.198)
85 HANDLE32
GetCurrentProcess(void)
90 /***********************************************************************
91 * GetProcessHeap (KERNEL32.259)
93 HANDLE32
GetProcessHeap(void)
95 if (!ProcessHeap
) ProcessHeap
= HeapCreate( 0, 0x10000, 0 );
99 /***********************************************************************
100 * LoadLibraryA (KERNEL32.365)
101 * copied from LoadLibrary
102 * This does not currently support built-in libraries
104 HINSTANCE32
LoadLibrary32A(LPCSTR libname
)
107 dprintf_module( stddeb
, "LoadLibrary: (%08x) %s\n", (int)libname
, libname
);
108 handle
= LoadModule( libname
, (LPVOID
)-1 );
109 if (handle
== (HINSTANCE32
) -1)
112 strcpy( buffer
, libname
);
113 strcat( buffer
, ".dll" );
114 handle
= LoadModule( buffer
, (LPVOID
)-1 );
116 /* Obtain module handle and call initialization function */
118 if (handle
>= (HINSTANCE32
)32) PE_InitializeDLLs( GetExePtr(handle
));
123 /***********************************************************************
124 * LoadLibrary32W (KERNEL32.368)
126 HINSTANCE32
LoadLibrary32W(LPCWSTR libnameW
)
128 LPSTR libnameA
= HEAP_strdupWtoA( GetProcessHeap(), 0, libnameW
);
129 HINSTANCE32 ret
= LoadLibrary32A( libnameA
);
130 HeapFree( GetProcessHeap(), 0, libnameA
);
134 /***********************************************************************
137 BOOL
FreeLibrary32(HINSTANCE32 hLibModule
)
139 fprintf(stderr
,"FreeLibrary: empty stub\n");
143 /**********************************************************************
144 * GetProcessAffinityMask
146 BOOL
GetProcessAffinityMask(HANDLE32 hProcess
, LPDWORD lpProcessAffinityMask
,
147 LPDWORD lpSystemAffinityMask
)
149 dprintf_task(stddeb
,"GetProcessAffinityMask(%x,%lx,%lx)\n",
150 hProcess
,(lpProcessAffinityMask
?*lpProcessAffinityMask
:0),
151 (lpSystemAffinityMask
?*lpSystemAffinityMask
:0));
152 /* It is definitely important for a process to know on what processor
154 if(lpProcessAffinityMask
)
155 *lpProcessAffinityMask
=1;
156 if(lpSystemAffinityMask
)
157 *lpSystemAffinityMask
=1;
161 /**********************************************************************
162 * SetThreadAffinityMask
164 BOOL
SetThreadAffinityMask(HANDLE32 hThread
, DWORD dwThreadAffinityMask
)
166 dprintf_task(stddeb
,"SetThreadAffinityMask(%x,%lx)\n",hThread
,
167 dwThreadAffinityMask
);
168 /* FIXME: We let it fail */