Freigeben über


CTF-Flags

Flags, die das Verhalten der aufrufenden Funktion steuern. Wird von SHCreateThread und SHCreateThreadWithHandle verwendet. In diesen Funktionen werden diese Werte als vom Typ SHCT_FLAGS definiert.

Konstante/Wert BESCHREIBUNG
CTF_INSIST
0x00000001
0x00000001. Wenn der Versuch, den Thread mit CreateThread zu erstellen, fehlschlägt, führt das Festlegen dieses Flags dazu, dass die Funktion, auf die pfnThreadProc verweist, synchron vom aufrufenden Thread aufgerufen wird. Dieses Flag kann nur verwendet werden, wenn pfnCallbackNULL ist.
CTF_THREAD_REF
0x00000002
0x00000002. Halten Sie einen Verweis auf den erstellenden Thread für die Dauer des Aufrufs der Funktion, auf die pfnThreadProc verweist. Dieser Verweis muss mit SHSetThreadRef festgelegt worden sein.
CTF_PROCESS_REF
0x00000004
0x00000004. Halten Sie einen Verweis auf den Windows-Explorer-Prozess für die Dauer des Aufrufs der Funktion, auf die pfnThreadProc verweist. Dieses Flag ist nützlich für Shell-Erweiterungshandler, die möglicherweise das vorzeitige Schließen des Windows-Explorer-Prozesses hindern müssen. Diese Aktion ist bei Aufgaben nützlich, z. B. beim Arbeiten an einem Hintergrundthread oder beim Kopieren von Dateien. Weitere Informationen finden Sie unter SHGetInstanceExplorer.
CTF_COINIT_STA
0x00000008
0x00000008. Initialisieren Sie COM als Single Threaded Apartment (STA) für den erstellten Thread, bevor Sie entweder die optionale Funktion aufrufen, auf die pfnCallback verweist, oder die Funktion, auf die von pfnThreadProc verwiesen wird. Dieses Flag ist nützlich, wenn COM für einen Thread initialisiert werden muss. COM wird ebenfalls automatisch nicht initialisiert.
CTF_COINIT
0x00000008
Entspricht CTF_COINIT_STA.
CTF_FREELIBANDEXIT
0x00000010
0x00000010. Internet Explorer 6 oder höher.LoadLibrary wird für die DLL aufgerufen, die die pfnThreadProc-Funktion enthält, um zu verhindern, dass sie entladen wird. Nachdem pfnThreadProc zurückgegeben wurde, wird die DLL mit FreeLibrary freigegeben, wodurch die Anzahl der DLL-Verweise verringert wird. Übergeben Sie dieses Flag, um zu verhindern, dass die DLL vorzeitig entladen wird. beispielsweise von CoFreeUnusedLibraries. Beachten Sie, dass sich die pfnThreadProc-Funktion in einer DLL befinden muss, wenn dieses Flag übergeben wird. Dieses Flag ist in Windows Vista und höher implizit.
CTF_REF_COUNTED
0x00000020
0x00000020. Internet Explorer 6 oder höher. Für den erstellten Thread wird automatisch ein Threadverweis erstellt und mit SHSetThreadRef festgelegt. Nach der Rückgabe von pfnThreadProc wird der Threadverweis freigegeben, und Meldungen werden gesendet, bis die Verweisanzahl für den Threadverweis auf Null sinkt, d. h. bis Threads, die vom erstellten Thread abhängig sind, ihre Verweise freigegeben haben.
CTF_WAIT_ALLOWCOM
0x00000040
0x00000040. Internet Explorer 6 oder höher. Der aufrufende Thread wartet und pumpt COM- und SendMessage-Nachrichten . Wenn die synchrone Prozedur versucht, eine Windows-Nachricht mit SendMessage an ein Fenster zu senden, das im aufrufenden Thread gehostet wird, wird die Nachricht erfolgreich empfangen. Wenn die synchrone Prozedur versucht, COM für die Kommunikation mit einem STA-Objekt zu verwenden, das im aufrufenden Thread gehostet wird, erreicht der Funktionsaufruf erfolgreich das beabsichtigte Objekt. Der aufrufende Thread ist offen, um wieder in die Fragilität einzurücken. Der aufrufende Thread kann zwar die Verwendung von SendMessage und COM durch die synchrone Prozedur verarbeiten, aber wenn andere Threads SendMessage oder COM für die Kommunikation mit Objekten verwenden, die im aufrufenden Thread gehostet werden, können dies unerwartete Meldungen oder Funktionsaufrufe sein, die verarbeitet werden, während die synchrone Prozedur abgeschlossen ist.
CTF_UNUSED
0x00000080
0x00000080. Internet Explorer 7 oder höher. Wird nicht verwendet.
CTF_INHERITWOW64
0x00000100
0x00000100. Internet Explorer 7 oder höher. Der neue Thread erbt den 64-Bit-Deaktivierungszustand von Windows-on-Windows (WOW64) für den Dateisystemumleitungsor.
CTF_WAIT_NO_REENTRANCY
0x00000200
0x00000200. Windows Vista oder höher. Der aufrufende Thread blockiert alle anderen Prozesse, während auf die Ausführung der synchronen Prozedur im neuen Thread gewartet wird. Wenn die synchrone Prozedur versucht, eine Windows-Nachricht mit SendMessage an ein Fenster zu senden, das im aufrufenden Thread gehostet wird, führt dies zu einem Deadlock der synchronen Prozedur. Wenn die synchrone Prozedur versucht, COM zum Kommunizieren mit einem STA-Objekt zu verwenden, das im aufrufenden Thread gehostet wird, führt dies auch zu einem Deadlock der synchronen Prozedur. Der aufrufende Thread wird durch Angabe dieses Flags vor allen Erneuteintrittsproblemen geschützt.
CTF_KEYBOARD_LOCALE
0x00000400
0x00000400. Windows 7 oder höher Verwenden Sie das Tastaturgebietsschema aus dem ursprünglichen Thread im neuen Thread, den er erzeugt.
CTF_OLEINITIALIZE
0x00000800
0x00000800. Windows 7 oder höher Initialisieren Sie COM mit dem STA-Modell (Singlethreaded Apartment) für den erstellten Thread.
CTF_COINIT_MTA
0x00001000
0x00001000. Windows 7 und höher. Initialisieren Sie COM mit dem MTA-Modell (Multithreaded Apartment) für den erstellten Thread.
CTF_NOADDREFLIB
0x00002000
0x00002000. Windows 7 oder höher Dieses Flag ist im Wesentlichen das Gegenteil von CTF_FREELIBANDEXIT. Dadurch werden LoadLibrary/FreeLibraryAndExitThread-Aufrufe vermieden, die zu Konflikten für die Ladeprogrammsperre führen können. Verwenden Sie CTF_NOADDREFLIB nur, wenn der neue Thread über Mittel verfügt, um sicherzustellen, dass der Code der ursprünglichen Threadprozedur geladen bleibt. Dieser Wert sollte nicht im Kontext von COM-Objekten verwendet werden, da COM-Objekte sicherstellen müssen, dass die DLL geladen bleibt (normalerweise entlädt COM die DLLs).

Bemerkungen

Wenn kein CTF_WAIT_ Flag angegeben ist, wartet der aufrufende Thread und sendet SendMessage-Nachrichten . Wenn die synchrone Prozedur versucht, eine Windows-Nachricht mit SendMessage an ein Fenster zu senden, das im aufrufenden Thread gehostet wird, wird die Nachricht zum beabsichtigten Fenster gesendet. Wenn die synchrone Prozedur versucht, COM zu verwenden, um mit einem STA-Objekt zu kommunizieren, das im aufrufenden Thread gehostet wird, wird die synchrone Prozedur deadlockt. Der aufrufende Thread ist offen, um fragil zu werden. Während der aufrufende Thread die Verwendung von SendMessage durch die synchrone Prozedur verarbeiten kann, können diese Nachrichten unerwartet sein, wenn andere Threads SendMessage verwenden, um mit einem Fenster zu kommunizieren, das im aufrufenden Thread gehostet wird. Dies kann dazu führen, dass sie verarbeitet werden, während die synchrone Prozedur abgeschlossen ist.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows 2000 Professional, Windows XP, Windows 7 [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows 2000 Server [nur Desktop-Apps]
Header
Shlwapi.h