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 |
---|---|
|
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. |
|
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. |
|
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. |
|
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. |
|
Equivalente a CTF_COINIT_STA. |
|
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. |
|
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. |
|
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. |
|
0x00000080. Internet Explorer 7 ou posterior. Não usado. |
|
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. |
|
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. |
|
0x00000400. Windows 7 ou posterior. Use a localidade do teclado do thread original no novo thread que ele gera. |
|
0x00000800. Windows 7 ou posterior. Inicialize COM com o modelo STA (single-threaded apartment) para o thread criado. |
|
0x00001000.
Windows 7 e posterior. Inicialize COM com o modelo MTA (multithreaded apartment) para o thread criado. |
|
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 |
|