PfpSourceGetPrefetchSupport
__int64 __fastcall PfpSourceGetPrefetchSupport(int *a1, __int64 a2){
VOID *v2;
void *v3;
void *UniqueProcess;
int v6;
int v8;
unsigned __int64 v9;
NTSTATUS v10;
NTSTATUS v11;
__int64 v12;
UINT64 Tag;
PVOID Object;
void *ProcessHandle;
_CLIENT_ID ClientId;
_OBJECT_ATTRIBUTES ObjectAttributes;
_UNICODE_STRING DestinationString;
WCHAR pszDest[40];
v2 = 0i64;
*(_DWORD *)a2 = *a1;
v3 = 0i64;
Object = 0i64;
UniqueProcess = 0i64;
ProcessHandle = 0i64;
ClientId.UniqueProcess = 0i64;
v6 = *a1;
memset(&ObjectAttributes, 0, sizeof(ObjectAttributes));
DestinationString = 0i64;
if( !v6 )
{
*(_QWORD *)(a2 + 8) = 0i64;
goto LABEL_9;
}
v8 = v6 - 1;
if( !v8 )
{
RtlStringCbPrintfW(pszDest, 0x50ui64, (WCHAR *)L"\\KernelObjects\\Session%d");
RtlInitUnicodeString(&DestinationString, pszDest);
ObjectAttributes.RootDirectory = 0i64;
ObjectAttributes.ObjectName = &DestinationString;
ObjectAttributes.Length = 48;
ObjectAttributes.Attributes = 512;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
v10 = NtOpenSession(&ClientId.UniqueProcess, 0xF0003ui64, &ObjectAttributes);
if( v10 < 0 )
{
UniqueProcess = ClientId.UniqueProcess;
goto LABEL_22;
}
*(_QWORD *)(a2 + 8) = ClientId.UniqueProcess;
goto LABEL_9;
}
if( v8 != 1 )
return(unsigned int)-1073741637;
ObjectAttributes.RootDirectory = 0i64;
ObjectAttributes.ObjectName = 0i64;
ClientId.UniqueThread = 0i64;
v9 = (unsigned int)a1[1];
ObjectAttributes.Length = 48;
ObjectAttributes.Attributes = 512;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
ClientId.UniqueProcess = (void *)v9;
v10 = NtOpenProcess(&ProcessHandle, 0x1FFFFF, &ObjectAttributes, &ClientId);
if( v10 >= 0 )
{
v3 = ProcessHandle;
LODWORD(Tag) = 1935107664;
v11 = ObpReferenceObjectByHandleWithTag(
ProcessHandle,
0x1FFFFFui64,
(_OBJECT_TYPE *)PsProcessType,
0,
Tag,
&Object,
0i64,
0i64);
v2 = Object;
v10 = v11;
if( v11 < 0 )
goto LABEL_10;
v12 = *((_QWORD *)a1 + 2);
if( v12 && v12 != ((*((_QWORD *)Object + 136) ^ *((_QWORD *)Object + 141)) & 0x1FFFFFFFFFFFFFFFi64) )
{
v10 = -1073741275;
LABEL_10:
if( v2 )
ObfDereferenceObjectWithTag(v2, 0x73576650ui64);
goto LABEL_12;
}
*(_QWORD *)(a2 + 8) = v3;
v3 = 0i64;
LABEL_9:
v10 = 0;
goto LABEL_10;
}
v3 = ProcessHandle;
LABEL_12:
if( !v3 )
return(unsigned int)v10;
NtClose((UINT64)v3);
LABEL_22:
if( UniqueProcess )
NtClose((UINT64)UniqueProcess);
return(unsigned int)v10;
}Referenced by:
PfpPrefetchPrivatePages