CmClassSubkeyCallback

PNPCTX_REG_ENUM_KEY_ACTION __stdcall CmClassSubkeyCallback(
        HPNPCTX *hPnpCtx,
        VOID *hkParent,
        WCHAR *KeyName,
        VOID *Context){
  VOID *v4; 
  unsigned __int8(__fastcall *v8)(HPNPCTX *, WCHAR *, _QWORD, _QWORD); 
  unsigned int v9; 
  unsigned int v10; 
  __int64 v12; 
  UINT64 dwFlags; 
  _UNICODE_STRING DestinationString; 
  VOID *Handle; 

  Handle = 0i64;
  v4 = (VOID *)*((_QWORD *)Context + 1);
  DestinationString = 0i64;
  if( v4
    && (hPnpCtx ? (v12 = *((_QWORD *)hPnpCtx + 28)) : (v12 = 0i64),
        SysCtxRegOpenKey(v12, v4, KeyName, 0, 0x20019u, &Handle) >= 0) )
  {
    ZwClose((_HANDLE)Handle);
  }
  else if( ((unsigned __int8)*(_DWORD *)Context == 2 || *(_DWORD *)Context == 4)
         && CmValidateInstallerClassName((WCHAR *)hPnpCtx) >= 0
         && RtlInitUnicodeStringEx(&DestinationString, KeyName) >= 0 )
  {
    v8 = (unsigned __int8(__fastcall *)(HPNPCTX *, WCHAR *, _QWORD, _QWORD))*((_QWORD *)Context + 2);
    v9 = DestinationString.MaximumLength >> 1;
    if( !v8 || v8(hPnpCtx, KeyName, *(unsigned int *)Context, *((_QWORD *)Context + 3)) )
    {
      *((_DWORD *)Context + 11) += v9;
      v10 = *((_DWORD *)Context + 10);
      if( v10 > v9 )
      {
        LODWORD(dwFlags) = 2304;
        RtlStringCchCopyExW(*((WCHAR **)Context + 4), v10, KeyName, 0i64, 0i64, dwFlags);
        *((_QWORD *)Context + 4) += 2i64 * v9;
        *((_DWORD *)Context + 10) -= v9;
      }
    }
  }
  return 0;
}

Referenced by:

No references.