CmDeleteDeviceMappedPropertyFromInstanceKeyRegValue
NTSTATUS __stdcall CmDeleteDeviceMappedPropertyFromInstanceKeyRegValue(
HPNPCTX *hPnpCtx,
WCHAR *DeviceInstanceId,
VOID *ObjectBaseKey,
_DEVPROPKEY *PropertyKey){
VOID *v4;
DEVPROPKEY **v5;
int v6;
unsigned int i;
DEVPROPKEY *v11;
DEVPROPKEY **v12;
__int64 v13;
WCHAR *v14;
NTSTATUS inited;
_OBJECT_TYPE *v16;
UINT64 DesiredAccess;
VOID *Handle;
_UNICODE_STRING DestinationString;
v4 = 0i64;
v5 = &off_140983E70;
v6 = 0;
Handle = 0i64;
for( i = 0; i < 2; ++i )
{
v11 = *v5;
v12 = v5;
if( PropertyKey->pid == (*v5)->pid )
{
v13 = *(_QWORD *)&PropertyKey->fmtid.Data1 - *(_QWORD *)&v11->fmtid.Data1;
if( *(_QWORD *)&PropertyKey->fmtid.Data1 == *(_QWORD *)&v11->fmtid.Data1 )
v13 = *(_QWORD *)PropertyKey->fmtid.Data4 - *(_QWORD *)v11->fmtid.Data4;
if( !v13 )
break;
}
v12 = 0i64;
v5 += 4;
}
if( !v12 )
return -1073741264;
if( ObjectBaseKey )
goto LABEL_8;
LODWORD(DesiredAccess) = 2;
v6 = CmOpenDeviceRegKey(hPnpCtx, DeviceInstanceId, CM_KEY_TYPE_DEVICE_INSTANCE, 0i64, DesiredAccess, 0, &Handle, 0i64);
if( v6 >= 0 )
{
v4 = Handle;
LABEL_8:
v14 = (WCHAR *)v12[2];
DestinationString = 0i64;
if( ObjectBaseKey )
v4 = ObjectBaseKey;
inited = RtlInitUnicodeStringEx(&DestinationString, v14);
if( inited >= 0 )
inited = ZwDeleteValueKey(v4, &DestinationString, v16);
if( inited != -1073741772 && inited != -1073741444 && inited < 0 )
v6 = inited;
}
if( Handle )
ZwClose((_HANDLE)Handle);
return v6;
}Referenced by:
CmSetDeviceMappedProperty