Correct the test for the ODS_SELECTED bit in the WM_DRAWITEM message
[wine] / dlls / ntdll / process.c
1 /*
2  * NT basis DLL
3  *
4  * This file contains the Nt* API functions of NTDLL.DLL.
5  * In the original ntdll.dll they all seem to just call int 0x2e (down to the NTOSKRNL)
6  *
7  * Copyright 1996-1998 Marcus Meissner
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
22  */
23
24 #include <stdarg.h>
25 #include <stdio.h>
26 #include <stdlib.h>
27 #include <string.h>
28 #include <time.h>
29 #include "wine/debug.h"
30
31 #include "windef.h"
32 #include "winbase.h"
33 #include "winreg.h"
34 #include "winternl.h"
35 #include "ntdll_misc.h"
36 #include "wine/server.h"
37
38 WINE_DEFAULT_DEBUG_CHANNEL(ntdll);
39
40 /*
41  *      Process object
42  */
43
44 /******************************************************************************
45  *  NtTerminateProcess                  [NTDLL.@]
46  *
47  *  Native applications must kill themselves when done
48  */
49 NTSTATUS WINAPI NtTerminateProcess( HANDLE handle, LONG exit_code )
50 {
51     NTSTATUS ret;
52     BOOL self;
53     SERVER_START_REQ( terminate_process )
54     {
55         req->handle    = handle;
56         req->exit_code = exit_code;
57         ret = wine_server_call( req );
58         self = !ret && reply->self;
59     }
60     SERVER_END_REQ;
61     if (self) exit( exit_code );
62     return ret;
63 }
64
65 /******************************************************************************
66 *  NtQueryInformationProcess            [NTDLL.@]
67 *  ZwQueryInformationProcess            [NTDLL.@]
68 *
69 */
70 NTSTATUS WINAPI NtQueryInformationProcess(
71         IN HANDLE ProcessHandle,
72         IN PROCESSINFOCLASS ProcessInformationClass,
73         OUT PVOID ProcessInformation,
74         IN ULONG ProcessInformationLength,
75         OUT PULONG ReturnLength)
76 {
77     NTSTATUS ret = STATUS_SUCCESS;
78     ULONG len = 0;
79
80     switch (ProcessInformationClass) 
81     {
82     case ProcessIoCounters:
83         if (ProcessInformationLength == sizeof(IO_COUNTERS))
84         {
85             memset(ProcessInformation, 0, ProcessInformationLength);
86             len = sizeof(IO_COUNTERS);
87         }
88         else ret = STATUS_INFO_LENGTH_MISMATCH;
89         break;
90     case ProcessDebugPort:
91         /* "These are not the debuggers you are looking for." *
92          * set it to 0 aka "no debugger" to satisfy copy protections */
93         if (ProcessInformationLength == 4)
94         {
95             memset(ProcessInformation, 0 ,ProcessInformationLength);
96             len = 4;
97         }
98         else ret = STATUS_INFO_LENGTH_MISMATCH;
99         break;
100     case ProcessWow64Information:
101         if (ProcessInformationLength == 4)
102         {
103             memset(ProcessInformation, 0, ProcessInformationLength);
104             len = 4;
105         }
106         else ret = STATUS_INFO_LENGTH_MISMATCH;
107         break;
108     default:
109         FIXME("(%p,0x%08x,%p,0x%08lx,%p),stub!\n",
110               ProcessHandle,ProcessInformationClass,
111               ProcessInformation,ProcessInformationLength,
112               ReturnLength);
113         ret = STATUS_NOT_IMPLEMENTED;
114         break;
115     }
116
117     if (ReturnLength) *ReturnLength = len;
118     
119     return ret;
120 }
121
122 /******************************************************************************
123  * NtSetInformationProcess [NTDLL.@]
124  * ZwSetInformationProcess [NTDLL.@]
125  */
126 NTSTATUS WINAPI NtSetInformationProcess(
127         IN HANDLE ProcessHandle,
128         IN PROCESSINFOCLASS ProcessInformationClass,
129         IN PVOID ProcessInformation,
130         IN ULONG ProcessInformationLength)
131 {
132     FIXME("(%p,0x%08x,%p,0x%08lx) stub\n",
133           ProcessHandle,ProcessInformationClass,ProcessInformation,ProcessInformationLength);
134     return 0;
135 }