public static extern NtStatus NtCreateSemaphore(out SafeKernelObjectHandle MutantHandle, SemaphoreAccessRights DesiredAccess,
                                                 ObjectAttributes ObjectAttributes, int InitialCount, int MaximumCount);
 public static extern NtStatus NtOpenSemaphore(out SafeKernelObjectHandle MutantHandle, SemaphoreAccessRights DesiredAccess,
                                               ObjectAttributes ObjectAttributes);
 protected override sealed NtResult <NtSemaphore> OpenInternal(ObjectAttributes obj_attributes,
                                                               SemaphoreAccessRights desired_access, bool throw_on_error)
 {
     return(NtSemaphore.Open(obj_attributes, desired_access, throw_on_error));
 }