GetModuleFileNameEx에는 코드가 작동하지 않는 이유를 설명하는 스레드 핸들이 아닌 프로세스 핸들이 필요합니다. 프로세스 핸들을 얻는 두 가지 주요 방법이 있습니다. 첫 번째는 CreateProcess에서 가져온 것이지만, 프로세스를 시작하지 않는 한 좋지 않습니다. 그렇게하는 경우, 처음에는 GetModuleFileNameEx가 필요하지 않습니다.
프로세스 핸들을 얻는 두 번째 방법은 OpenProcess에서 가져온 것입니다. 프로세스 ID가 필요합니다. 스레드 핸들을 사용하는 GetProcessIdOfThread를 사용하여 스레드의 프로세스 ID를 가져올 수 있습니다. NtOpenThread를 쓰레드 ID에서 쓰레드 핸들을 얻는 방법은 이미 알고 있습니다. 보통은 OpenThread라고합니다.
Windows 버전이 GetProcessIdOfThread를 지원하지 않으면 Thread32First 및 Thread32Next를 사용하여 다른 경로로 이동할 수 있습니다. CreateToolhelp32Snapshot을 호출 한 다음 스레드 목록을 살펴보십시오. th32ThreadID가 관심있는 스레드 ID와 같은 항목을 찾습니다. 찾으면 th32OwnerProcessID는 해당 프로세스 ID를 보유합니다. OpenProcess를 호출하고 위와 같이 진행합니다.
스레드 또는 프로세스를 열 때 ALL_ACCESS 권한을 요청할 필요가 없으며이를 시도하면 프로그램이 실패 할 수 있습니다. 작업을 수행하는 데 필요한 최소 권한 만 요청하십시오. 모든 액세스를 요청하는 것은 필요한 것을 모르는 경우 게으른 방법이지만 프로그램에 이미 관리자 권한이있는 경우에만 작동합니다. 대신, 실제로 필요한 사용 권한을 파악하는 데 시간을 투자하십시오.
네이티브 API를 사용해야하는 이유는 무엇입니까? Win32가 왜 당신에게 적합하지 않습니까? 그리고 스레드에는 파일 이름이 없습니다. –