ExpGetFirmwareEnvironmentVariable

NTSTATUS __stdcall ExpGetFirmwareEnvironmentVariable(
        WCHAR *VariableName,
        _GUID *VendorGuid,
        VOID *Value,
        UINT64 *ValueLength,
        UINT64 *Attributes,
        INT8 ProbeMode){
  UINT64 v8; 
  NTSTATUS result; 
  _ETHREAD *CurrentThread; 
  NTSTATUS EnvironmentVariable; 
  VOID *LockVariable; 
  VOID *Valuea; 

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

Referenced by:

ExGetFirmwareEnvironmentVariable
NtQuerySystemEnvironmentValueEx