CcDeletePartition
NTSTATUS __stdcall CcDeletePartition(PVOID P){
void *v2;
UINT64 v3;
__int64 v4;
unsigned __int8 v5;
unsigned __int64 v6;
__int64 **v7;
__int64 *v8;
__int64 v9;
__int64 **v10;
__int64 *v11;
__int64 v12;
__int64 **v13;
__int64 *v14;
__int64 v15;
void *v16;
NTSTATUS result;
KeSetEvent((PRKEVENT)((char *)P + 976), 0);
CcDereferencePartition((INT64)P);
v2 = (void *)*((_QWORD *)P + 128);
if( v2 )
{
ZwWaitForSingleObject(v2, 0, 0i64);
ZwClose(*((HANDLE *)P + 128));
*((_QWORD *)P + 128) = 0i64;
}
if( !KeCancelTimer((PKTIMER)((char *)P + 568)) )
KeFlushQueuedDpcs();
if( *((_BYTE *)P + 965) )
{
KeAcquireSpinLockRaiseToDpc(&CcGlobalPartitionLock, v3);
v4 = *((_QWORD *)P + 1);
v6 = v5;
--CcPartitionCount;
*(_QWORD *)(v4 + 8) = 0i64;
KxReleaseSpinLock(&CcGlobalPartitionLock);
__writecr8(v6);
}
v7 = (__int64 **)((char *)P + 208);
while( 1 )
{
v8 = *v7;
if( *v7 == (__int64 *)v7 )
break;
v9 = *v8;
if( (__int64 **)v8[1] != v7 || *(__int64 **)(v9 + 8) != v8 )
LABEL_22:
__fastfail(3u);
*v7 = (__int64 *)v9;
*(_QWORD *)(v9 + 8) = v7;
ExFreePoolWithTag(v8, 0x71576343u);
}
v10 = (__int64 **)((char *)P + 304);
while( 1 )
{
v11 = *v10;
if( *v10 == (__int64 *)v10 )
break;
v12 = *v11;
if( (__int64 **)v11[1] != v10 || *(__int64 **)(v12 + 8) != v11 )
goto LABEL_22;
*v10 = (__int64 *)v12;
*(_QWORD *)(v12 + 8) = v10;
ExFreePoolWithTag(v11, 0x71576343u);
}
v13 = (__int64 **)((char *)P + 328);
while( 1 )
{
v14 = *v13;
if( *v13 == (__int64 *)v13 )
break;
v15 = *v14;
if( (__int64 **)v14[1] != v13 || *(__int64 **)(v15 + 8) != v14 )
goto LABEL_22;
*v13 = (__int64 *)v15;
*(_QWORD *)(v15 + 8) = v13;
ExFreePoolWithTag(v14, 0x71576343u);
}
v16 = (void *)*((_QWORD *)P + 90);
if( v16 )
{
ExFreePoolWithTag(v16, 0x70546343u);
*((_QWORD *)P + 90) = 0i64;
}
CcUninitializePartitionVacbs((_VACB *)P, v3);
CcUninitializeAsyncRead(P);
DbgPrintEx(0x7Fu, 2u, "CcDeletePartition: Partition Deleted=%p, PartitionObject=%p \n", P, *((const void **)P + 1));
ExFreePoolWithTag(P, 0x72506343u);
return result;
}Referenced by:
CcCreatePartition
CcExitPartition
CcGetPartitionWithCreate