NtAllocateUuids
NTSTATUS __fastcall NtAllocateUuids(UINT64 a1, UINT64 a2, UINT64 a3, UINT64 a4){
UINT64 v8;
UINT64 v9;
UINT64 v10;
UINT64 v11;
_ETHREAD *v12;
_BYTE *v13;
_BYTE *v14;
UINT64 v15;
int v16;
char v17;
char v18;
UINT64 Range;
_LARGE_INTEGER Time;
_ETHREAD *CurrentThread;
Time.QuadPart = 0i64;
Range = 0i64;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
if( CurrentThread->Tcb.PreviousMode )
{
if( (a1 & 3) != 0 )
goto LABEL_14;
v8 = 0x7FFFFFFF0000i64;
v9 = 0x7FFFFFFF0000i64;
if( a1 < 0x7FFFFFFF0000i64 )
v9 = a1;
*(_BYTE *)v9 = *(_BYTE *)v9;
*(_BYTE *)(v9 + 7) = *(_BYTE *)(v9 + 7);
if( (a2 & 3) != 0 )
goto LABEL_14;
v10 = 0x7FFFFFFF0000i64;
if( a2 < 0x7FFFFFFF0000i64 )
v10 = a2;
*(_DWORD *)v10 = *(_DWORD *)v10;
if( (a3 & 3) != 0 )
LABEL_14:
ExRaiseDatatypeMisalignment();
v11 = 0x7FFFFFFF0000i64;
if( a3 < 0x7FFFFFFF0000i64 )
v11 = a3;
*(_DWORD *)v11 = *(_DWORD *)v11;
if( a4 < 0x7FFFFFFF0000i64 )
v8 = a4;
*(_BYTE *)v8 = *(_BYTE *)v8;
*(_BYTE *)(v8 + 5) = *(_BYTE *)(v8 + 5);
}
v12 = (_ETHREAD *)KeGetCurrentThread();
--v12->Tcb.KernelApcDisable;
v13 = KeAbPreAcquire(&stru_140CEC740, 0i64, 0i64);
v14 = v13;
if( _interlockedbittestandset64((volatile signed __int32 *)&stru_140CEC740, 0i64) )
ExfAcquirePushLockExclusiveEx(&stru_140CEC740, v13, &stru_140CEC740);
if( v14 )
v14[26] |= 1u;
v16 = ExpAllocateUuids(&Time, &Range, (UINT64 *)((char *)&Range + 4));
if( v16 < 0 )
{
if( (_InterlockedExchangeAdd64(&stru_140CEC740._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(&stru_140CEC740);
KeAbPostRelease(&stru_140CEC740);
KeLeaveCriticalRegionThread(&v12->Tcb);
return v16;
}
else
{
ExpUuidSaveSequenceNumberIf(v15);
v17 = BYTE5(NlsMbCodePageTag);
v18 = _InterlockedExchangeAdd64(&stru_140CEC740._bf_0, 0xFFFFFFFFFFFFFFFFui64);
if( (v18 & 2) != 0 && (v18 & 4) == 0 )
ExfTryToWakePushLock(&stru_140CEC740);
KeAbPostRelease(&stru_140CEC740);
KeLeaveCriticalRegionThread(&v12->Tcb);
*(_LARGE_INTEGER *)a1 = Time;
*(_DWORD *)a2 = Range;
*(_DWORD *)a3 = HIDWORD(Range);
*(_DWORD *)a4 = *(int *)((char *)&dword_140D2C2E4 + 2);
*(_WORD *)(a4 + 4) = word_140D2C2EA;
return v17 == 0 ? 0x40020056 : 0;
}
}Referenced by:
No references.