CmpRecoverEnlistment

NTSTATUS __fastcall CmpRecoverEnlistment(_QWORD *a1, __int64 a2, _UNICODE_STRING *a3, INT64 a4){
  NTSTATUS result; 
  int v7; 
  INT64 v8; 
  INT64 v9; 
  INT64 v10; 
  POBJECT_ATTRIBUTES ObjectAttributes; 
  INT64 v12; 
  INT64 v13; 
  _UNICODE_STRING GuidString; 
  _UNICODE_STRING UnicodeString; 
  _OBJECT_ATTRIBUTES v16; 
  void *EnlistmentHandle; 
  PVOID EnlistmentKey; 

  EnlistmentKey = 0i64;
  EnlistmentHandle = 0i64;
  GuidString = 0i64;
  UnicodeString = 0i64;
  memset(&v16, 0, sizeof(v16));
  result = RtlStringFromGUIDEx((_GUID *)a3, &GuidString, 1u);
  if( result >= 0 )
  {
    v7 = CmpTransSearchAddTransFromRm((_CM_RM *)a1, 0i64, (_GUID *)&a3[1], 1ui64, (_CM_TRANS **)&EnlistmentKey);
    if( v7 >= 0 )
    {
      v8 = a1[6];
      v16.RootDirectory = 0i64;
      v16.ObjectName = 0i64;
      v16.Length = 48;
      *(_OWORD *)&v16.SecurityDescriptor = 0i64;
      v16.Attributes = 576;
      v7 = ZwOpenEnlistment(
             (INT64)&EnlistmentHandle,
             983071i64,
             v8,
             (INT64)a3,
             (INT64)&v16,
             v12,
             *(INT64 *)&GuidString.Length,
             (INT64)GuidString.Buffer);
      if( v7 >= 0 )
      {
        v7 = ZwRecoverEnlistment(
               (INT64)EnlistmentHandle,
               (INT64)EnlistmentKey,
               v9,
               v10,
               (INT64)ObjectAttributes,
               v13,
               *(INT64 *)&GuidString.Length,
               (INT64)GuidString.Buffer);
        ZwClose((_HANDLE)EnlistmentHandle);
      }
    }
    RtlFreeAnsiString(&UnicodeString);
    RtlFreeAnsiString(&GuidString);
    return v7;
  }
  return result;
}

Referenced by:

CmKtmNotification