2011-01-20 4 views
1

내 실행 프로그램의 실행 파일에서 GetFileInformationByHandle을 호출하려고합니다. 즉, 프로그램을 시작한 .exe 파일 핸들을 가져와야합니다. 이 일을 할 수있는 방법이 있습니까?실행중인 실행 파일에 대한 파일 핸들 가져 오기

실행 실패 실행 파일에 대해 nFileIndexHigh 및 nFileIndexLow를 가져 오는 방법이 있습니까?

답변

3

여기이 방법이 있습니다. 이 도움이 되었기를 바랍니다 :

#include <Windows.h> 
#include <iostream> 
using namespace std; 

//declare a BY_HANDLE_FILE_INFORMATION structure 
BY_HANDLE_FILE_INFORMATION fileinfo; 

int main() 
{ 
    // clear everything in the structure, this is optional 
    ZeroMemory(&fileinfo, sizeof(BY_HANDLE_FILE_INFORMATION)); 

    // obtain a handle to the file, in this case the file 
    // must be in the same directory as your application 
    HANDLE myfile = NULL; 
    myfile = CreateFileA("example.exe",0x00,0x00,NULL, 
         OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); 

    // if we managed to obtain the desired handle 
    if(myfile!=INVALID_HANDLE_VALUE) 
    { 
     //try to fill the structure with info regarding the file 
     if(GetFileInformationByHandle(myfile, &fileinfo)) 
     { 
      // Ex: show the serial number of the volume the file belongs to 
      cout << endl << hex << fileinfo.dwVolumeSerialNumber << endl; 
     } 
     // you should close the handle once finished 
     CloseHandle(myfile); 
    } 
    system("pause"); 
    return 0; 
} 
+0

파일 이름이 'example.exe'라는 것을 어떻게 알 수 있습니까? – bobbogo

+0

나는 그것을 "example.exe"라고 불렀습니다. : OP –

+3

당신이 @ bobbogo를 이해하지 못한다고 생각합니다. 내 생각에 그는 사용자가 좋아하는 곳 어디에서나 실행할 수 있다는 점을 감안할 때 .exe의 파일 이름을 어떻게 확보 할 수 있을지 생각합니다. 대답은'GetModuleFileName'입니다. –

5
DWORD WINAPI GetModuleFileNameEx( 
    __in  HANDLE hProcess, 
    __in_opt HMODULE hModule, 
    __out  LPTSTR lpFilename, 
    __in  DWORD nSize); 

두 번째 매개 변수는 NULL이어야하며 현재 실행 파일의 이름을 가져야합니다.

편집 :

파일을 엽니 다.

+0

그건 내가 요구 한 것이 아닙니다. GetFileInformationByHandle을 호출 할 수 있도록 파일 핸들이 필요합니다. 너는 그 질문을 읽었 니? – Sparafusile

+6

@Sparafusile 그가 당신의 질문을 이해하지 못한다고해도 그것은 무례하다고 변명의 여지가 없습니다. – Andrey

+0

질문을 읽지 마십시오. 나는 너의 어떤 것도 더 이상 대답하지 않을 것이니 걱정하지 마라. – James

0

실행 파일의 경로를 얻으려면 GetCommandLine을 시도해야합니다. 그런 다음 열면 여기가 당신 손잡이입니다.

+0

내 실행 파일에 CreateFile이나 OpenFile이있을 때마다 응용 프로그램이 충돌합니다. – Sparafusile

+1

@Sparafusile 트릭이'dwDesiredAccess'와'dwShareMode' – Andrey

+0

의 올바른 값을 고르는 데 어떤 가치가 있는지 알고 있습니까? – Sparafusile

0

GetModuleHandle이 해결책입니다. 이 매개 변수가 NULL 인 경우

http://msdn.microsoft.com/en-us/library/ms683199(VS.85).aspx

은 GetModuleHandle 함수 호출 프로세스 (.exe 파일)을 만드는 데 사용되는 파일에 대한 핸들을 반환합니다.

+0

'GetModuleHandle'은 메모리에 매핑 된 모듈에 대한 핸들을 반환하지만 실제로는 파일에 반환하지 않습니다. 매개 변수가 NULL 인 경우 ImageBase에 대한 포인터를 반환합니다. – DReJ

+0

HMODULE을 반환합니다. 반환 값으로 GetFileInformationByHandle을 호출하면 "The handle is invalid."오류가 발생합니다. – Sparafusile

+0

@sparafusile :'HMODULE'은'HANDLE'을위한 merly 별칭입니다. 실제로 ** file ** 핸들이 아니라 매핑 된 메모리 핸들 – Necrolis

관련 문제