CmpCmdRenameHive
INT64 __stdcall CmpCmdRenameHive(
PVOID Handle,
_OBJECT_NAME_INFORMATION *OldName,
_UNICODE_STRING *NewName,
UINT64 NameInfoLength,
UINT8 ReplaceIfExists){
INT64 result;
VOID **PoolWithTag;
INT8 *v9;
unsigned int v10;
UINT64 *ReturnLength;
_IO_STATUS_BLOCK IoStatusBlock;
UINT64 v13;
LODWORD(v13) = NameInfoLength;
IoStatusBlock = 0i64;
if( !OldName
|| (LODWORD(result) = ZwQueryObject(Handle, ObjectNameInformation, OldName, NameInfoLength, &v13), (int)result >= 0) )
{
PoolWithTag = ExAllocatePoolWithTag(1ui64, NewName->Length + 24i64, 538987843i64);
v9 = (INT8 *)PoolWithTag;
if( PoolWithTag )
{
PoolWithTag[1] = 0i64;
*(_BYTE *)PoolWithTag = ReplaceIfExists;
*((_DWORD *)PoolWithTag + 4) = NewName->Length;
memmove((char *)PoolWithTag + 20, NewName->Buffer, NewName->Length);
LODWORD(ReturnLength) = 10;
v10 = ZwSetInformationFile(
(UINT64)Handle,
(UINT64)&IoStatusBlock,
v9,
(unsigned int)NewName->Length + 24,
(UINT64)ReturnLength);
ExFreePoolWithTag(v9, 0);
return v10;
}
else
{
return 3221225626i64;
}
}
return result;
}Referenced by:
CmReplaceKey
CmpFlushBackupHive