SetHandleInformation
Handle API
BOOL SetHandleInformation(
HANDLE hObject,
HANDLE_INFORMATION_CLASS HandleInformationClass,
ULONG_PTR dwInformation
);
The SetHandleInformation function enables or disables certain properties of an open handle to a kernel object.
Parameters
Parameter | Type | Description |
---|---|---|
hObject |
HANDLE |
A handle to the kernel object whose information is to be modified. |
HandleInformationClass |
HANDLE_INFORMATION_CLASS |
The type of information to set. This parameter can be one of the
following values:
|
dwInformation |
ULONG_PTR |
A value that specifies the new setting for the handle information.
|
Return Value
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError
.
Remarks
This function is used to manage handle inheritance and to prevent accidental closure of critical handles.
When HANDLE_FLAG_PROTECT_FROM_CLOSE
is set to TRUE
, the handle can only be implicitly closed when the process terminates. Explicit calls to CloseHandle
will fail.
Examples
Disabling Handle Inheritance
#include <windows.h>
int main() {
HANDLE hFile = CreateFile(L"example.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile != INVALID_HANDLE_VALUE) {
// Disable inheritance for the file handle
if (SetHandleInformation(hFile, HANDLE_FLAG_INHERIT, FALSE)) {
// Handle inheritance is now disabled
} else {
// Handle error
}
CloseHandle(hFile);
}
return 0;
}
Protecting a Handle from Closing
#include <windows.h>
int main() {
HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, L"MyCriticalEvent");
if (hEvent != NULL) {
// Protect the event handle from accidental closure
if (SetHandleInformation(hEvent, HANDLE_FLAG_PROTECT_FROM_CLOSE, TRUE)) {
// Handle is now protected from closing
// Note: You cannot call CloseHandle(hEvent) after this unless you first set protection to FALSE
} else {
// Handle error
}
// To close the handle later, you would first need to call:
// SetHandleInformation(hEvent, HANDLE_FLAG_PROTECT_FROM_CLOSE, FALSE);
// CloseHandle(hEvent);
}
return 0;
}
See Also
CloseHandle | Closes an open object handle. |
DuplicateHandle | Duplicates an existing handle. |
GetHandleInformation | Retrieves information about a handle. |
HANDLE_INFORMATION_CLASS | Enumeration for handle information classes. |