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