SepRmGlobalSaclSetWrkr
void __fastcall SepRmGlobalSaclSetWrkr(__int64 a1, __int64 a2){
UINT64 v2;
UINT8 *v3;
char v5;
int GlobalSacl;
_ETHREAD *CurrentThread;
_QWORD *v8;
void *v9;
void *v10;
void *v11;
_QWORD *PoolWithTag;
UINT8 *v13;
UINT8 *v14;
unsigned __int16 MaximumLength;
PVOID v16;
_UNICODE_STRING ObjectType;
UINT64 AclSize;
PVOID P;
PVOID v20;
__int64 *v21;
v2 = *(unsigned __int16 *)(a1 + 44);
v3 = (UINT8 *)(a1 + 46);
v20 = 0i64;
v21 = 0i64;
LODWORD(AclSize) = 0;
P = 0i64;
*(_DWORD *)(&ObjectType.MaximumLength + 1) = 0;
ObjectType.MaximumLength = v2;
ObjectType.Length = v2;
v5 = 0;
ObjectType.Buffer = (wchar_t *)(a1 + 46);
GlobalSacl = SepRmFetchGlobalSacl(&ObjectType, &AclSize, (UINT8 **)&P);
if( GlobalSacl >= 0 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
v5 = 1;
ExAcquireResourceExclusiveLite(&SepRmGlobalSaclLock, 1u);
GlobalSacl = SepRmGlobalSaclFind((__int64 *)&v20, &v21, &ObjectType, 0);
if( GlobalSacl < 0 )
{
if( !(_DWORD)AclSize )
goto LABEL_2;
PoolWithTag = ExAllocatePoolWithTag(PagedPool, 0x20ui64, 0x6C635347ui64);
if( PoolWithTag )
{
v13 = (UINT8 *)ExAllocatePoolWithTag(PagedPool, v2, 0x6C635347ui64);
PoolWithTag[2] = v13;
v14 = v13;
if( v13 )
{
MaximumLength = ObjectType.MaximumLength;
*((_WORD *)PoolWithTag + 5) = ObjectType.MaximumLength;
*((_WORD *)PoolWithTag + 4) = MaximumLength;
memmove(v14, v3, v2);
v16 = P;
P = 0i64;
PoolWithTag[3] = v16;
*PoolWithTag = SepRmGlobalSaclHead;
SepRmGlobalSaclHead = (__int64)PoolWithTag;
goto LABEL_2;
}
ExFreePoolWithTag(PoolWithTag, 0);
}
GlobalSacl = -1073741801;
goto LABEL_2;
}
v8 = v20;
if( (_DWORD)AclSize )
{
v9 = (void *)*((_QWORD *)v20 + 3);
if( v9 )
ExFreePoolWithTag(v9, 0);
v8[3] = P;
goto LABEL_11;
}
if( v21 )
*v21 = *(_QWORD *)v20;
else
SepRmGlobalSaclHead = *(_QWORD *)v20;
v10 = (void *)v8[2];
if( v10 )
{
ExFreePoolWithTag(v10, 0);
v8[2] = 0i64;
}
v11 = (void *)v8[3];
if( v11 )
{
ExFreePoolWithTag(v11, 0);
v8[3] = 0i64;
}
ExFreePoolWithTag(v8, 0);
}
LABEL_2:
if( P )
ExFreePoolWithTag(P, 0);
if( v5 )
{
LABEL_11:
ExReleaseResourceLite(&SepRmGlobalSaclLock);
KeLeaveCriticalRegion();
}
*(_DWORD *)(a2 + 40) = GlobalSacl;
}Referenced by:
No references.