CmOpenCommonClassRegKey
NTSTATUS __stdcall CmOpenCommonClassRegKey(
HPNPCTX *hPnpCtx,
WCHAR *ClassGuid,
_CM_KEY_TYPE CmKeyTypeFlags,
UINT64 HardwareProfileId,
UINT64 DesiredAccess,
UINT8 Create,
VOID **ClassKey,
UINT64 *Disposition){
unsigned int v10;
unsigned int v11;
__int64(__fastcall *v12)(HPNPCTX *, WCHAR *, _QWORD, __int64, int, _QWORD *);
int v13;
NTSTATUS v14;
NTSTATUS v15;
int v17;
UINT64 v18;
_QWORD v20[12];
v10 = HardwareProfileId;
memset(v20, 0i64, 0x58u);
if( (unsigned __int8)CmKeyTypeFlags == CM_KEY_TYPE_DEVICE_INSTALLER_CLASS )
{
v11 = 2;
}
else
{
if( (unsigned __int8)CmKeyTypeFlags != CM_KEY_TYPE_DEVICE_INTERFACE_CLASS )
{
v15 = -1073741811;
goto LABEL_7;
}
v11 = 4;
}
v12 = (__int64(__fastcall *)(HPNPCTX *, WCHAR *, _QWORD, __int64, int, _QWORD *))*((_QWORD *)hPnpCtx + 63);
LODWORD(v20[3]) = DesiredAccess;
v20[4] = ClassKey;
BYTE4(v20[3]) = Create;
v20[2] = __PAIR64__(v10, CmKeyTypeFlags);
if( v12 )
{
v13 = v12(hPnpCtx, ClassGuid, v11, 11i64, 1, v20);
if( v13 == -1073741822 )
{
v12 = 0i64;
}
else
{
if( v13 == -1073741536 )
goto LABEL_17;
if( v13 )
return -1073741595;
}
}
LODWORD(v18) = v20[3];
v14 = CmOpenCommonClassRegKeyWorker(
hPnpCtx,
ClassGuid,
v20[2],
HIDWORD(v20[2]),
v18,
BYTE4(v20[3]),
(VOID **)v20[4],
&v20[5]);
v15 = v14;
if( !v12 )
goto LABEL_7;
LODWORD(v20[0]) = v14;
v17 = v12(hPnpCtx, ClassGuid, v11, 11i64, 2, v20);
if( v17 == -1073741822 )
goto LABEL_7;
if( v17 == -1073741536 )
{
LABEL_17:
v15 = v20[0];
goto LABEL_7;
}
if( v17 )
return -1073741595;
LABEL_7:
if( v15 >= 0 && Disposition )
*(_DWORD *)Disposition = v20[5];
return v15;
}Referenced by:
CmOpenInstallerClassRegKey
CmOpenInterfaceClassRegKey