SysCtxRegOpenCurrentUserKey

NTSTATUS __fastcall SysCtxRegOpenCurrentUserKey(
        HSYSCTX *hSysCtx,
        ULONG RegOptions,
        _ACCESS_MASK DesiredAccess,
        VOID **phkResult,
        INT64 a6,
        INT64 a7,
        INT64 a8,
        INT64 _168){
  VOID **v12; 
  NTSTATUS InformationToken; 
  void *v14; 
  _DWORD *v15; 
  unsigned __int16 v17; 
  VOID **PoolWithTag; 
  __int64 v19; 
  UINT16 pusResult[2]; 
  _SID_IDENTIFIER_AUTHORITY IdentifierAuthority; 
  int TokenInformation; 
  UINT64 ReturnLength; 
  VOID *Handle; 
  UINT64 v25; 
  _UNICODE_STRING Destination; 
  VOID *v27; 
  _UNICODE_STRING UnicodeString; 
  char Sid[16]; 
  void *Sid2[11]; 

  *(_WORD *)&IdentifierAuthority.Value[4] = 1280;
  Handle = 0i64;
  TokenInformation = 0;
  LODWORD(v25) = 0;
  LODWORD(ReturnLength) = 0;
  *(_DWORD *)IdentifierAuthority.Value = 0;
  v27 = 0i64;
  *(_DWORD *)(&Destination.MaximumLength + 1) = 0;
  pusResult[0] = 0;
  v12 = 0i64;
  UnicodeString = 0i64;
  InformationToken = ZwOpenThreadTokenEx(0xFFFFFFFFFFFFFFFEui64, 8ui64, 0, 512i64, (UINT64)&Handle);
  if( InformationToken == -1073741700 )
    InformationToken = ZwOpenProcessTokenEx(0xFFFFFFFFFFFFFFFFui64, 8i64, 512i64, (UINT64)&Handle);
  if( InformationToken >= 0 )
  {
    InformationToken = ZwQueryInformationToken(
                         (UINT64)Handle,
                         8i64,
                         (UINT64)&TokenInformation,
                         4ui64,
                         (UINT64)&ReturnLength);
    if( InformationToken >= 0 )
    {
      if( TokenInformation == 2 )
      {
        InformationToken = ZwQueryInformationToken((UINT64)Handle, 9i64, (UINT64)&v25, 4ui64, (UINT64)&ReturnLength);
        if( InformationToken < 0 )
          goto LABEL_11;
        if( (int)v25 < 2 )
        {
          InformationToken = -1073741790;
          goto LABEL_11;
        }
      }
      else if( TokenInformation != 1 )
      {
LABEL_10:
        InformationToken = -1073741637;
        goto LABEL_11;
      }
      InformationToken = ZwQueryInformationToken((UINT64)Handle, 1i64, (UINT64)Sid2, 0x54ui64, (UINT64)&ReturnLength);
      if( InformationToken >= 0 )
      {
        v14 = Sid2[0];
        InformationToken = RtlInitializeSid(Sid, &IdentifierAuthority, 1u);
        if( InformationToken >= 0 )
        {
          LODWORD(v15) = RtlSubAuthoritySid((INT64)Sid, 0i64);
          *v15 = 18;
          if( RtlEqualSid(Sid, v14) )
            goto LABEL_10;
          InformationToken = RtlConvertSidToUnicodeString(&UnicodeString, v14, 1u);
          if( InformationToken >= 0 )
          {
            InformationToken = RtlUShortAdd(UnicodeString.Length, 0x1Eu, pusResult);
            if( InformationToken >= 0 )
            {
              InformationToken = RtlUShortAdd(pusResult[0], 2u, pusResult);
              if( InformationToken >= 0 )
              {
                v17 = pusResult[0];
                PoolWithTag = ExAllocatePoolWithTag(1ui64, pusResult[0], 1397771856i64);
                v12 = PoolWithTag;
                if( PoolWithTag )
                {
                  Destination.Length = 0;
                  Destination.MaximumLength = v17;
                  Destination.Buffer = (wchar_t *)PoolWithTag;
                  InformationToken = RtlAppendUnicodeStringToString(&Destination, (_UNICODE_STRING *)&stru_1400099A0);
                  if( InformationToken >= 0 )
                  {
                    InformationToken = RtlAppendUnicodeStringToString(&Destination, &UnicodeString);
                    if( InformationToken >= 0 )
                    {
                      InformationToken = SysCtxGetCachedContextBaseKey(hSysCtx, 3, &v27);
                      if( InformationToken >= 0 )
                        InformationToken = SysCtxRegOpenKey(
                                             v19,
                                             v27,
                                             (const WCHAR *)Destination.Buffer + 15,
                                             RegOptions,
                                             DesiredAccess,
                                             phkResult);
                    }
                  }
                }
                else
                {
                  InformationToken = -1073741801;
                }
              }
            }
          }
        }
      }
    }
  }
LABEL_11:
  if( Handle )
    ZwClose((_HANDLE)Handle);
  RtlFreeAnsiString(&UnicodeString);
  if( v12 )
    ExFreePoolWithTag(v12, 0);
  return InformationToken;
}

Referenced by:

CmDeleteCommonClassRegKeyWorker
CmDeleteDeviceContainerRegKeyWorker
CmDeleteDeviceInterfaceRegKeyWorker
CmDeleteDevicePanelRegKeyWorker
CmDeleteDeviceRegKeyWorker
CmOpenCommonClassRegKeyWorker
CmOpenDeviceContainerRegKeyWorker
CmOpenDeviceInterfaceRegKeyWorker
CmOpenDevicePanelRegKeyWorker
CmOpenDeviceRegKeyWorker