xref: /reactos/win32ss/user/user32/misc/object.c (revision 3d93998d)
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
GetUserObjectInformationA(HANDLE hObj,int nIndex,PVOID pvInfo,DWORD nLength,LPDWORD lpnLengthNeeded)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