获取运行可执行文件的文件句柄

时间:2011-01-20 18:18:32

标签: c++ c windows winapi

我试图在我自己运行的程序的可执行文件上调用GetFileInformationByHandle。这意味着我需要获取启动程序的.exe文件句柄。有没有办法做到这一点?

如果失败了,有没有办法让正在运行的可执行文件获得nFileIndexHigh和nFileIndexLow?

4 个答案:

答案 0 :(得分:5)

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

第二个参数应为NULL,您将获得当前可执行文件的名称。

编辑:

然后打开文件。

答案 1 :(得分:4)

这是一种方法。我希望这会有所帮助:

#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;
}

答案 2 :(得分:0)

您应该尝试GetCommandLine获取可执行文件的路径。然后打开,这是你的手柄。

答案 3 :(得分:0)

GetModuleHandle就是解决方案。

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

如果此参数为NULL,则GetModuleHandle返回用于创建调用进程(.exe文件)的文件的句柄。