IopIssueSystemEnvironmentRequest

NTSTATUS __stdcall IopIssueSystemEnvironmentRequest(
        ULONG IoControlCode,
        PVOID InputBuffer,
        ULONG InputBufferLength,
        PVOID Context,
        ULONG InputBuffera,
        INT64 InputBufferLengtha){
  _IO_STACK_LOCATION *v6; 
  char InternalDeviceIoControl; 
  PIRP *v10; 
  NTSTATUS v12; 
  int Status; 
  _IO_STATUS_BLOCK IoStatusBlock; 
  __int64 Parameter[2]; 
  __int64 v16; 
  __int128 Object; 
  __int64 v18; 
  PVOID Contexta; 
  UINT32 OutputBufferLength; 
  _DWORD *v21; 

  v16 = 0i64;
  v6 = *(_IO_STACK_LOCATION **)&InputBufferLength;
  InternalDeviceIoControl = (char)InputBuffer;
  v18 = 0i64;
  Object = 0i64;
  IoStatusBlock = 0i64;
  KeInitializeEvent((INT64)&Object, 0, 0);
  v10 = IoBuildDeviceIoControlRequest(
          IoControlCode,
          (PDEVICE_OBJECT)Context,
          *(PVOID *)&InputBuffera,
          InputBufferLengtha,
          Contexta,
          OutputBufferLength,
          InternalDeviceIoControl,
          (PKEVENT)&Object,
          &IoStatusBlock);
  if( !v10 )
    return -1073741670;
  if( v6 )
    v10[23][-1].Tail.CurrentStackLocation = v6;
  Parameter[1] = (__int64)v10;
  Parameter[0] = (__int64)Context;
  v12 = KeExpandKernelStackAndCalloutEx(
          (UINT64)IopIssueSystemEnvironmentCallout,
          (INT64)Parameter,
          0x11800ui64,
          1,
          0i64);
  Status = v12;
  if( v12 < 0 )
  {
    if( v12 == -1073741789 )
    {
      Status = -1073741801;
      if( v21 )
        *v21 = 0;
    }
  }
  else
  {
    Status = v16;
    if( (_DWORD)v16 == 259 )
    {
      KeWaitForSingleObject((UINT64)&Object, 0, 0, 0, 0i64);
      Status = IoStatusBlock.Status;
    }
    if( v21 )
      *v21 = IoStatusBlock.Information;
  }
  return Status;
}

Referenced by:

IopEnumerateEnvironmentVariablesSysEnv
IopGetEnvironmentVariableSysEnv
IopIssueTrEERequest
IopQueryEnvironmentVariableInfoSysEnv
IopSetEnvironmentVariableSysEnv