CmRemovePanelDeviceWorker
__int64 __fastcall CmRemovePanelDeviceWorker(__int64 a1, const WCHAR *a2, const WCHAR *a3, _BYTE *a4){
int CachedContextBaseKey;
__int64 v9;
__int64 v10;
__int64 v11;
HANDLE v12;
__int64 v13;
__int64 v14;
HANDLE KeyHandle;
HANDLE Handle;
struct _UNICODE_STRING DestinationString;
int v19;
*(_QWORD *)&DestinationString.Length = 0i64;
Handle = 0i64;
KeyHandle = 0i64;
v19 = 0;
*a4 = 0;
CachedContextBaseKey = PnpCtxGetCachedContextBaseKey(a1, 11, (__int64 *)&DestinationString);
if( CachedContextBaseKey >= 0 )
{
v9 = a1 ? *(_QWORD *)(a1 + 224) : 0i64;
CachedContextBaseKey = SysCtxRegOpenKey(v9, *(char **)&DestinationString.Length, a2, 0, 1u, &Handle);
if( CachedContextBaseKey >= 0 )
{
v10 = a1 ? *(_QWORD *)(a1 + 224) : 0i64;
CachedContextBaseKey = SysCtxRegOpenKey(v10, (char *)Handle, L"Devices", 0, 3u, &KeyHandle);
if( CachedContextBaseKey >= 0 )
{
DestinationString = 0i64;
CachedContextBaseKey = RtlInitUnicodeStringEx(&DestinationString, (WCHAR *)a3);
if( CachedContextBaseKey >= 0 )
CachedContextBaseKey = ZwDeleteValueKey(KeyHandle, &DestinationString);
if( CachedContextBaseKey == -1073741772 || CachedContextBaseKey == -1073741444 || CachedContextBaseKey >= 0 )
{
v12 = KeyHandle;
*a4 = 1;
CachedContextBaseKey = PnpCtxRegQueryInfoKey(v11, v12, 0i64, 0i64, &v19, 0i64, 0i64);
if( CachedContextBaseKey >= 0 )
{
if( !v19 )
{
if( a1 && (v13 = *(_QWORD *)(a1 + 224)) != 0 )
v14 = *(_QWORD *)(v13 + 8);
else
v14 = 0i64;
RegRtlDeleteTreeInternal((char *)KeyHandle, 0i64, v14, 0);
}
PnpObjectRaisePropertyChangeEvent(a1, (__int64)a3, 1i64, 0i64, 0i64, (__int64)&DEVPKEY_Device_PanelId);
}
}
}
}
}
if( CachedContextBaseKey == -1073741772 || CachedContextBaseKey == -1073741444 )
CachedContextBaseKey = 0;
if( KeyHandle )
ZwClose(KeyHandle);
if( Handle )
ZwClose(Handle);
return(unsigned int)CachedContextBaseKey;
}Referenced by:
CmRemovePanelDevice