public static extern NtStatus NtOpenTransactionManager(
     out SafeKernelObjectHandle TmHandle,
     TransactionManagerAccessRights DesiredAccess,
     ObjectAttributes ObjectAttributes,
     UnicodeString LogFileName,
     OptionalGuid TmIdentity,
     TransactionManagerOpenOptions OpenOptions
     );
 /// <summary>
 /// Open an existing transaction manager object.
 /// </summary>
 /// <param name="path">The path to the transaction manager.</param>
 /// <param name="root">The root if path is relative.</param>
 /// <param name="desired_access">Desired access for the handle</param>
 /// <param name="tm_identity">Identity of the transaction manager.</param>
 /// <param name="log_filename">The CLFS log file to create if not volatile.</param>
 /// <param name="open_options">Open options flags.</param>
 /// <returns>The object result.</returns>
 public static NtTransactionManager Open(string path, NtObject root,
                                         TransactionManagerAccessRights desired_access,
                                         string log_filename,
                                         Guid?tm_identity,
                                         TransactionManagerOpenOptions open_options)
 {
     return(Open(path, root, desired_access, log_filename, tm_identity, open_options, true).Result);
 }
 /// <summary>
 /// Open a existing transaction manager object.
 /// </summary>
 /// <param name="object_attributes">The object attributes</param>
 /// <param name="desired_access">Desired access for the handle</param>
 /// <param name="tm_identity">Identity of the transaction manager.</param>
 /// <param name="log_filename">The CLFS log file to create if not volatile.</param>
 /// <param name="open_options">Open options flags.</param>
 /// <returns>The object result.</returns>
 public static NtTransactionManager Open(ObjectAttributes object_attributes,
                                         TransactionManagerAccessRights desired_access,
                                         string log_filename,
                                         Guid?tm_identity,
                                         TransactionManagerOpenOptions open_options)
 {
     return(Open(object_attributes, desired_access, log_filename, tm_identity, open_options, true).Result);
 }
 /// <summary>
 /// Open a existing transaction manager object.
 /// </summary>
 /// <param name="object_attributes">The object attributes</param>
 /// <param name="desired_access">Desired access for the handle</param>
 /// <param name="log_filename">The CLFS log file to create if not volatile.</param>
 /// <param name="tm_identity">Identity of the transaction manager.</param>
 /// <param name="open_options">Open options flags.</param>
 /// <param name="throw_on_error">True to throw an exception on error.</param>
 /// <returns>The NT status code and object result.</returns>
 public static NtResult <NtTransactionManager> Open(ObjectAttributes object_attributes,
                                                    TransactionManagerAccessRights desired_access,
                                                    string log_filename,
                                                    Guid?tm_identity,
                                                    TransactionManagerOpenOptions open_options,
                                                    bool throw_on_error)
 {
     return(NtSystemCalls.NtOpenTransactionManager(out SafeKernelObjectHandle handle, desired_access, object_attributes,
                                                   log_filename.ToUnicodeString(), tm_identity.ToOptional(),
                                                   open_options).CreateResult(throw_on_error, () => new NtTransactionManager(handle)));
 }
 /// <summary>
 /// Open an existing transaction manager object.
 /// </summary>
 /// <param name="path">The path to the transaction manager.</param>
 /// <param name="root">The root if path is relative.</param>
 /// <param name="desired_access">Desired access for the handle</param>
 /// <param name="tm_identity">Identity of the transaction manager.</param>
 /// <param name="log_filename">The CLFS log file to create if not volatile.</param>
 /// <param name="open_options">Open options flags.</param>
 /// <param name="throw_on_error">True to throw an exception on error.</param>
 /// <returns>The object result.</returns>
 public static NtResult <NtTransactionManager> Open(string path, NtObject root,
                                                    TransactionManagerAccessRights desired_access,
                                                    string log_filename,
                                                    Guid?tm_identity,
                                                    TransactionManagerOpenOptions open_options,
                                                    bool throw_on_error)
 {
     using (var obj_attr = new ObjectAttributes(path, AttributeFlags.CaseInsensitive, root)) {
         return(Open(obj_attr, desired_access, log_filename, tm_identity, open_options, throw_on_error));
     }
 }
 /// <summary>
 /// Get a list of all accessible transaction manager objects.
 /// </summary>
 /// <param name="object_attributes">Object attributes for opened handle.</param>
 /// <param name="desired_access">The access for the transaction manager objects.</param>
 /// <param name="options">Open options.</param>
 /// <returns>The list of all accessible transaction manager objects.</returns>
 public static IEnumerable <NtTransactionManager> GetAccessibleTransactionManager(ObjectAttributes object_attributes,
                                                                                  TransactionManagerAccessRights desired_access, TransactionManagerOpenOptions options)
 {
     return(NtTransactionManagerUtils.GetAccessibleTransactionObjects(
                SafeKernelObjectHandle.Null, KtmObjectType.TransactionManager,
                id => Open(object_attributes, desired_access, null, id, options, false)));
 }