ExpSetFirmwareEnvironmentVariable

NTSTATUS __stdcall ExpSetFirmwareEnvironmentVariable(
        PWCHAR VariableName,
        _GUID *VendorGuid,
        PVOID Value,
        UINT64 ValueLength,
        UINT64 Attributes,
        INT8 ProbeMode){
  unsigned int v6; 
  NTSTATUS result; 
  _ETHREAD *CurrentThread; 
  NTSTATUS v11; 
  UINT64 v12; 
  VOID *Valuea; 
  VOID *LockVariable; 

  LockVariable = 0i64;
  v6 = ValueLength;
  Valuea = 0i64;
  if( !(_DWORD)ValueLength
    || (result = ExLockUserBuffer(Value, (unsigned int)ValueLength, ProbeMode, IoReadAccess, &Valuea, &LockVariable),
        result >= 0) )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --CurrentThread->Tcb.KernelApcDisable;
    ExAcquireFastMutexUnsafe((PFAST_MUTEX)((char *)&WheapDeferredInternalLogsEventLock + 2752));
    LODWORD(v12) = Attributes;
    v11 = IoSetEnvironmentVariableEx(VariableName, VendorGuid, Valuea, v6, v12);
    ExReleaseFastMutexUnsafe((PFAST_MUTEX)((char *)&WheapDeferredInternalLogsEventLock + 2752));
    KeLeaveCriticalRegionThread(KeGetCurrentThread());
    if( LockVariable )
      ExUnlockUserBuffer(LockVariable);
    return v11;
  }
  return result;
}

Referenced by:

ExSetFirmwareEnvironmentVariable
NtSetSystemEnvironmentValueEx