WmipDeregisterDevice

NTSTATUS __stdcall WmipDeregisterDevice(_DEVICE_OBJECT *DeviceObject){
  NTSTATUS v2; 
  _REGENTRY *RegEntryByDevice; 
  __int64 **i; 

  v2 = 0;
  KeWaitForSingleObject((UINT64)&ExBootDevicesRemovedEvent + 3072, 0, 0, 0, 0i64);
  RegEntryByDevice = WmipFindRegEntryByDevice(DeviceObject);
  if( RegEntryByDevice )
  {
    for( i = (__int64 **)*(&stru_140C00F40 + 942); i != (__int64 **)((char *)&stru_140C00F40 + 7536); i = (__int64 **)*i )
    {
      if( i[3] == (__int64 *)RegEntryByDevice )
      {
        i[3] = 0i64;
        WmipUnreferenceRegEntry(RegEntryByDevice);
      }
    }
  }
  KeReleaseMutex((_KMUTANT *)((char *)&ExBootDevicesRemovedEvent + 3072), 0);
  if( !RegEntryByDevice )
    return -1073741811;
  WmipUnreferenceRegEntry(RegEntryByDevice);
  WmipDeregisterRegEntry(RegEntryByDevice);
  return v2;
}

Referenced by:

IoWMIRegistrationControl