#include <windows.h> #include <stdio.h> #include <ntdll.h> int iWinMain() { #ifdef _WIN64 LPWSTR captionMsg = L"64-bit Application"; #else LPWSTR captionMsg = L"32-bit Application"; #endif WCHAR mainMsg[MAX_PATH] = {0}; HANDLE FileHandle = NULL; UNICODE_STRING ObjectName; OBJECT_ATTRIBUTES ObjectAttributes; OBJECT_HANDLE_ATTRIBUTE_INFORMATION ObjectHandleAttributeInformation; RtlInitUnicodeString(&ObjectName, L"\\REGISTRY\\USER\\.DEFAULT"); InitializeObjectAttributes(&ObjectAttributes, &ObjectName, OBJ_CASE_INSENSITIVE, NULL, NULL); LPWSTR finishedMsg = L"Failed!"; if (NtOpenKey( &FileHandle, KEY_READ, &ObjectAttributes) == STATUS_SUCCESS) { ObjectHandleAttributeInformation.ProtectFromClose = TRUE; if (NtSetInformationObject( FileHandle, ObjectHandleInformation, &ObjectHandleAttributeInformation, sizeof(OBJECT_HANDLE_ATTRIBUTE_INFORMATION)) == STATUS_SUCCESS) { // // MessageId: STATUS_HANDLE_NOT_CLOSABLE 0xC0000235L // MessageText: NtClose was called on a handle that was protected from close via NtSetInformationObject. // LONG_PTR ntCloseStatus = NtClose(FileHandle); _snwprintf( mainMsg, MAX_PATH * 2, L"Job done!\n\nProtected Handle: 0x%p\n" L"TargetName: \"%ws\"\nNtClose Status: 0x%p\n\n" "Try to close the protected Handle!\n\n[by stigma from I3CT]\nInsid3Code Team", FileHandle, ObjectName.Buffer, ntCloseStatus); MessageBoxW(NULL, mainMsg, captionMsg, MB_ICONINFORMATION); finishedMsg = L"Finished!"; } } MessageBoxW(NULL, finishedMsg, captionMsg, MB_ICONINFORMATION); return 0; }Source:
http://www.mediafire.com/download/jiontnu194y16zq/ProtectHandleFromClose.rar