NtSetDriverEntryOrder
NTSTATUS __stdcall NtSetDriverEntryOrder(UINT64 *Ids, UINT64 Count){
__int64 v2;
VOID **PoolWithTag;
_ETHREAD *CurrentThread;
char PreviousMode;
unsigned int v8;
char *v9;
unsigned int i;
_ETHREAD *v11;
NTSTATUS v12;
UINT64 Attributes;
v2 = (unsigned int)Count;
PoolWithTag = 0i64;
if( *(&ExBootDevicesRemovedEvent + 276) != 2 )
return -1073741822;
if( (unsigned int)Count > 0x3FFFFFFF )
return -1073741811;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
PreviousMode = CurrentThread->Tcb.PreviousMode;
if( PreviousMode
&& !SeSinglePrivilegeCheck(*(_QWORD *)&SeSystemEnvironmentPrivilege, CurrentThread->Tcb.PreviousMode) )
{
return -1073741727;
}
if( (_DWORD)v2 )
{
v8 = 4 * v2;
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 2 * v2, 1920364101i64);
if( !PoolWithTag )
return -1073741670;
if( PreviousMode && v8 )
{
if( ((unsigned __int8)Ids & 3) != 0 )
ExRaiseDatatypeMisalignment();
v9 = (char *)Ids + v8;
if( (unsigned __int64)v9 > 0x7FFFFFFF0000i64 || v9 < (char *)Ids )
MEMORY[0x7FFFFFFF0000] = 0;
}
for( i = 0; i < (unsigned int)v2; ++i )
{
if( *((_DWORD *)Ids + i) > 0xFFFFu )
{
ExFreePoolWithTag(PoolWithTag, 0);
return -1073741811;
}
*((_WORD *)PoolWithTag + i) = *((_WORD *)Ids + 2 * i);
}
}
v11 = (_ETHREAD *)KeGetCurrentThread();
--v11->Tcb.KernelApcDisable;
ExAcquireFastMutexUnsafe((PFAST_MUTEX)((char *)&WheapDeferredInternalLogsEventLock + 2752));
LODWORD(Attributes) = 1;
v12 = IoSetEnvironmentVariableEx(
(WCHAR *)L"DriverOrder",
(_GUID *)&EfiDriverVariablesGuid,
PoolWithTag,
(unsigned int)(2 * v2),
Attributes);
ExReleaseFastMutexUnsafe((PFAST_MUTEX)((char *)&WheapDeferredInternalLogsEventLock + 2752));
KeLeaveCriticalRegionThread(KeGetCurrentThread());
if( v12 == -1073741568 )
v12 = 0;
if( PoolWithTag )
ExFreePoolWithTag(PoolWithTag, 0);
return v12;
}Referenced by:
No references.