1 /* $Id: handle.c,v 1.8 2002/09/08 10:22:44 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 ******************************************************************/
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
)