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