WmipDeregisterDevice

INT64 __fastcall WmipDeregisterDevice(_DEVICE_OBJECT *DeviceObject){
  unsigned int v2; 
  CHAR *RegEntryByDevice; 
  PVOID *i; 
  v2 = 0;
  KeWaitForSingleObject(&WmipSMMutex, Executive, 0, 0, 0i64);
  RegEntryByDevice = (CHAR *)WmipFindRegEntryByDevice(DeviceObject);
  if( RegEntryByDevice )
  {
    for( i = (PVOID *)WmipRegWorkList; i != &WmipRegWorkList; i = (PVOID *)*i )
    {
      if( i[3] == RegEntryByDevice )
      {
        i[3] = 0i64;
        WmipUnreferenceRegEntry((INT64)RegEntryByDevice);
      }
    }
  }
  KeReleaseMutex(&WmipSMMutex, 0);
  if( RegEntryByDevice )
  {
    WmipUnreferenceRegEntry((INT64)RegEntryByDevice);
    WmipDeregisterRegEntry(RegEntryByDevice);
  }
  else
  {
    return(unsigned int)-1073741811;
  }
  return v2;
}

Referenced by:

IoWMIRegistrationControl