IopGetEnvironmentVariableSysEnv
NTSTATUS __stdcall IopGetEnvironmentVariableSysEnv(
_FILE_OBJECT *FileObject,
_DEVICE_OBJECT *DeviceObject,
WCHAR *VariableName,
_GUID *VendorGuid,
VOID *Value,
UINT64 *ValueLength,
UINT64 *Attributes){
__int64 v9;
size_t v11;
unsigned int v12;
VOID **Pool_5;
VOID **v14;
NTSTATUS v15;
_GUID v16;
__int64 v17;
void *v18;
VOID **v19;
NTSTATUS v20;
size_t v21;
int v22;
INT64 v24;
v9 = -1i64;
do
++v9;
while( VariableName[v9] );
v11 = 2 * v9 + 2;
v12 = 2 * v9 + 22;
Pool_5 = IopVerifierExAllocatePool_5((__int64)FileObject, v12);
v14 = Pool_5;
if( Pool_5 )
{
memmove((char *)Pool_5 + 20, VariableName, v11);
v16 = *VendorGuid;
*((_DWORD *)v14 + 4) = v11;
*(_GUID *)v14 = v16;
v19 = IopVerifierExAllocatePool_5(v17, (unsigned int)(*(_DWORD *)ValueLength + 8));
if( !v19 )
{
v15 = -1073741670;
LABEL_17:
ExFreePoolWithTag(v14, 0);
return v15;
}
LOBYTE(v18) = 1;
LODWORD(v24) = v12;
v20 = IopIssueSystemEnvironmentRequest(0x520004u, v18, 0, DeviceObject, (ULONG)v14, v24);
v15 = v20;
if( v20 < 0 )
{
if( v20 != -1073741789 )
{
LABEL_16:
ExFreePoolWithTag(v19, 0);
goto LABEL_17;
}
v22 = -8;
}
else
{
if( Attributes )
*(_DWORD *)Attributes = *(_DWORD *)v19;
v21 = *(_DWORD *)ValueLength;
if( *(_DWORD *)ValueLength >= *((_DWORD *)v19 + 1) )
v21 = *((_DWORD *)v19 + 1);
memmove(Value, v19 + 1, v21);
v22 = *((_DWORD *)v19 + 1);
}
*(_DWORD *)ValueLength = v22;
goto LABEL_16;
}
return -1073741670;
}Referenced by:
No references.