Поделиться через


Флаги CTF

Флаги, управляющие поведением вызывающей функции. Используется SHCreateThread и SHCreateThreadWithHandle. В этих функциях эти значения определяются как имеющие тип SHCT_FLAGS.

Констант/значение Описание
CTF_INSIST
0x00000001
0x00000001. Если попытка создать поток с помощью CreateThread завершается сбоем, установка этого флага приведет к синхронному вызову функции, на которую указывает pfnThreadProc , из вызывающего потока. Этот флаг можно использовать, только если pfnCallback имеет значение NULL.
CTF_THREAD_REF
0x00000002
0x00000002. Удерживайте ссылку на создаваемый поток на протяжении всего вызова функции, на которую указывает pfnThreadProc. Для этой ссылки должен быть задан параметр SHSetThreadRef.
CTF_PROCESS_REF
0x00000004
0x00000004. Удерживайте ссылку на процесс Обозреватель Windows в течение всего времени вызова функции, на которую указывает pfnThreadProc. Этот флаг полезен для обработчиков расширений оболочки, которым может потребоваться не допустить преждевременного закрытия процесса Обозреватель Windows. Это действие полезно при выполнении таких задач, как работа в фоновом потоке или копирование файлов. Дополнительные сведения см. в разделе SHGetInstanceExplorer.
CTF_COINIT_STA
0x00000008
0x00000008. Инициализация COM в качестве однопоточного объекта (STA) для созданного потока перед вызовом необязательной функции, на которую указывает pfnCallback , или функции, на которую указывает pfnThreadProc. Этот флаг полезен, если для потока необходимо инициализировать COM. COM также не инициализируется автоматически.
CTF_COINIT
0x00000008
Эквивалентно CTF_COINIT_STA.
CTF_FREELIBANDEXIT
0x00000010
0x00000010. Internet Обозреватель 6 или более поздней версии.LoadLibrary будет вызываться в библиотеке DLL, содержащей функцию pfnThreadProc, чтобы предотвратить ее выгрузку. После возврата pfnThreadProc библиотека DLL будет освобождена с помощью FreeLibrary, тем самым уменьшая число ссылок dll. Передайте этот флаг, чтобы предотвратить преждевременную выгрузку библиотеки DLL; например, coFreeUnusedLibraries. Обратите внимание, что при передаче этого флага функция pfnThreadProc должна находиться в библиотеке DLL. Этот флаг неявный в Windows Vista и более поздних версиях.
CTF_REF_COUNTED
0x00000020
0x00000020. Internet Обозреватель 6 или более поздней версии. Ссылка на поток будет автоматически создана для созданного потока и задана с помощью SHSetThreadRef. После возврата pfnThreadProc ссылка на поток освобождается и сообщения отправляются до тех пор, пока количество ссылок на ссылку на поток не падает до нуля, то есть до тех пор, пока потоки, зависящие от созданного потока, не разблокируют свои ссылки.
CTF_WAIT_ALLOWCOM
0x00000040
0x00000040. Internet Обозреватель 6 или более поздней версии. Вызывающий поток ожидает и перекачивает сообщения COM и SendMessage . Если синхронная процедура пытается отправить сообщение Windows с помощью SendMessage в окно, размещенное в вызывающем потоке, сообщение будет доставлено успешно. Если синхронная процедура пытается использовать COM для взаимодействия с объектом STA, размещенным в вызывающем потоке, вызов функции будет успешно достигнут целевого объекта. Вызывающий поток открыт для повторного входа хрупкости. Хотя вызывающий поток может обрабатывать синхронной процедурой использование SendMessage и COM, если другие потоки используют SendMessage или COM для связи с объектами, размещенными в вызывающем потоке, это могут быть непредвиденные сообщения или вызовы функций, которые обрабатываются во время завершения синхронной процедуры.
CTF_UNUSED
0x00000080
0x00000080. Internet Обозреватель 7 или более поздней версии. Не используется.
CTF_INHERITWOW64
0x00000100
0x00000100. Internet Обозреватель 7 или более поздней версии. Новый поток наследует состояние отключения windows-on-Windows 64-bit (WOW64) для перенаправителя файловой системы.
CTF_WAIT_NO_REENTRANCY
0x00000200
0x00000200. Windows Vista или более поздней версии. Вызывающий поток блокирует все остальные процессы, ожидая выполнения синхронной процедуры в новом потоке. Если синхронная процедура пытается отправить сообщение Windows с sendMessage в окно, размещенное в вызывающем потоке, это приводит к взаимоблокировке синхронной процедуры. Если синхронная процедура пытается использовать COM для взаимодействия с объектом STA, размещенным в вызывающем потоке, это также приводит к взаимоблокировке синхронной процедуры. Вызывающий поток защищен от всех проблем повторного входа, указав этот флаг.
CTF_KEYBOARD_LOCALE
0x00000400
0x00000400. Windows 7 или более поздней версии. Используйте языковой стандарт клавиатуры из исходного потока в новом потоке, который он создает.
CTF_OLEINITIALIZE
0x00000800
0x00000800. Windows 7 или более поздней версии. Инициализируйте COM с помощью модели однопотоковых квартир (STA) для созданного потока.
CTF_COINIT_MTA
0x00001000
0x00001000. Windows 7 и более поздних версий. Инициализируйте COM с помощью модели многопоточных квартир (MTA) для созданного потока.
CTF_NOADDREFLIB
0x00002000
0x00002000. Windows 7 или более поздней версии. Этот флаг, по сути, является противоположностью CTF_FREELIBANDEXIT. Это позволяет избежать вызовов LoadLibrary/FreeLibraryAndExitThread , которые могут привести к состязанию за блокировку загрузчика. Используйте CTF_NOADDREFLIB только в том случае, если новый поток имеет средства для обеспечения того, чтобы код процедуры исходного потока оставался загруженным. Это значение не следует использовать в контексте COM-объектов, так как COM-объекты должны гарантировать, что библиотека DLL остается загруженной (обычно COM выгружает библиотеки DLL).

Комментарии

Если флаг CTF_WAIT_ не указан, вызывающий поток будет ожидать и отправлять сообщения SendMessage . Если синхронная процедура пытается отправить сообщение Windows с помощью SendMessage в окно, размещенное в вызывающем потоке, сообщение будет отправлено в нужное окно. Если синхронная процедура пытается использовать COM для взаимодействия с объектом STA, размещенным в вызывающем потоке, синхронная процедура будет взаимоблокирована. Вызывающий поток открыт для повторного входа хрупкости. Хотя вызывающий поток может обрабатывать использование SendMessage синхронной процедурой, если другие потоки используют SendMessage для связи с окном, размещенным в вызывающем потоке, эти сообщения могут быть неожиданными. Это может привести к их обработке во время завершения синхронной процедуры.

Требования

Требование Значение
Минимальная версия клиента
Windows 2000 Professional, Windows XP, Windows 7 [только классические приложения]
Минимальная версия сервера
Windows 2000 Server [только классические приложения]
Заголовок
Shlwapi.h