PnpInitializeNotifyEntry
__int64 __fastcall PnpInitializeNotifyEntry(
__int64 a1,
int a2,
unsigned __int64 a3,
__int64 a4,
__int64 a5,
__int64 a6){
PVOID v7;
int SessionId;
NTSTATUS v12;
struct _ERESOURCE *PoolWithTag;
WCHAR v15;
PVOID SessionHandle;
struct _UNICODE_STRING DestinationString;
OBJECT_ATTRIBUTES ObjectAttributes;
wchar_t Dst[256];
v7 = 0i64;
memset(&ObjectAttributes, 0, sizeof(ObjectAttributes));
SessionHandle = 0i64;
SessionId = 0;
v12 = 0;
DestinationString = 0i64;
if( !(unsigned int)MmIsSessionAddress((PVOID)a3) )
goto LABEL_2;
SessionId = MmGetSessionIdEx(*((_QWORD *)KeGetCurrentThread() + 23));
if( SessionId == -1 )
return(unsigned int)-1073741811;
swprintf_s(Dst, 0x100ui64, (WCHAR *)L"\\KernelObjects\\Session%d");
RtlInitUnicodeString(&DestinationString, Dst, v15);
ObjectAttributes.RootDirectory = 0i64;
ObjectAttributes.ObjectName = &DestinationString;
ObjectAttributes.Length = 48;
ObjectAttributes.Attributes = 512;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
v12 = ZwOpenSession(&SessionHandle, 0i64, &ObjectAttributes);
if( v12 < 0 || (v7 = SessionHandle) == 0i64 )
{
return(unsigned int)-1073741811;
}
else
{
LABEL_2:
*(_QWORD *)(a1 + 48) = a5;
*(_QWORD *)(a1 + 8) = a1;
*(_WORD *)(a1 + 56) = 1;
*(_QWORD *)(a1 + 64) = a6;
*(_QWORD *)a1 = a1;
*(_DWORD *)(a1 + 16) = a2;
*(_DWORD *)(a1 + 20) = SessionId;
*(_QWORD *)(a1 + 24) = v7;
*(_QWORD *)(a1 + 32) = a3;
*(_QWORD *)(a1 + 40) = a4;
*(_BYTE *)(a1 + 58) = 0;
PoolWithTag = (struct _ERESOURCE *)ExAllocatePoolWithTag(NonPagedPoolNx, 0x68ui64, 0x56706E50ui64);
*(_QWORD *)(a1 + 72) = PoolWithTag;
if( PoolWithTag )
ExInitializeResourceLite(PoolWithTag);
else
return(unsigned int)-1073741670;
}
return(unsigned int)v12;
}Referenced by:
IoRegisterPlugPlayNotification
PiRegisterKernelSoftRestartNotification