EmpProviderDeregisterEntry

VOID __stdcall EmpProviderDeregisterEntry(VOID *EntryHandle){
  char *v1; 
  __int64 v3; 
  char **v4; 
  VOID **v5; 
  VOID **v6; 
  _QWORD *i; 

  if( EntryHandle )
  {
    v1 = (char *)EntryHandle + 24;
    v3 = *((_QWORD *)EntryHandle + 3);
    if( *(char **)(v3 + 8) != v1
      || (v4 = (char **)*((_QWORD *)v1 + 1), *v4 != v1)
      || (*v4 = (char *)v3,
          *(_QWORD *)(v3 + 8) = v4,
          v5 = (VOID **)*((_QWORD *)EntryHandle + 5),
          v5[1] != (char *)EntryHandle + 40)
      || (v6 = (VOID **)*((_QWORD *)EntryHandle + 6), *v6 != (char *)EntryHandle + 40) )
    {
      __fastfail(3u);
    }
    *v6 = v5;
    v5[1] = v6;
    for( i = *(_QWORD **)(*(_QWORD *)EntryHandle + 72i64); i; i = (_QWORD *)*i )
      EmpQueueRuleUpdateState((_EMP_RULE_DB_RECORD *)*(i - 1), 0i64);
    ExFreePoolWithTag(EntryHandle, 0x72704D45u);
  }
}

Referenced by:

EmProviderDeregister
EmProviderDeregisterEntry