CmpCmdHiveClose
BOOLEAN __fastcall CmpCmdHiveClose(__int64 a1){
HANDLE *v2;
UINT8 v3;
VOID *v4;
__int64 v5;
unsigned int i;
HANDLE v7;
__int16 *p_ObjectInformation;
__int16 v10;
__int16 ObjectInformation;
struct _IO_STATUS_BLOCK IoStatusBlock;
__int128 FileInformation;
__int128 v14;
__int64 v15;
v15 = 0i64;
IoStatusBlock = 0i64;
FileInformation = 0i64;
v14 = 0i64;
v2 = (HANDLE *)(a1 + 1536);
v3 = IoSetThreadHardErrorMode(0);
v4 = *v2;
if( *v2 && ZwQueryInformationFile(v4, &IoStatusBlock, &FileInformation, 0x28ui64, FileBasicInformation) >= 0 )
{
if( *(_BYTE *)(a1 + 141) )
{
*(_QWORD *)&v14 = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
}
else
{
v5 = v14;
if( *(_QWORD *)(a1 + 4224) )
v5 = *(_QWORD *)(a1 + 4224);
*(_QWORD *)&v14 = v5;
}
*((_QWORD *)&FileInformation + 1) = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
ZwSetInformationFile(v4, &IoStatusBlock, &FileInformation, 0x28ui64, FileBasicInformation);
}
for( i = 0; i < 6; ++i )
{
v7 = *v2;
if( *v2 )
{
if( i )
{
ObjectInformation = 0;
p_ObjectInformation = &ObjectInformation;
}
else
{
v10 = 0;
p_ObjectInformation = &v10;
}
ZwSetInformationObject(v7, ObjectHandleFlagInformation, p_ObjectInformation, 2ui64);
ZwClose(*v2);
*v2 = 0i64;
}
++v2;
}
return IoSetThreadHardErrorMode(v3);
}Referenced by:
CmShutdownSystem
CmpCompleteUnloadKey
CmpDestroyHive