3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS system libraries
5 * FILE: lib/kernel32/misc/handle.c
6 * PURPOSE: Object functions
7 * PROGRAMMER: Ariadne ( ariadne@xs4all.nl)
12 /* INCLUDES ******************************************************************/
14 #include <ddk/ntddk.h>
18 #include <kernel32/kernel32.h>
19 #include <kernel32/error.h>
21 /* FUNCTIONS *****************************************************************/
23 WINBOOL WINAPI GetHandleInformation(HANDLE hObject, LPDWORD lpdwFlags)
25 OBJECT_DATA_INFORMATION HandleInfo;
29 errCode = NtQueryObject(hObject,
30 ObjectDataInformation,
32 sizeof(OBJECT_DATA_INFORMATION),
34 if (!NT_SUCCESS(errCode))
36 SetLastErrorByStatus (errCode);
39 if ( HandleInfo.bInheritHandle )
40 *lpdwFlags &= HANDLE_FLAG_INHERIT;
41 if ( HandleInfo.bProtectFromClose )
42 *lpdwFlags &= HANDLE_FLAG_PROTECT_FROM_CLOSE;
47 WINBOOL STDCALL SetHandleInformation(HANDLE hObject,
51 OBJECT_DATA_INFORMATION HandleInfo;
55 errCode = NtQueryObject(hObject,
56 ObjectDataInformation,
58 sizeof(OBJECT_DATA_INFORMATION),
60 if (!NT_SUCCESS(errCode))
62 SetLastErrorByStatus (errCode);
65 if (dwMask & HANDLE_FLAG_INHERIT)
67 HandleInfo.bInheritHandle = TRUE;
69 if (dwMask & HANDLE_FLAG_PROTECT_FROM_CLOSE)
71 HandleInfo.bProtectFromClose = TRUE;
74 errCode = NtSetInformationObject(hObject,
75 ObjectDataInformation,
77 sizeof(OBJECT_DATA_INFORMATION));
78 if (!NT_SUCCESS(errCode))
80 SetLastErrorByStatus (errCode);
88 WINBOOL STDCALL CloseHandle(HANDLE hObject)
90 * FUNCTION: Closes an open object handle
92 * hObject = Identifies an open object handle
93 * RETURNS: If the function succeeds, the return value is nonzero
94 * If the function fails, the return value is zero
99 if (IsConsoleHandle(hObject))
101 return(CloseConsoleHandle(hObject));
104 errCode = NtClose(hObject);
105 if (!NT_SUCCESS(errCode))
107 SetLastErrorByStatus (errCode);
115 WINBOOL STDCALL DuplicateHandle(HANDLE hSourceProcessHandle,
116 HANDLE hSourceHandle,
117 HANDLE hTargetProcessHandle,
118 LPHANDLE lpTargetHandle,
119 DWORD dwDesiredAccess,
124 if (IsConsoleHandle(hSourceHandle))
126 /* FIXME: call CSRSS for console handle duplication */
127 if (hSourceProcessHandle == hTargetProcessHandle)
129 *lpTargetHandle = hSourceHandle;
138 errCode = NtDuplicateObject(hSourceProcessHandle,
140 hTargetProcessHandle,
143 (BOOLEAN)bInheritHandle,
145 if (!NT_SUCCESS(errCode))
147 SetLastErrorByStatus (errCode);
154 UINT STDCALL SetHandleCount(UINT nCount)