Compartilhar via


Sinalizadores CTF

Sinalizadores que controlam o comportamento da função de chamada. Usado por SHCreateThread e SHCreateThreadWithHandle. Nessas funções, esses valores são definidos como sendo do tipo SHCT_FLAGS.

Constante/valor Descrição
CTF_INSIST
0x00000001
0x00000001. Se a tentativa de criar o thread com CreateThread falhar, a definição desse sinalizador fará com que a função apontada por pfnThreadProc seja chamada de forma síncrona do thread de chamada. Esse sinalizador só poderá ser usado se pfnCallback for NULL.
CTF_THREAD_REF
0x00000002
0x00000002. Mantenha uma referência ao thread de criação durante a chamada para a função apontada por pfnThreadProc. Essa referência deve ter sido definida com SHSetThreadRef.
CTF_PROCESS_REF
0x00000004
0x00000004. Mantenha uma referência ao processo de Explorer do Windows durante a chamada para a função apontada por pfnThreadProc. Esse sinalizador é útil para manipuladores de extensão do Shell, o que pode precisar impedir que o processo de Explorer do Windows seja fechado prematuramente. Essa ação é útil durante tarefas como trabalhar em um thread em segundo plano ou copiar arquivos. Para obter mais informações, consulte SHGetInstanceExplorer.
CTF_COINIT_STA
0x00000008
0x00000008. Inicialize COM como um STA (Single Threaded Apartment) para o thread criado antes de chamar a função opcional apontada por pfnCallback ou a função apontada por pfnThreadProc. Esse sinalizador é útil quando o COM precisa ser inicializado para um thread. O COM também não será inicializado automaticamente.
CTF_COINIT
0x00000008
Equivalente a CTF_COINIT_STA.
CTF_FREELIBANDEXIT
0x00000010
0x00000010. Internet Explorer 6 ou posterior.LoadLibrary será chamado na DLL que contém a função pfnThreadProc para evitar que ela seja descarregada. Depois que pfnThreadProc retornar, a DLL será liberada com FreeLibrary, diminuindo assim a contagem de referência de DLL. Passe esse sinalizador para impedir que a DLL seja descarregada prematuramente; por exemplo, por CoFreeUnusedLibraries. Observe que, se esse sinalizador for passado, a função pfnThreadProc deverá residir em uma DLL. Esse sinalizador está implícito no Windows Vista e posterior.
CTF_REF_COUNTED
0x00000020
0x00000020. Internet Explorer 6 ou posterior. Uma referência de thread será criada automaticamente para o thread criado e definido com SHSetThreadRef. Depois que o pfnThreadProc retorna, a referência de thread é liberada e as mensagens são enviadas até que a contagem de referência na referência de thread caia para zero, ou seja, até que os threads dependentes do thread criado tenham liberado suas referências.
CTF_WAIT_ALLOWCOM
0x00000040
0x00000040. Internet Explorer 6 ou posterior. O thread de chamada aguarda e bombeia mensagens COM e SendMessage . Se o procedimento síncrono tentar enviar uma mensagem do Windows com SendMessage para uma janela hospedada no thread de chamada, a mensagem chegará com êxito. Se o procedimento síncrono tentar usar COM para se comunicar com um objeto STA hospedado no thread de chamada, a chamada de função alcançará com êxito o objeto pretendido. O thread de chamada está aberto para entrar novamente com a fragilidade. Embora o thread de chamada possa lidar com o uso do procedimento síncrono de SendMessage e COM, se outros threads estiverem usando SendMessage ou COM para se comunicar com objetos hospedados no thread de chamada, isso poderá ser mensagens inesperadas ou chamadas de função que são processadas enquanto o procedimento síncrono está sendo concluído.
CTF_UNUSED
0x00000080
0x00000080. Internet Explorer 7 ou posterior. Não usado.
CTF_INHERITWOW64
0x00000100
0x00000100. Internet Explorer 7 ou posterior. O novo thread herda o estado de desabilitação wow64 (Windows-on-Windows de 64 bits) para o redirecionador do sistema de arquivos.
CTF_WAIT_NO_REENTRANCY
0x00000200
0x00000200. Windows Vista ou posterior. O thread de chamada bloqueia todos os outros processos enquanto aguarda o procedimento síncrono ser executado no novo thread. Se o procedimento síncrono tentar enviar uma mensagem do Windows com SendMessage para uma janela hospedada no thread de chamada, isso fará com que o procedimento síncrono seja deadlock. Se o procedimento síncrono tentar usar COM para falar com um objeto STA hospedado no thread de chamada, isso também fará com que o procedimento síncrono seja deadlock. O thread de chamada é protegido contra todas as preocupações de reentrançamento especificando esse sinalizador.
CTF_KEYBOARD_LOCALE
0x00000400
0x00000400. Windows 7 ou posterior. Use a localidade do teclado do thread original no novo thread que ele gera.
CTF_OLEINITIALIZE
0x00000800
0x00000800. Windows 7 ou posterior. Inicialize COM com o modelo STA (single-threaded apartment) para o thread criado.
CTF_COINIT_MTA
0x00001000
0x00001000. Windows 7 e posterior. Inicialize COM com o modelo MTA (multithreaded apartment) para o thread criado.
CTF_NOADDREFLIB
0x00002000
0x00002000. Windows 7 ou posterior. Esse sinalizador é essencialmente o oposto de CTF_FREELIBANDEXIT. Isso evita chamadasFreeLibraryAndExitThread do LoadLibrary/ que podem resultar em contenção para o bloqueio do carregador. Use CTF_NOADDREFLIB somente quando o novo thread tiver meios para garantir que o código do procedimento de thread original permaneça carregado. Esse valor não deve ser usado no contexto de objetos COM, pois os objetos COM devem garantir que a DLL permaneça carregada (normalmente, COM descarrega as DLLs).

Comentários

Se nenhum sinalizador de CTF_WAIT_ for especificado, o thread de chamada aguardará e enviará mensagens SendMessage . Se o procedimento síncrono tentar enviar uma mensagem do Windows com SendMessage para uma janela hospedada no thread de chamada, a mensagem chegará à janela pretendida. Se o procedimento síncrono tentar usar COM para se comunicar com um objeto STA hospedado no thread de chamada, o procedimento síncrono fará deadlock. O thread de chamada está aberto para entrar novamente na fragilidade. Embora o thread de chamada possa lidar com o uso de SendMessage pelo procedimento síncrono, se outros threads usarem SendMessage para se comunicar com uma janela hospedada no thread de chamada, essas mensagens poderão ser inesperadas. Isso pode fazer com que eles sejam processados enquanto o procedimento síncrono está sendo concluído.

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows 2000 Professional, Windows XP, Windows 7 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte
Windows 2000 Server [somente aplicativos da área de trabalho]
Cabeçalho
Shlwapi.h