xref: /reactos/dll/win32/avrt/main.c (revision 67d5a538)
1 /* Avrt dll implementation
2  *
3  * Copyright (C) 2009 Maarten Lankhorst
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18  */
19 
20 #include <stdarg.h>
21 #include <stdlib.h>
22 
23 #include "windef.h"
24 #include "winbase.h"
25 #include "winnls.h"
26 #include "wine/debug.h"
27 #include "avrt.h"
28 
29 WINE_DEFAULT_DEBUG_CHANNEL(avrt);
30 
31 static inline WCHAR *strdupAW(const char *src)
32 {
33     int len;
34     WCHAR *dst;
35     if (!src) return NULL;
36     len = MultiByteToWideChar(CP_ACP, 0, src, -1, NULL, 0);
37     if ((dst = malloc(len * sizeof(*dst)))) MultiByteToWideChar(CP_ACP, 0, src, -1, dst, len);
38     return dst;
39 }
40 
41 HANDLE WINAPI AvSetMmThreadCharacteristicsA(const char *name, DWORD *index)
42 {
43     WCHAR *nameW = NULL;
44     HANDLE ret;
45 
46     if (name && !(nameW = strdupAW(name)))
47     {
48         SetLastError(ERROR_OUTOFMEMORY);
49         return NULL;
50     }
51 
52     ret = AvSetMmThreadCharacteristicsW(nameW, index);
53 
54     free(nameW);
55     return ret;
56 }
57 
58 HANDLE WINAPI AvSetMmThreadCharacteristicsW(const WCHAR *name, DWORD *index)
59 {
60     FIXME("(%s,%p): stub\n", debugstr_w(name), index);
61 
62     if (!name)
63     {
64         SetLastError(ERROR_INVALID_TASK_NAME);
65         return NULL;
66     }
67 
68     if (!index)
69     {
70         SetLastError(ERROR_INVALID_HANDLE);
71         return NULL;
72     }
73 
74     return (HANDLE)0x12345678;
75 }
76 
77 BOOL WINAPI AvQuerySystemResponsiveness(HANDLE AvrtHandle, ULONG *value)
78 {
79     FIXME("(%p, %p): stub\n", AvrtHandle, value);
80     return FALSE;
81 }
82 
83 BOOL WINAPI AvRevertMmThreadCharacteristics(HANDLE AvrtHandle)
84 {
85     FIXME("(%p): stub\n", AvrtHandle);
86     return TRUE;
87 }
88 
89 BOOL WINAPI AvSetMmThreadPriority(HANDLE AvrtHandle, AVRT_PRIORITY prio)
90 {
91     FIXME("(%p)->(%u) stub\n", AvrtHandle, prio);
92     return TRUE;
93 }
94 
95 HANDLE WINAPI AvSetMmMaxThreadCharacteristicsA(const char *task1, const char *task2, DWORD *index)
96 {
97     WCHAR *task1W = NULL, *task2W = NULL;
98     HANDLE ret;
99 
100     if (task1 && !(task1W = strdupAW(task1)))
101     {
102         SetLastError(ERROR_OUTOFMEMORY);
103         return NULL;
104     }
105 
106     if (task2 && !(task2W = strdupAW(task2)))
107     {
108         SetLastError(ERROR_OUTOFMEMORY);
109         return NULL;
110     }
111 
112     ret = AvSetMmMaxThreadCharacteristicsW(task1W, task2W, index);
113 
114     free(task2W);
115     free(task1W);
116     return ret;
117 }
118 
119 HANDLE WINAPI AvSetMmMaxThreadCharacteristicsW(const WCHAR *task1, const WCHAR *task2, DWORD *index)
120 {
121     FIXME("(%s,%s,%p): stub\n", debugstr_w(task1), debugstr_w(task2), index);
122 
123     if (!task1 || task2)
124     {
125         SetLastError(ERROR_INVALID_TASK_NAME);
126         return NULL;
127     }
128 
129     if (!index)
130     {
131         SetLastError(ERROR_INVALID_HANDLE);
132         return NULL;
133     }
134 
135     return (HANDLE)0x12345678;
136 }
137