CmpRecoverEnlistment
NTSTATUS __fastcall CmpRecoverEnlistment(_QWORD *a1, __int64 a2, _UNICODE_STRING *a3, INT64 a4){
NTSTATUS result;
int v7;
INT64 v8;
INT64 v9;
INT64 v10;
POBJECT_ATTRIBUTES ObjectAttributes;
INT64 v12;
INT64 v13;
_UNICODE_STRING GuidString;
_UNICODE_STRING UnicodeString;
_OBJECT_ATTRIBUTES v16;
void *EnlistmentHandle;
PVOID EnlistmentKey;
EnlistmentKey = 0i64;
EnlistmentHandle = 0i64;
GuidString = 0i64;
UnicodeString = 0i64;
memset(&v16, 0, sizeof(v16));
result = RtlStringFromGUIDEx((_GUID *)a3, &GuidString, 1u);
if( result >= 0 )
{
v7 = CmpTransSearchAddTransFromRm((_CM_RM *)a1, 0i64, (_GUID *)&a3[1], 1ui64, (_CM_TRANS **)&EnlistmentKey);
if( v7 >= 0 )
{
v8 = a1[6];
v16.RootDirectory = 0i64;
v16.ObjectName = 0i64;
v16.Length = 48;
*(_OWORD *)&v16.SecurityDescriptor = 0i64;
v16.Attributes = 576;
v7 = ZwOpenEnlistment(
(INT64)&EnlistmentHandle,
983071i64,
v8,
(INT64)a3,
(INT64)&v16,
v12,
*(INT64 *)&GuidString.Length,
(INT64)GuidString.Buffer);
if( v7 >= 0 )
{
v7 = ZwRecoverEnlistment(
(INT64)EnlistmentHandle,
(INT64)EnlistmentKey,
v9,
v10,
(INT64)ObjectAttributes,
v13,
*(INT64 *)&GuidString.Length,
(INT64)GuidString.Buffer);
ZwClose((_HANDLE)EnlistmentHandle);
}
}
RtlFreeAnsiString(&UnicodeString);
RtlFreeAnsiString(&GuidString);
return v7;
}
return result;
}Referenced by:
CmKtmNotification