1 /* $Id: handle.c,v 1.9 2003/01/15 21:24:35 chorns Exp $
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
= TRUE
;
67 if (dwMask
& HANDLE_FLAG_PROTECT_FROM_CLOSE
)
69 HandleInfo
.bProtectFromClose
= TRUE
;
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
)