PiPnpRtlGatherInstallerClassChangeInfo
NTSTATUS __stdcall PiPnpRtlGatherInstallerClassChangeInfo(
WCHAR *DeviceInstanceId,
WCHAR *NewInstallerClass,
PI_PNPRTL_INSTALLER_CLASS_CHANGE_INFO **Info){
VOID **PoolWithTag;
INT64 v7;
CHAR *v8;
int Object;
NTSTATUS ObjectProperty;
int Guid;
_GUID Guid_4;
WCHAR GuidString[40];
Guid = 0;
Guid_4 = 0i64;
PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x18ui64, 1198550608i64);
*Info = (PI_PNPRTL_INSTALLER_CLASS_CHANGE_INFO *)PoolWithTag;
if( !PoolWithTag )
{
Object = -1073741670;
goto LABEL_10;
}
*(_OWORD *)PoolWithTag = 0i64;
PoolWithTag[2] = 0i64;
if( NewInstallerClass )
{
Object = PiDmAddCacheReferenceForObject(2, NewInstallerClass, (PI_DM_OBJECT **)*Info + 2);
if( Object < 0 )
goto LABEL_10;
}
Object = PiDmGetObject(1, DeviceInstanceId, (PI_DM_OBJECT **)*Info);
if( (int)(Object + 0x80000000) >= 0 && Object != -1073741772 )
goto LABEL_10;
ObjectProperty = PnpGetObjectProperty(
*(&stru_140CF2E80 + 1214),
(INT64)DeviceInstanceId,
1i64,
0i64,
0i64,
(INT64)&DEVPKEY_Device_ClassGuid,
(INT64)&Guid,
(INT64)&Guid_4);
Object = ObjectProperty;
if( ObjectProperty == -1073741275 || ObjectProperty == -1073741772 )
{
Object = 0;
}
else
{
if( ObjectProperty < 0 )
goto LABEL_10;
Object = PnpStringFromGuid(&Guid_4, GuidString, (UINT64)v8);
if( Object < 0 )
goto LABEL_10;
Object = PiDmGetObject(2, GuidString, (PI_DM_OBJECT **)*Info + 1);
if( Object == -1073741772 )
return 0;
}
if( Object < 0 )
{
LABEL_10:
PiPnpRtlFreeInstallerClassChangeInfo(*Info, v7, v8);
*Info = 0i64;
}
return Object;
}Referenced by:
PiPnpRtlCmActionCallback