HalSetEnvironmentVariableEx
NTSTATUS __stdcall HalSetEnvironmentVariableEx(PWCHAR VariableName, GUID *VendorGuid, PVOID Value){
int v3;
int v4;
char v7;
__int64 v8;
__int64 v9;
UINT64 v10;
unsigned __int64 v11;
__int64 v12;
signed __int64 v13;
void *v14;
void *v15;
unsigned int v16;
NTSTATUS v17;
wchar_t Dst[8];
struct _GROUP_AFFINITY PreviousAffinity;
char v20;
v4 = v3;
*(_OWORD *)Dst = 0i64;
PreviousAffinity = 0i64;
if( !HalFirmwareTypeEfi )
return -1073741822;
v7 = 1;
if( (v20 & 1) == 0 )
return -1073741811;
v8 = -1i64;
do
++v8;
while( VariableName[v8] );
v9 = (unsigned int)(v8 + 1);
if( (unsigned int)v9 >= 0x100 )
v9 = 256i64;
v10 = (unsigned int)v9;
v11 = 2 * v9;
v12 = v11 + 15;
if( v11 + 15 <= v11 )
v12 = 0xFFFFFFFFFFFFFF0i64;
v13 = v12 & 0xFFFFFFFFFFFFFFF0ui64;
v14 = alloca(v13);
v15 = alloca(v13);
wcscpy_s(Dst, v10, VariableName);
if( KeGetCurrentIrql() >= 2u )
{
v7 = 0;
}
else
{
v16 = KiProcessorIndexToNumberMappingTable[*((unsigned int *)KeGetPcr() + 105)];
Dst[6] = 0;
Dst[7] = 0;
*(_DWORD *)&Dst[4] = (unsigned __int16)(v16 >> 6);
*(_QWORD *)Dst = 1i64 << (v16 & 0x3F);
KeSetSystemGroupAffinityThread((PGROUP_AFFINITY)Dst, &PreviousAffinity);
}
if( (v20 & 0x40) != 0 )
v17 = -1073741811;
else
v17 = HalEfiSetEnvironmentVariable((__int64)Dst);
if( v4 )
v17 = HalEfiSetEnvironmentVariable((__int64)Dst);
if( v7 )
KeRevertToUserGroupAffinityThread(&PreviousAffinity);
return v17;
}Referenced by:
HaliAcpiSleep
IopSetEnvironmentVariableHal
PopCheckpointSystemSleepUnsafe
PopSetMemoryOverwriteRequestAction
WheapCheckForAndReportErrorsFromPreviousSession
WheapPersistPageForMemoryError