/// <summary> /// Create a .NET wait handle from an object. /// </summary> /// <param name="obj">The object to create the wait handle on</param> internal NtWaitHandle(NtObject obj) { using (SafeKernelObjectHandle handle = NtObject.DuplicateHandle(obj.Handle)) { SafeWaitHandle = new SafeWaitHandle(handle.DangerousGetHandle(), true); handle.SetHandleAsInvalid(); } }
private static SafeRegistryHandle DuplicateAsRegistry(SafeHandle handle) { using (SafeKernelObjectHandle dup_handle = DuplicateHandle(NtProcess.Current, handle, NtProcess.Current)) { SafeRegistryHandle ret = new SafeRegistryHandle(dup_handle.DangerousGetHandle(), true); dup_handle.SetHandleAsInvalid(); return(ret); } }