IGlobalOptions-Schnittstelle (objidl.h)

Legt globale Eigenschaften der COM-Runtime (Component Object Model) fest und fragt sie ab.

Vererbung

Die IGlobalOptions-Schnittstelle erbt von der IUnknown-Schnittstelle . IGlobalOptions verfügt auch über folgende Arten von Membern:

Methoden

Die IGlobalOptions-Schnittstelle verfügt über diese Methoden.

 
IGlobalOptions::Query

Die IGlobalOptions::Query-Methode (objidl.h) fragt die angegebene globale Eigenschaft der COM-Runtime ab.
IGlobalOptions::Set

Die IGlobalOptions::Set-Methode (objidl.h) legt die angegebene globale Eigenschaft der COM-Runtime fest.

Hinweise

Die folgenden globalen Eigenschaften der COM-Runtime können mit dieser Schnittstelle festgelegt und abgefragt werden.

Eigenschaft Werte
COMGLB_APPID Die AppID für den Prozess. Dies ist die einzige unterstützte Eigenschaft unter Windows XP.
COMGLB_EXCEPTION_HANDLING Mögliche Werte für die COMGLB_EXCEPTION_HANDLING-Eigenschaft sind:
  • COMGLB_EXCEPTION_HANDLE: Dies ist das Standardverhalten. Diese Einstellung bewirkt, dass die COM-Runtime schwerwiegende Ausnahmen verarbeitet.
  • COMGLB_EXCEPTION_DONOT_HANDLE: Dadurch verarbeitet die COM-Runtime keine schwerwiegenden Ausnahmen.
  • COMGLB_EXCEPTION_DONOT_HANDLE_FATAL: Alias für COMGLB_EXCEPTION_DONOT_HANDLE. Unterstützt in Windows 7 und höher.
  • COMGLB_EXCEPTION_DONOT_HANDLE_ANY: Wenn eine festgelegte und eine schwerwiegende Ausnahme in einer COM-Methode auftritt, wird dies dazu führen, dass die COM-Runtime die Ausnahme nicht verarbeitet.

    Wenn festgelegt und eine nicht schwerwiegende Ausnahme in einer COM-Methode auftritt, führt dies dazu, dass die COM-Runtime ein Windows-Fehlerberichterstattung -Dump (WER) erstellt und den Prozess beendet. Unterstützt in Windows 7 und höher.

Standardmäßig verarbeitet die COM-Runtime schwerwiegende Ausnahmen, die bei Methodenaufrufen ausgelöst werden, indem der RPC_E_SERVERFAULT Fehlercode an den Client zurückgegeben wird. Eine Anwendung deaktiviert dieses Verhalten, um die Weitergabe von Ausnahmen an WER zuzulassen, wodurch Anwendungsprozessdumps erstellt und die Anwendung beendet wird. Dies verhindert eine mögliche Datenbeschädigung und ermöglicht es einem Anwendungsanbieter, die Dumps zu debuggen.
Hinweis Auch wenn die Ausnahmebehandlung für die COM-Runtime deaktiviert ist, werden Ausnahmen möglicherweise nicht an WER weitergegeben, wenn im Prozess ein anderer Ausnahmehandler auf Anwendungsebene vorhanden ist, der die Ausnahme verarbeitet.
 
Für neue Anwendungen empfiehlt es sich, die eigenschaft COMGLB_EXCEPTION_HANDLING auf COMGLB_EXCEPTION_DONOT_HANDLE_ANY festzulegen.
COMGLB_RPC_THREADPOOL_SETTING Mögliche Werte für die COMGLB_RPC_THREADPOOL_SETTING-Eigenschaft in der Set-Methode sind:
  • COMGLB_RPC_THREADPOOL_SETTING_PRIVATE_POOL: Weist RPC an, einen dedizierten privaten Threadpool zu verwenden.
Mögliche Werte für die COMGLB_RPC_THREADPOOL_SETTING-Eigenschaft in der Query-Methode sind:
  • COMGLB_RPC_THREADPOOL_SETTING_PRIVATE_POOL: RPC verwendet einen dedizierten privaten Threadpool.
  • COMGLB_RPC_THREADPOOL_SETTING_DEFAULT_POOL: RPC verwendet den Systemstandardthreadpool.
RPC verwendet standardmäßig den Systemthreadpool in Windows 7. Da der Systemthreadpool von mehreren Komponenten im Prozess gemeinsam genutzt wird, verhalten sich COM- und RPC-Vorgänge möglicherweise falsch, wenn der Threadpoolstatus durch eine Komponente beschädigt ist.

Die COMGLB_RPC_THREADPOOL_SETTING-Eigenschaft kann verwendet werden, um das Verhalten des RPC-Threadpools zu ändern. Das Ändern des Standardverhaltens führt zu Leistungseinbußen, da RPC dadurch einen zusätzlichen Thread verwendet. Daher sollte beim Ändern dieser Einstellung Vorsicht walten lassen. Es wird empfohlen, diese Einstellung nur aus Anwendungskompatibilitätsgründen zu ändern.

Hinweis Diese Eigenschaft muss sofort festgelegt werden, nachdem COM im Prozess initialisiert wurde. Wenn diese Eigenschaft nach dem Ausführen von Vorgängen festgelegt wird, die dazu führen, dass COM den RPC-Kanal initialisiert (z. B. Marshalling oder Entmarshalling von Objektverweise), schlägt die Set-Methode fehl.
 
Hinweis Diese Eigenschaft wird nur in Windows 7 und höheren Versionen von Windows unterstützt.
COMGLB_RO_SETTINGS Mögliche Werte für die COMGLB_RO_SETTINGS-Eigenschaft sind:
  • COMGLB_FAST_RUNDOWN: Gibt an, dass Stubs im aktuellen Prozess einem schnellen Stub-Rundownverhalten ausgesetzt sind, was bedeutet, dass Stubs beim Beenden des Clientprozesses heruntergefahren werden, anstatt darauf zu warten, dass normale Bereinigungstimeouts ablaufen.
  • COMGLB_STA_MODALLOOP_REMOVE_TOUCH_MESSAGES: Entfernen Sie Touchnachrichten aus der Nachrichtenwarteschlange in der modalen STA-Schleife.
  • COMGLB_STA_MODALLOOP_SHARED_QUEUE_REMOVE_INPUT_MESSAGES: Eingabenachrichten werden in der modalen STA-Schleife entfernt, wenn die Nachrichtenwarteschlange des Threads angefügt wird.
  • COMGLB_STA_MODALLOOP_SHARED_QUEUE_DONOT_REMOVE_INPUT_MESSAGES: Eingabenachrichten werden nicht in der modalen STA-Schleife entfernt, wenn die Nachrichtenwarteschlange des Threads angefügt ist.
  • COMGLB_STA_MODALLOOP_SHARED_QUEUE_REORDER_POINTER_MESSAGES: Zeigereingabenachrichten werden nicht in der modalen STA-Schleife entfernt, wenn die Nachrichtenwarteschlange des Threads angefügt ist, sondern vorübergehend maskiert, um Deadlocks zu vermeiden, die aus der angefügten Warteschlange entstehen.
  • COMGLB_RESERVED1: Für die zukünftige Verwendung reserviert.
  • COMGLB_RESERVED2: Für zukünftige Verwendung reserviert.
  • COMGLB_RESERVED3: Für die zukünftige Verwendung reserviert.
Hinweis Diese Eigenschaft wird nur in Windows 8 und höheren Versionen von Windows unterstützt.
COMGLB_UNMARSHALING_POLICY Mögliche Werte für die COMGLB_UNMARSHALING_POLICY-Eigenschaft sind:
  • COMGLB_UNMARSHALING_POLICY_NORMAL: Das Entmarshalingverhalten ist identisch mit versionen vor Windows 8. EOAC_NO_CUSTOM_MARSHAL Einschränkungen gelten, wenn dieses Flag in CoInitializeSecurity festgelegt ist. Andernfalls gibt es keine Einschränkungen. Dies ist die Standardeinstellung für Prozesse, die sich nicht im App-Container befinden.
  • COMGLB_UNMARSHALING_POLICY_STRONG: Das Entmarshaling lässt nur eine systemvertrauenswürdige Liste der gehärteten unmarshaler und unmarshaler zu, die von der Funktion CoAllowUnmarshalerCLSID pro Prozess zulässig sind. Dies ist die Standardeinstellung für Prozesse im App-Container.
  • COMGLB_UNMARSHALING_POLICY_HYBRID: Das Aufheben desMarmarshalings von Daten, deren Quelle der App-Container ist, erlaubt nur eine systemvertrauenswürdige Liste von gehärteten Unmarshalern und Unmarshalern, die von der Funktion CoAllowUnmarshalerCLSID pro Prozess zulässig sind. Das Entmarsshalingverhalten für Daten mit einer Quelle, die keinen App-Container ist, ist gegenüber früheren Versionen unverändert.
Hinweis Diese Eigenschaft wird nur in Windows 8 und höheren Versionen von Windows unterstützt.
 

Es ist wichtig, dass Anwendungen, die Abstürze und andere Ausnahmen erkennen, die beim Ausführen eingehender COM-Aufrufe generiert werden können, z. B. ein Aufruf auf einem lokalen Server oder beim Ausführen der IDropTarget::D rop-Methode , COMGLB_EXCEPTION_HANDLING auf COMGLB_EXCEPTION_DONOT_HANDLE festlegen, um das COM-Verhalten beim Abfangen von Ausnahmen zu deaktivieren. Wenn dies nicht geschieht, kann dies zu einem beschädigten Prozesszustand führen, z. B. werden Sperren, die beim Auslösen dieser Ausnahmen gehalten werden, abgebrochen, und der Prozess könnte in einen inkonsistenten Zustand gelangen.

Alle derartigen Anwendungen sollten diesen Code beim Start ausführen.

    IGlobalOptions *pGlobalOptions;
    hr =  CoCreateInstance(CLSID_GlobalOptions, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pGlobalOptions));
    if (SUCCEEDED(hr))
    {
        hr = pGlobalOptions->Set(COMGLB_EXCEPTION_HANDLING, COMGLB_EXCEPTION_DONOT_HANDLE);
        pGlobalOptions->Release();
    }

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile objidl.h (include ObjIdl.h)

Weitere Informationen

IMarshalingStream