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 |
---|---|
|
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. |
|
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. |
|
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. |
|
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. |
|
Entspricht CTF_COINIT_STA. |
|
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. |
|
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. |
|
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. |
|
0x00000080. Internet Explorer 7 oder höher. Wird nicht verwendet. |
|
0x00000100. Internet Explorer 7 oder höher. Der neue Thread erbt den 64-Bit-Deaktivierungszustand von Windows-on-Windows (WOW64) für den Dateisystemumleitungsor. |
|
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. |
|
0x00000400. Windows 7 oder höher Verwenden Sie das Tastaturgebietsschema aus dem ursprünglichen Thread im neuen Thread, den er erzeugt. |
|
0x00000800. Windows 7 oder höher Initialisieren Sie COM mit dem STA-Modell (Singlethreaded Apartment) für den erstellten Thread. |
|
0x00001000.
Windows 7 und höher. Initialisieren Sie COM mit dem MTA-Modell (Multithreaded Apartment) für den erstellten Thread. |
|
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 |
|