CTF 플래그

호출 함수의 동작을 제어하는 플래그입니다. SHCreateThreadSHCreateThreadWithHandle에서 사용됩니다. 이러한 함수에서 이러한 값은 SHCT_FLAGS 형식으로 정의됩니다.

상수/값 설명
CTF_INSIST
0x00000001
0x00000001. CreateThread를 사용하여 스레드를 만들려는 시도가 실패하면 이 플래그를 설정하면 pfnThreadProc이 가리키는 함수가 호출 스레드에서 동기적으로 호출됩니다. 이 플래그는 pfnCallbackNULL인 경우에만 사용할 수 있습니다.
CTF_THREAD_REF
0x00000002
0x00000002. pfnThreadProc에서 가리키는 함수에 대한 호출 기간 동안 만들기 스레드에 대한 참조를 유지합니다. 이 참조는 SHSetThreadRef로 설정되어야 합니다.
CTF_PROCESS_REF
0x00000004
0x00000004. pfnThreadProc가 가리키는 함수에 대한 호출 기간 동안 Windows Explorer 프로세스에 대한 참조를 유지합니다. 이 플래그는 Windows Explorer 프로세스가 조기에 닫히지 않도록 해야 하는 셸 확장 처리기에 유용합니다. 이 작업은 백그라운드 스레드에서 작업하거나 파일을 복사하는 등의 작업 중에 유용합니다. 자세한 내용은 SHGetInstanceExplorer를 참조하세요.
CTF_COINIT_STA
0x00000008
0x00000008. pfnCallback이 가리키는 선택적 함수 또는 pfnThreadProc가 가리키는 함수를 호출하기 전에 생성된 스레드에 대해 COM을 STA(단일 스레드 아파트)로 초기화합니다. 이 플래그는 스레드에 대해 COM을 초기화해야 하는 경우에 유용합니다. COM도 자동으로 초기화되지 않습니다.
CTF_COINIT
0x00000008
CTF_COINIT_STA 동일합니다.
CTF_FREELIBANDEXIT
0x00000010
0x00000010. 인터넷 Explorer 6 이상.loadLibrarypfnThreadProc 함수가 포함된 DLL에서 호출되어 언로드되지 않도록 합니다. pfnThreadProc이 반환되면 FreeLibrary를 사용하여 DLL이 해제되어 DLL 참조 수가 감소합니다. DLL이 조기에 언로드되지 않도록 하려면 이 플래그를 전달합니다. 예를 들어 CoFreeUnusedLibraries를 참조하세요. 이 플래그가 전달되면 pfnThreadProc 함수가 DLL에 있어야 합니다. 이 플래그는 Windows Vista 이상에서 암시적입니다.
CTF_REF_COUNTED
0x00000020
0x00000020. 인터넷 Explorer 6 이상. 생성된 스레드에 대한 스레드 참조가 자동으로 만들어지고 SHSetThreadRef를 사용하여 설정됩니다. pfnThreadProc이 반환되면 스레드 참조가 해제되고 스레드 참조의 참조 수가 0으로 떨어질 때까지 메시지가 전송됩니다. 즉, 생성된 스레드에 종속된 스레드가 참조를 해제할 때까지 전송됩니다.
CTF_WAIT_ALLOWCOM
0x00000040
0x00000040. 인터넷 Explorer 6 이상. 호출 스레드는 COM 및 SendMessage 메시지를 대기하고 펌프합니다. 동기 프로시저가 SendMessage 가 있는 Windows 메시지를 호출 스레드에서 호스트되는 창으로 보내려고 하면 메시지가 성공적으로 도착합니다. 동기 프로시저가 COM을 사용하여 호출 스레드에서 호스트되는 STA 개체와 통신하려고 하면 함수 호출이 의도한 개체에 성공적으로 도달합니다. 호출 스레드는 취약성을 다시 나타내기 위해 열려 있습니다. 호출 스레드는 동기 프로시저의 SendMessage 및 COM 사용을 처리할 수 있지만 다른 스레드가 SendMessage 또는 COM을 사용하여 호출 스레드에서 호스트되는 개체와 통신하는 경우 동기 프로시저가 완료되는 동안 처리되는 예기치 않은 메시지 또는 함수 호출일 수 있습니다.
CTF_UNUSED
0x00000080
0x00000080. 인터넷 Explorer 7 이상. 사용되지 않습니다.
CTF_INHERITWOW64
0x00000100
0x00000100. 인터넷 Explorer 7 이상. 새 스레드는 파일 시스템 리렉터에 대한 Windows-on-Windows 64비트(WOW64) 사용 안 함 상태를 상속합니다.
CTF_WAIT_NO_REENTRANCY
0x00000200
0x00000200. Windows Vista 이상. 호출 스레드는 동기 프로시저가 새 스레드에서 실행되도록 기다리는 동안 다른 모든 프로세스를 차단합니다. 동기 프로시저가 SendMessage 가 있는 Windows 메시지를 호출 스레드에서 호스트되는 창으로 보내려고 하면 동기 프로시저가 교착 상태가 됩니다. 동기 프로시저가 COM을 사용하여 호출 스레드에서 호스트되는 STA 개체와 통신하려고 하면 동기 프로시저가 교착 상태가 됩니다. 호출 스레드는 이 플래그를 지정하여 모든 다시 시작 문제로부터 보호됩니다.
CTF_KEYBOARD_LOCALE
0x00000400
0x00000400. Windows 7 이상 생성되는 새 스레드의 원래 스레드에서 키보드 로캘을 사용합니다.
CTF_OLEINITIALIZE
0x00000800
0x00000800. Windows 7 이상 생성된 스레드에 대한 STA(단일 스레드 아파트) 모델을 사용하여 COM을 초기화합니다.
CTF_COINIT_MTA
0x00001000
0x00001000. Windows 7 이상. 만든 스레드에 대한 MTA(다중 스레드 아파트) 모델을 사용하여 COM을 초기화합니다.
CTF_NOADDREFLIB
0x00002000
0x00002000. Windows 7 이상 이 플래그는 기본적으로 CTF_FREELIBANDEXIT 반대입니다. 이렇게 하면 LoadLibrary/FreeLibraryAndExitThread 호출이 방지되어 로더 잠금에 대한 경합이 발생할 수 있습니다. 새 스레드에 원래 스레드 프로시저의 코드가 로드된 상태로 유지되도록 하는 수단이 있는 경우에만 CTF_NOADDREFLIB 사용합니다. COM 개체는 DLL이 로드된 상태를 유지해야 하므로(일반적으로 COM에서 DLL을 언로드) COM 개체의 컨텍스트에서 이 값을 사용하면 안 됩니다.

설명

CTF_WAIT_ 플래그를 지정하지 않으면 호출 스레드가 대기하고 SendMessage 메시지를 보냅니다. 동기 프로시저가 SendMessage 가 있는 Windows 메시지를 호출 스레드에서 호스트되는 창으로 보내려고 하면 메시지가 의도한 창으로 전달됩니다. 동기 프로시저가 COM을 사용하여 호출 스레드에서 호스트되는 STA 개체와 통신하려고 하면 동기 프로시저가 교착 상태가 됩니다. 호출 스레드는 취약성을 다시 나타내기 위해 열려 있습니다. 호출 스레드는 동기 프로시저의 SendMessage 사용을 처리할 수 있지만 다른 스레드가 SendMessage를 사용하여 호출 스레드에서 호스트되는 창과 통신하는 경우 이러한 메시지는 예기치 않은 것일 수 있습니다. 이로 인해 동기 프로시저가 완료되는 동안 처리될 수 있습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트
Windows 2000 Professional, Windows XP, Windows 7 [데스크톱 앱만 해당]
지원되는 최소 서버
Windows 2000 Server[데스크톱 앱만]
헤더
Shlwapi.h