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 ******************************************************************/
17 #include <kernel32/kernel32.h>
19 /* FUNCTIONS *****************************************************************/
21 WINBOOL WINAPI GetHandleInformation(HANDLE hObject, LPDWORD lpdwFlags)
23 OBJECT_DATA_INFORMATION HandleInfo;
27 errCode = NtQueryObject(hObject,
28 ObjectDataInformation,
30 sizeof(OBJECT_DATA_INFORMATION),
32 if (!NT_SUCCESS(errCode))
34 SetLastErrorByStatus (errCode);
37 if ( HandleInfo.bInheritHandle )
38 *lpdwFlags &= HANDLE_FLAG_INHERIT;
39 if ( HandleInfo.bProtectFromClose )
40 *lpdwFlags &= HANDLE_FLAG_PROTECT_FROM_CLOSE;
45 WINBOOL STDCALL SetHandleInformation(HANDLE hObject,
49 OBJECT_DATA_INFORMATION HandleInfo;
53 errCode = NtQueryObject(hObject,
54 ObjectDataInformation,
56 sizeof(OBJECT_DATA_INFORMATION),
58 if (!NT_SUCCESS(errCode))
60 SetLastErrorByStatus (errCode);
63 if (dwMask & HANDLE_FLAG_INHERIT)
65 HandleInfo.bInheritHandle = dwFlags & HANDLE_FLAG_INHERIT;
67 if (dwMask & HANDLE_FLAG_PROTECT_FROM_CLOSE)
69 HandleInfo.bProtectFromClose = dwFlags & HANDLE_FLAG_PROTECT_FROM_CLOSE;
72 errCode = NtSetInformationObject(hObject,
73 ObjectDataInformation,
75 sizeof(OBJECT_DATA_INFORMATION));
76 if (!NT_SUCCESS(errCode))
78 SetLastErrorByStatus (errCode);
86 WINBOOL STDCALL CloseHandle(HANDLE hObject)
88 * FUNCTION: Closes an open object handle
90 * hObject = Identifies an open object handle
91 * RETURNS: If the function succeeds, the return value is nonzero
92 * If the function fails, the return value is zero
97 if (IsConsoleHandle(hObject))
99 return(CloseConsoleHandle(hObject));
102 errCode = NtClose(hObject);
103 if (!NT_SUCCESS(errCode))
105 SetLastErrorByStatus (errCode);
113 WINBOOL STDCALL DuplicateHandle(HANDLE hSourceProcessHandle,
114 HANDLE hSourceHandle,
115 HANDLE hTargetProcessHandle,
116 LPHANDLE lpTargetHandle,
117 DWORD dwDesiredAccess,
122 if (IsConsoleHandle(hSourceHandle))
124 /* FIXME: call CSRSS for console handle duplication */
125 if (hSourceProcessHandle == hTargetProcessHandle)
127 *lpTargetHandle = hSourceHandle;
136 errCode = NtDuplicateObject(hSourceProcessHandle,
138 hTargetProcessHandle,
141 (BOOLEAN)bInheritHandle,
143 if (!NT_SUCCESS(errCode))
145 SetLastErrorByStatus (errCode);
152 UINT STDCALL SetHandleCount(UINT nCount)