WmipGetGuidSecurityDescriptor

NTSTATUS __stdcall WmipGetGuidSecurityDescriptor(_UNICODE_STRING *GuidName, VOID **SecurityDescriptor){
  unsigned int v4; 
  _KEXCEPTION_FRAME *a5; 
  int v6; 
  NTSTATUS PersistedStateLocation; 
  PVOID v8; 
  INT64 a6; 
  INT64 a7; 
  PVOID P; 
  VOID *SecurityDescriptora[24]; 

  SecurityDescriptora[0] = 0i64;
  P = 0i64;
  v4 = 0;
  LODWORD(a7) = 0;
  a5 = 0i64;
  memset(&SecurityDescriptora[2], 0i64, 0xA8u);
  LODWORD(SecurityDescriptora[10]) = 0;
  SecurityDescriptora[2] = WmipSDRegistryQueryRoutine;
  LODWORD(SecurityDescriptora[6]) = 3;
  SecurityDescriptora[5] = SecurityDescriptora;
  SecurityDescriptora[4] = GuidName->Buffer;
  SecurityDescriptora[12] = &P;
  SecurityDescriptora[9] = WmipSDRegistryQueryRoutine;
  LODWORD(SecurityDescriptora[13]) = 3;
  SecurityDescriptora[11] = &ExceptionFrame._Xmm7;
  LOBYTE(v6) = RtlpQueryRegistryValues((_KTRAP_FRAME *)2, (_KEXCEPTION_FRAME *)&ExceptionFrame);
  *SecurityDescriptor = 0i64;
  if( v6 < 0 )
    goto LABEL_14;
  while( 1 )
  {
    if( v4 )
    {
      a5 = (_KEXCEPTION_FRAME *)ExAllocatePoolWithTag(1ui64, v4, 1885957463i64);
      if( !a5 )
        return -1073741670;
    }
    LODWORD(a6) = v4;
    PersistedStateLocation = RtlGetPersistedStateLocation(
                               (WCHAR *)&ExceptionFrame.P5,
                               0i64,
                               0i64,
                               0i64,
                               a5,
                               a6,
                               (INT64)&a7);
    if( PersistedStateLocation != -2147483643 )
      break;
    if( a5 )
    {
      ExFreePoolWithTag(a5, 0);
      a5 = 0i64;
    }
    v4 = a7;
  }
  if( !PersistedStateLocation )
  {
    if( SecurityDescriptora[0] )
    {
      SecurityDescriptora[7] = SecurityDescriptora;
      LODWORD(SecurityDescriptora[8]) = RtlLengthSecurityDescriptor((INT64)SecurityDescriptora[0]);
    }
    if( P )
    {
      SecurityDescriptora[14] = &P;
      LODWORD(SecurityDescriptora[15]) = RtlLengthSecurityDescriptor((INT64)P);
    }
    RtlpQueryRegistryValues(0i64, a5);
  }
  if( SecurityDescriptora[0] )
  {
    v8 = P;
    *SecurityDescriptor = SecurityDescriptora[0];
    if( v8 )
      ExFreePoolWithTag(v8, 0);
  }
  else if( P )
  {
    *SecurityDescriptor = P;
  }
  if( !*SecurityDescriptor )
LABEL_14:
    *SecurityDescriptor = (VOID *)WmipDefaultAccessSd;
  if( a5 )
    ExFreePoolWithTag(a5, 0);
  return 0;
}

Referenced by:

WmipCreateGuidObject