SleepstudyHelperDestroyLibrary
NTSTATUS __stdcall SleepstudyHelperDestroyLibrary(PVOID P){
NTSTATUS v1;
_QWORD *v3;
PVOID *v4;
_QWORD *v5;
_QWORD *v6;
__int64 v7;
_EX_PUSH_LOCK *v8;
__int64 v9;
_QWORD *v10;
PVOID *i;
v1 = 0;
if( !P )
return -1073741811;
ExAcquirePushLockExclusiveEx(&SshpLibraryListLock, 0i64);
v3 = *(_QWORD **)P;
if( *(PVOID *)(*(_QWORD *)P + 8i64) != P || (v4 = (PVOID *)*((_QWORD *)P + 1), *v4 != P) )
LABEL_17:
__fastfail(3u);
*v4 = v3;
v3[1] = v4;
SSHSupportReleasePushLockExclusive((ULONG_PTR)&SshpLibraryListLock);
v5 = (char *)P + 40;
while( 1 )
{
v6 = (_QWORD *)*v5;
if( (_QWORD *)*v5 == v5 )
break;
if( (_QWORD *)v6[1] != v5 )
goto LABEL_17;
v7 = *v6;
if( *(_QWORD **)(*v6 + 8i64) != v6 )
goto LABEL_17;
*v5 = v7;
*(_QWORD *)(v7 + 8) = v5;
v8 = (_EX_PUSH_LOCK *)((char *)&SshpBlockerCollections + 32 * *((int *)v6 + 10));
ExAcquirePushLockExclusiveEx(v8, 0i64);
v9 = v6[2];
if( *(_QWORD **)(v9 + 8) != v6 + 2 )
goto LABEL_17;
v10 = (_QWORD *)v6[3];
if( (_QWORD *)*v10 != v6 + 2 )
goto LABEL_17;
*v10 = v9;
*(_QWORD *)(v9 + 8) = v10;
SSHSupportReleasePushLockExclusive((ULONG_PTR)v8);
SshpDereferenceBlocker((_QWORD *)v6[13]);
}
for( i = (PVOID *)((char *)P + 56); *i != i; SshpFreeDataEntry(*i) )
;
CmpFreeTransientPoolWithTag(P, *((unsigned int *)P + 6));
return v1;
}Referenced by:
SleepstudyHelper_Uninitialize
SshpUninitialize