I have a shell extension dll that adds a menu item in the context menu. But it can only run after I add the value ThreadingModel=Apartment in the InProcServer32 key of registry. Without the value, the dll cannot be loaded. I wonder if there is a requirement for the threading model of a shell extension dll. Which apartment does the thread instantiating the COM object in the shell extension dll belong to?