DrvDbGetConfigurationSubKeyCallback

PNPCTX_REG_ENUM_KEY_ACTION __stdcall DrvDbGetConfigurationSubKeyCallback(
        HPNPCTX *hPnpCtx,
        VOID *ParentKeyHandle,
        WCHAR *KeyName,
        VOID *Context){
  PNPCTX_REG_ENUM_KEY_ACTION v4; 
  unsigned __int64 v7; 
  NTSTATUS v8; 
  INT64 v9; 
  INT64 v10; 
  NTSTATUS v11; 
  __int64 v12; 
  __int64 v13; 
  __int64 v14; 
  __int64 v15; 
  UINT64 DesiredAccess; 
  INT64 DesiredAccessa; 
  VOID **phkResult; 
  UINT64 RegType; 
  INT64 v21; 
  _HANDLE v22[2]; 
  int Data; 
  __int16 pszDest[12]; 

  v4 = 0;
  *(_QWORD *)v22 = 0i64;
  LODWORD(v21) = 0;
  Data = 0;
  LODWORD(RegType) = 0;
  if( !Context )
    return 3;
  LODWORD(DesiredAccess) = 1;
  v8 = PnpCtxRegOpenKey(hPnpCtx, ParentKeyHandle, KeyName, 0i64, DesiredAccess, (VOID **)v22);
  if( v8 >= 0 )
  {
    HIDWORD(RegType) = 4;
    if( *((_BYTE *)Context + 16) )
    {
      v11 = PnpCtxRegQueryValue(
              (HPNPCTX *)v7,
              *(VOID **)v22,
              (WCHAR *)L"ConfigScope",
              &RegType,
              &v21,
              (UINT64 *)((char *)&RegType + 4));
      v8 = v11;
      if( v11 < 0 || RegType != 0x400000004i64 )
      {
        if( v11 == -1073741772 )
          v8 = 0;
        goto LABEL_30;
      }
    }
    else
    {
      v8 = PnpCtxRegQueryValue(
             (HPNPCTX *)v7,
             *(VOID **)v22,
             (WCHAR *)L"ConfigFlags",
             &RegType,
             &Data,
             (UINT64 *)((char *)&RegType + 4));
      if( v8 < 0 || RegType != 0x400000004i64 )
      {
        if( v8 == -1073741772 )
          v8 = 0;
        goto LABEL_30;
      }
    }
    v12 = -1i64;
    v13 = -1i64;
    do
      ++v13;
    while( KeyName[v13] );
    v14 = *((unsigned int *)Context + 3);
    if( *((_DWORD *)Context + 2) < (unsigned int)(v14 + v13) )
    {
      v8 = -1073741789;
    }
    else
    {
      memmove((VOID *)(*(_QWORD *)Context + 2 * v14), KeyName, 2 * v13);
      LODWORD(v14) = *((_DWORD *)Context + 3);
    }
    v7 = (unsigned int)(v13 + v14);
    *((_DWORD *)Context + 3) = v7;
    if( !*((_BYTE *)Context + 16) )
    {
LABEL_24:
      if( *((_DWORD *)Context + 2) < (unsigned int)(v7 + 1) )
      {
        v8 = -1073741789;
      }
      else
      {
        *(_WORD *)(*(_QWORD *)Context + 2 * v7) = 0;
        v7 = *((unsigned int *)Context + 3);
      }
      *((_DWORD *)Context + 3) = v7 + 1;
      goto LABEL_30;
    }
    if( *((_DWORD *)Context + 2) >= (unsigned int)(v7 + 1) )
    {
      *(_WORD *)(*(_QWORD *)Context + 2 * v7) = 58;
      LODWORD(v7) = *((_DWORD *)Context + 3);
    }
    *((_DWORD *)Context + 3) = v7 + 1;
    v8 = RtlStringCchPrintfW((WCHAR *)pszDest, 9ui64, (WCHAR *)L"%X");
    if( v8 >= 0 )
    {
      do
        ++v12;
      while( pszDest[v12] );
      v15 = *((unsigned int *)Context + 3);
      if( *((_DWORD *)Context + 2) < (unsigned int)(v15 + v12) )
      {
        v8 = -1073741789;
      }
      else
      {
        memmove((VOID *)(*(_QWORD *)Context + 2 * v15), pszDest, 2 * v12);
        LODWORD(v15) = *((_DWORD *)Context + 3);
      }
      v7 = (unsigned int)(v12 + v15);
      *((_DWORD *)Context + 3) = v7;
      goto LABEL_24;
    }
  }
LABEL_30:
  if( *(_QWORD *)v22 )
    PnpCtxRegCloseKey((HPNPCTX *)v7, *(VOID **)v22, v9, v10, DesiredAccessa, (INT64)phkResult, RegType, v21);
  if( v8 < 0 )
  {
    *((_DWORD *)Context + 5) = v8;
    if( v8 != -1073741789 )
      return 3;
  }
  return v4;
}

Referenced by:

No references.