CmEnumSubkeyCallback

PNPCTX_REG_ENUM_KEY_ACTION __stdcall CmEnumSubkeyCallback(
        HPNPCTX *hPnpCtx,
        VOID *hkParent,
        WCHAR *KeyName,
        VOID *Context){
  WCHAR *v8; 
  VOID **PoolWithTag; 
  WCHAR *v10; 
  WCHAR *v11; 
  UINT64 v12; 
  __int64 v13; 
  __int64 v14; 
  NTSTATUS v15; 
  __int64 v16; 
  unsigned int v17; 
  unsigned __int8(__fastcall *v18)(HPNPCTX *, WCHAR *, __int64, _QWORD); 
  unsigned int v19; 
  VOID **v21; 
  UINT64 dwFlags; 
  UINT64 dwFlagsa; 
  VOID *Handle; 
  size_t pcchRemaining[2]; 
  _NTSTRSAFE_PWSTR ppszDestEnd[2]; 
  _UNICODE_STRING DestinationString; 
  UINT8 Present; 

  Handle = 0i64;
  *(_QWORD *)ppszDestEnd = 0i64;
  *(_QWORD *)pcchRemaining = 0i64;
  Present = 0;
  v8 = 0i64;
  DestinationString = 0i64;
  PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x190ui64, 1380994640i64);
  v10 = (WCHAR *)PoolWithTag;
  if( PoolWithTag )
  {
    v11 = (WCHAR *)PoolWithTag;
    v12 = 200i64;
    if( *((_WORD *)Context + 2) )
    {
      LODWORD(dwFlags) = 2304;
      if( RtlStringCchCopyExW(
             (WCHAR *)PoolWithTag,
             0xC8ui64,
             (WCHAR *)Context + 2,
             (WCHAR **)ppszDestEnd,
             (UINT64 *)pcchRemaining,
             dwFlags) < 0 )
        goto LABEL_16;
      v13 = *(_QWORD *)pcchRemaining;
      if( *(_QWORD *)pcchRemaining < 2ui64 )
        goto LABEL_16;
      v14 = *(_QWORD *)ppszDestEnd;
      **(_WORD **)ppszDestEnd = 92;
      v11 = (WCHAR *)(v14 + 2);
      v12 = v13 - 2;
      *v11 = 0;
    }
    v15 = RtlStringCchCopyW(v11, v12, KeyName);
    v16 = 0i64;
    if( v15 >= 0 )
    {
      if( *(_DWORD *)Context < 3u )
      {
        if( hPnpCtx )
          v16 = *((_QWORD *)hPnpCtx + 28);
        if( SysCtxRegOpenKey(v16, hkParent, KeyName, 8u, 0x20019u, &Handle) < 0 )
          goto LABEL_16;
        v21 = ExAllocatePoolWithTag(1ui64, 0x1B8ui64, 1380994640i64);
        v8 = (WCHAR *)v21;
        if( !v21 )
          goto LABEL_16;
        memset(v21, 0i64, 0x1B8u);
        LODWORD(dwFlagsa) = 2304;
        *(_DWORD *)v8 = *(_DWORD *)Context + 1;
        RtlStringCchCopyExW(v8 + 2, 0xC8ui64, v10, 0i64, 0i64, dwFlagsa);
        *((_BYTE *)v8 + 404) = *((_BYTE *)Context + 404);
        *((_QWORD *)v8 + 51) = *((_QWORD *)Context + 51);
        *((_QWORD *)v8 + 52) = *((_QWORD *)Context + 52);
        *((_QWORD *)v8 + 53) = *((_QWORD *)Context + 53);
        *((_DWORD *)v8 + 108) = *((_DWORD *)Context + 108);
        *((_DWORD *)v8 + 109) = *((_DWORD *)Context + 109);
        PnpCtxRegEnumKeyWithCallback((INT64)hPnpCtx, Handle, (INT64)CmEnumSubkeyCallback, (INT64)v8);
        *((_DWORD *)Context + 109) = *((_DWORD *)v8 + 109);
        *((_QWORD *)Context + 53) = *((_QWORD *)v8 + 53);
        *((_DWORD *)Context + 108) = *((_DWORD *)v8 + 108);
        goto LABEL_14;
      }
      if( CmValidateDeviceName(0i64) >= 0 && RtlInitUnicodeStringEx(&DestinationString, v10) >= 0 )
      {
        v17 = DestinationString.MaximumLength >> 1;
        if( !*((_BYTE *)Context + 404) || CmIsDevicePresent(hPnpCtx, v10, &Present) >= 0 && Present )
        {
          v18 = (unsigned __int8(__fastcall *)(HPNPCTX *, WCHAR *, __int64, _QWORD))*((_QWORD *)Context + 51);
          if( !v18 || v18(hPnpCtx, v10, 1i64, *((_QWORD *)Context + 52)) )
          {
            *((_DWORD *)Context + 109) += v17;
            v19 = *((_DWORD *)Context + 108);
            if( v19 > v17 )
            {
              LODWORD(dwFlags) = 2304;
              RtlStringCchCopyExW(*((WCHAR **)Context + 53), v19, v10, 0i64, 0i64, dwFlags);
              *((_QWORD *)Context + 53) += 2i64 * v17;
              *((_DWORD *)Context + 108) -= v17;
LABEL_14:
              if( v8 )
                ExFreePoolWithTag(v8, 0);
            }
          }
        }
      }
    }
LABEL_16:
    ExFreePoolWithTag(v10, 0);
  }
  if( Handle )
    ZwClose((_HANDLE)Handle);
  return 0;
}

Referenced by:

No references.