ExpWnfGetCurrentScopeInstance

NTSTATUS __stdcall ExpWnfGetCurrentScopeInstance(
        _EPROCESS *Process,
        _ETHREAD *Thread,
        _WNF_DATA_SCOPE DataScope,
        PVOID *ScopeInstance,
        UINT64 *ScopeInstanceSize,
        UINT64 *ImplicitScope){
  NTSTATUS v6; 
  _EPROCESS *v7; 
  __int32 v8; 
  __int32 v9; 
  bool v11; 

  v6 = 0;
  v7 = Process;
  if( DataScope == WnfDataScopeSystem )
    goto LABEL_13;
  v8 = DataScope - 1;
  if( v8 )
  {
    v9 = v8 - 1;
    if( !v9 )
      return ExpWnfQueryCurrentUserSID(Process, Thread, ScopeInstance, ScopeInstanceSize, ImplicitScope);
    if( v9 == 1 )
    {
      v11 = KeGetCurrentThread()->ApcStateIndex == 1;
      *(_DWORD *)ImplicitScope = !v11;
      if( v11 )
        v7 = KeGetCurrentThread()->ApcState.Process;
      *ScopeInstance = v7;
      *(_DWORD *)ScopeInstanceSize = 8;
      return v6;
    }
LABEL_13:
    *(_DWORD *)ScopeInstanceSize = 0;
    *(_DWORD *)ImplicitScope = 1;
    return v6;
  }
  v11 = KeGetCurrentThread()->ApcStateIndex == 1;
  *(_DWORD *)ImplicitScope = !v11;
  if( v11 )
    v7 = KeGetCurrentThread()->ApcState.Process;
  *(_DWORD *)ScopeInstance = PsGetProcessSessionId((INT64)v7);
  *(_DWORD *)ScopeInstanceSize = 4;
  return v6;
}

Referenced by:

ExpWnfResolveScopeInstance