CmpLogTransactionAbortedWithChildName
void __fastcall CmpLogTransactionAbortedWithChildName(
__int64 a1,
const UNICODE_STRING *a2,
int a3,
__int64 a4,
unsigned int a5){
struct _PRIVILEGE_SET *Buffer;
__int64 v9;
_CHILD_LIST *v10;
UNICODE_STRING *v11;
int v12;
unsigned __int64 v13;
wchar_t *v14;
UNICODE_STRING *p_DestinationString;
struct _UNICODE_STRING DestinationString;
PCUNICODE_STRING SourceString;
SourceString = 0i64;
DestinationString = 0i64;
RtlInitUnicodeString(&DestinationString, 0i64, a3);
if( !a5 || (unsigned int)dword_140C02130 <= 4 || !tlgKeywordOn((__int64)&dword_140C02130, 1i64) )
{
Buffer = (struct _PRIVILEGE_SET *)DestinationString.Buffer;
goto LABEL_3;
}
CmpConstructNameFromKcbNameBlocks((_CM_KEY_CONTROL_BLOCK *)a1, (_UNICODE_STRING **)&SourceString);
v11 = (UNICODE_STRING *)SourceString;
if( v12 < 0 )
goto LABEL_14;
if( !a2 )
{
p_DestinationString = (UNICODE_STRING *)SourceString;
LABEL_13:
CmpLogTransactionAbortedByName(&p_DestinationString->Length, a3, v9, a5);
goto LABEL_14;
}
v13 = SourceString->Length + 2i64 + a2->Length;
if( v13 <= 0xFFFF )
{
DestinationString.MaximumLength = SourceString->Length + 2 + a2->Length;
CmpAllocateTransientPoolWithTag((_HHIVE *)1, (unsigned __int16)v13, 0x624E4D43ui64, v10);
DestinationString.Buffer = v14;
Buffer = (struct _PRIVILEGE_SET *)v14;
if( !v14 )
goto LABEL_15;
RtlUnicodeStringCopy(&DestinationString, v11);
RtlUnicodeStringCatString(&DestinationString, (PWCHAR)L"\\");
RtlUnicodeStringCat(&DestinationString, a2);
p_DestinationString = &DestinationString;
goto LABEL_13;
}
LABEL_14:
Buffer = (struct _PRIVILEGE_SET *)DestinationString.Buffer;
LABEL_15:
if( v11 )
CmpFreeTransientPoolWithTag(v11, 0x624E4D43ui64);
LABEL_3:
if( Buffer )
CmSiFreeMemory(Buffer);
}Referenced by:
CmpCreateChild
CmpLogTransactionAborted
CmpLogTransactionAbortedForRollbackPacket