1 /* 2 * ReactOS kernel 3 * Copyright (C) 1998, 1999, 2000, 2001 ReactOS Team 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (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 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 18 */ 19 /* 20 * PROJECT: ReactOS user32.dll 21 * FILE: win32ss/user/user32/misc/object.c 22 * PURPOSE: DDE 23 * PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net) 24 * UPDATE HISTORY: 25 * 09-05-2001 CSH Created 26 */ 27 28 #include <user32.h> 29 30 WINE_DEFAULT_DEBUG_CHANNEL(user32); 31 32 /* 33 * @implemented 34 */ 35 BOOL 36 WINAPI 37 GetUserObjectInformationA( 38 HANDLE hObj, 39 int nIndex, 40 PVOID pvInfo, 41 DWORD nLength, 42 LPDWORD lpnLengthNeeded) 43 { 44 LPWSTR buffer; 45 BOOL ret = FALSE; 46 DWORD LengthNeeded; 47 48 TRACE("GetUserObjectInformationA(%x %d %x %d %x)\n", hObj, nIndex, 49 pvInfo, nLength, lpnLengthNeeded); 50 51 if (nIndex != UOI_NAME && nIndex != UOI_TYPE) 52 return GetUserObjectInformationW(hObj, nIndex, pvInfo, nLength, lpnLengthNeeded); 53 54 /* allocate unicode buffer */ 55 buffer = HeapAlloc(GetProcessHeap(), 0, nLength*2); 56 if (buffer == NULL) 57 { 58 SetLastError(ERROR_NOT_ENOUGH_MEMORY); 59 return FALSE; 60 } 61 62 /* get unicode string */ 63 if (GetUserObjectInformationW(hObj, nIndex, buffer, nLength*2, lpnLengthNeeded)) 64 { 65 /* convert string */ 66 LengthNeeded = WideCharToMultiByte(CP_THREAD_ACP, 0, buffer, -1, 67 pvInfo, nLength, NULL, NULL); 68 69 if (LengthNeeded != 0) 70 { 71 if (lpnLengthNeeded) 72 *lpnLengthNeeded = LengthNeeded; 73 ret = TRUE; 74 } 75 } 76 77 /* free resources */ 78 HeapFree(GetProcessHeap(), 0, buffer); 79 return ret; 80 } 81