PiDqGetRelativeObjectRegPath
NTSTATUS __stdcall PiDqGetRelativeObjectRegPath(WCHAR *ObjectName, PNP_OBJECT_TYPE ObjectType, WCHAR **RegPath){
VOID **BaseKeyPath;
HPNPCTX *v7;
WCHAR *v8;
int v9;
NTSTATUS DeviceRegKeyPath;
NTSTATUS v11;
int v13;
int v14;
int v15;
int v16;
INT16 v17;
UINT64 Create;
UINT64 BaseKeyLength;
BaseKeyPath = ExAllocatePoolWithTag(1ui64, 0x800ui64, 1483763280i64);
*RegPath = (WCHAR *)BaseKeyPath;
if( !BaseKeyPath )
{
v11 = -1073741670;
goto LABEL_13;
}
v9 = ObjectType - 1;
if( !v9 )
{
LODWORD(BaseKeyLength) = 1024;
DeviceRegKeyPath = CmGetDeviceRegKeyPath(
*(&stru_140CF2E80 + 607),
ObjectName,
CM_KEY_TYPE_DEVICE_INSTANCE,
0i64,
0,
(WCHAR *)BaseKeyPath,
BaseKeyLength,
0i64);
goto LABEL_4;
}
v13 = v9 - 1;
if( !v13 )
{
v17 = 32;
goto LABEL_20;
}
v14 = v13 - 1;
if( !v14 )
{
LODWORD(BaseKeyLength) = 1024;
DeviceRegKeyPath = CmGetDeviceInterfaceRegKeyPath(
v7,
ObjectName,
CM_KEY_TYPE_DEVICE_INTERFACE_INSTANCE,
0i64,
Create,
(WCHAR *)BaseKeyPath,
BaseKeyLength,
0i64);
goto LABEL_4;
}
v15 = v14 - 1;
if( !v15 )
{
v17 = 64;
LABEL_20:
CmGetCommonClassRegKeyPath((INT64)v7, ObjectName, v17, 0i64, Create, (_NTSTRSAFE_PWSTR)BaseKeyPath, 0x400u, 0i64);
LABEL_4:
v11 = DeviceRegKeyPath;
if( DeviceRegKeyPath >= 0 )
return v11;
goto LABEL_13;
}
v16 = v15 - 1;
if( !v16 )
{
LODWORD(BaseKeyLength) = 1024;
DeviceRegKeyPath = CmGetDeviceContainerRegKeyPath(
v7,
ObjectName,
CM_KEY_TYPE_DEVICE_CONTAINER,
v8,
Create,
(WCHAR *)BaseKeyPath,
BaseKeyLength,
0i64);
goto LABEL_4;
}
if( v16 == 1 )
{
CmGetDevicePanelRegKeyPath(
(INT64)v7,
ObjectName,
96i64,
(INT64)v8,
Create,
(_NTSTRSAFE_PWSTR)BaseKeyPath,
0x400u,
0i64);
goto LABEL_4;
}
v11 = -1073741811;
LABEL_13:
if( *RegPath )
{
ExFreePoolWithTag(*RegPath, 0x58706E50u);
*RegPath = 0i64;
}
return v11;
}Referenced by:
PiDqDeleteUserObject
PiDqOpenUserObjectRegKey