Флаги CTF
Флаги, управляющие поведением вызывающей функции. Используется SHCreateThread и SHCreateThreadWithHandle. В этих функциях эти значения определяются как имеющие тип SHCT_FLAGS.
Констант/значение | Описание |
---|---|
|
0x00000001. Если попытка создать поток с помощью CreateThread завершается сбоем, установка этого флага приведет к синхронному вызову функции, на которую указывает pfnThreadProc , из вызывающего потока. Этот флаг можно использовать, только если pfnCallback имеет значение NULL. |
|
0x00000002. Удерживайте ссылку на создаваемый поток на протяжении всего вызова функции, на которую указывает pfnThreadProc. Для этой ссылки должен быть задан параметр SHSetThreadRef. |
|
0x00000004. Удерживайте ссылку на процесс Обозреватель Windows в течение всего времени вызова функции, на которую указывает pfnThreadProc. Этот флаг полезен для обработчиков расширений оболочки, которым может потребоваться не допустить преждевременного закрытия процесса Обозреватель Windows. Это действие полезно при выполнении таких задач, как работа в фоновом потоке или копирование файлов. Дополнительные сведения см. в разделе SHGetInstanceExplorer. |
|
0x00000008. Инициализация COM в качестве однопоточного объекта (STA) для созданного потока перед вызовом необязательной функции, на которую указывает pfnCallback , или функции, на которую указывает pfnThreadProc. Этот флаг полезен, если для потока необходимо инициализировать COM. COM также не инициализируется автоматически. |
|
Эквивалентно CTF_COINIT_STA. |
|
0x00000010.
Internet Обозреватель 6 или более поздней версии.LoadLibrary будет вызываться в библиотеке DLL, содержащей функцию pfnThreadProc, чтобы предотвратить ее выгрузку. После возврата pfnThreadProc библиотека DLL будет освобождена с помощью FreeLibrary, тем самым уменьшая число ссылок dll. Передайте этот флаг, чтобы предотвратить преждевременную выгрузку библиотеки DLL; например, coFreeUnusedLibraries. Обратите внимание, что при передаче этого флага функция pfnThreadProc должна находиться в библиотеке DLL. Этот флаг неявный в Windows Vista и более поздних версиях. |
|
0x00000020. Internet Обозреватель 6 или более поздней версии. Ссылка на поток будет автоматически создана для созданного потока и задана с помощью SHSetThreadRef. После возврата pfnThreadProc ссылка на поток освобождается и сообщения отправляются до тех пор, пока количество ссылок на ссылку на поток не падает до нуля, то есть до тех пор, пока потоки, зависящие от созданного потока, не разблокируют свои ссылки. |
|
0x00000040. Internet Обозреватель 6 или более поздней версии. Вызывающий поток ожидает и перекачивает сообщения COM и SendMessage . Если синхронная процедура пытается отправить сообщение Windows с помощью SendMessage в окно, размещенное в вызывающем потоке, сообщение будет доставлено успешно. Если синхронная процедура пытается использовать COM для взаимодействия с объектом STA, размещенным в вызывающем потоке, вызов функции будет успешно достигнут целевого объекта. Вызывающий поток открыт для повторного входа хрупкости. Хотя вызывающий поток может обрабатывать синхронной процедурой использование SendMessage и COM, если другие потоки используют SendMessage или COM для связи с объектами, размещенными в вызывающем потоке, это могут быть непредвиденные сообщения или вызовы функций, которые обрабатываются во время завершения синхронной процедуры. |
|
0x00000080. Internet Обозреватель 7 или более поздней версии. Не используется. |
|
0x00000100. Internet Обозреватель 7 или более поздней версии. Новый поток наследует состояние отключения windows-on-Windows 64-bit (WOW64) для перенаправителя файловой системы. |
|
0x00000200. Windows Vista или более поздней версии. Вызывающий поток блокирует все остальные процессы, ожидая выполнения синхронной процедуры в новом потоке. Если синхронная процедура пытается отправить сообщение Windows с sendMessage в окно, размещенное в вызывающем потоке, это приводит к взаимоблокировке синхронной процедуры. Если синхронная процедура пытается использовать COM для взаимодействия с объектом STA, размещенным в вызывающем потоке, это также приводит к взаимоблокировке синхронной процедуры. Вызывающий поток защищен от всех проблем повторного входа, указав этот флаг. |
|
0x00000400. Windows 7 или более поздней версии. Используйте языковой стандарт клавиатуры из исходного потока в новом потоке, который он создает. |
|
0x00000800. Windows 7 или более поздней версии. Инициализируйте COM с помощью модели однопотоковых квартир (STA) для созданного потока. |
|
0x00001000.
Windows 7 и более поздних версий. Инициализируйте COM с помощью модели многопоточных квартир (MTA) для созданного потока. |
|
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 [только классические приложения] |
Заголовок |
|