WmipCreateGuidObject
__int64 __fastcall WmipCreateGuidObject(__int128 *a1, DWORD a2, _OWORD *a3, _QWORD *a4){
__int64 v8;
WCHAR v9;
int GuidSecurityDescriptor;
__int128 v11;
__int128 v12;
PVOID v13;
__int128 v14;
__int128 v15;
INT64 v16;
__int64 v18;
UINT64 v19;
PVOID P;
INT64 DestinationString;
struct _UNICODE_STRING DestinationString_8;
__int128 v23;
__int64 v24;
int v25;
int v26;
PVOID v27;
__int64 v28;
INT64 result[4];
struct _SECURITY_SUBJECT_CONTEXT SubjectContext;
__int64 v31[28];
P = 0i64;
DestinationString_8 = 0i64;
memset((INT64)result, 0i64);
memset((INT64)v31, 0i64);
v8 = *((_QWORD *)a1 + 2);
DestinationString = 0i64;
RtlInitUnicodeString(&DestinationString_8, (PCWSTR)(*(_QWORD *)(v8 + 8) + 18i64), v9);
GuidSecurityDescriptor = WmipGetGuidSecurityDescriptor(&DestinationString_8, &P);
if( GuidSecurityDescriptor >= 0 )
{
v11 = a1[1];
v23 = *a1;
v12 = a1[2];
v13 = P;
v26 = HIDWORD(v11);
v24 = 0i64;
v28 = *((_QWORD *)&v12 + 1);
v27 = P;
v25 = 640;
GuidSecurityDescriptor = SeCreateAccessState(
(_ACCESS_STATE *)result,
(_AUX_ACCESS_DATA *)v31,
a2,
(_GENERIC_MAPPING *)&WmipGenericMapping);
if( GuidSecurityDescriptor >= 0 )
{
v14 = *(_OWORD *)&SubjectContext.ClientToken;
v15 = *(_OWORD *)&SubjectContext.PrimaryToken;
SubjectContext = WmipSystemSubjectContext;
GuidSecurityDescriptor = ObCreateObjectEx(
0,
WmipGuidObjectType,
(__int64)&v23,
0,
v18,
168,
0,
0,
&DestinationString,
0i64);
if( GuidSecurityDescriptor >= 0 )
{
v16 = DestinationString;
memset(DestinationString, 0i64);
KeInitializeEvent((_KEVENT *)v16, NotificationEvent, 0);
LODWORD(v19) = 0;
*(_DWORD *)(v16 + 112) = 4096;
*(_DWORD *)(v16 + 144) = 4096;
*(_OWORD *)(v16 + 24) = *a3;
GuidSecurityDescriptor = ObInsertObjectEx((PVOID)v16, (ACCESS_STATE *)result, a2, 0i64, v19, 0i64, 0i64);
if( GuidSecurityDescriptor >= 0 )
{
*a4 = v16;
GuidSecurityDescriptor = 0;
}
}
*(_OWORD *)&SubjectContext.ClientToken = v14;
*(_OWORD *)&SubjectContext.PrimaryToken = v15;
SepDeleteAccessState((ACCESS_STATE *)result);
SeReleaseSubjectContext(&SubjectContext);
}
if( v13 && v13 != (PVOID)WmipDefaultAccessSd )
ExFreePoolWithTag(v13, 0);
}
return(unsigned int)GuidSecurityDescriptor;
}Referenced by:
WmipOpenGuidObject