Newandold
驱动牛犊
驱动牛犊
  • 注册日期2003-01-10
  • 最后登录2004-08-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1787回复:7

如何得到当前进程对应文件的版本号&文件创建时间?(50分)

楼主#
更多 发布于:2003-05-17 10:54
可以执行Iogetcurrentprocess得到当前进程句柄,随后如何得到此进程对应程序文件的版本号和创建时间呢?

谢谢

[编辑 -  5/17/03 by  Newandold]
hollychen2002
驱动牛犊
驱动牛犊
  • 注册日期2002-11-04
  • 最后登录2005-11-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-28 17:52
我想一个进程不一定只有一个文件吧。
一个进程有时侯有好几个module,你可以找到其中某一个module的对应文件的具体信息,比如文件的版本号和创建时间。


我只知道user mode程序的方法,你可以参考一下

首先你可以用OpenProcess打开这个进程,
然后用EnumProcessModules找出所有的module
然后再用GetModuleFileNameEx得到每个module对应文件的具体信息。

下面是microsoft的一个例子,good luck.


#include <windows.h>
#include <stdio.h>
#include \"psapi.h\"

void PrintModules( DWORD processID )
{
    HMODULE hMods[1024];
    HANDLE hProcess;
    DWORD cbNeeded;
    unsigned int i;

    // Print the process identifier.

    printf( \"\\nProcess ID: %u\\n\", processID );

    // Get a list of all the modules in this process.

    hProcess = OpenProcess(  PROCESS_QUERY_INFORMATION |
                                    PROCESS_VM_READ,
                                    FALSE, processID );
    if (NULL == hProcess)
        return;

    if( EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded))
    {
        for ( i = 0; i < (cbNeeded / sizeof(HMODULE)); i++ )
        {
            char szModName[MAX_PATH];

            // Get the full path to the module\'s file.

            if ( GetModuleFileNameEx( hProcess, hMods, szModName,
                                      sizeof(szModName)))
            {
                // Print the module name and handle value.

                printf(\"\\t%s (0x%08X)\\n\", szModName, hMods );
            }
        }
    }

    CloseHandle( hProcess );
}

void main( )
{
    // Get the list of process identifiers.

    DWORD aProcesses[1024], cbNeeded, cProcesses;
    unsigned int i;

    if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
        return;

    // Calculate how many process identifiers were returned.

    cProcesses = cbNeeded / sizeof(DWORD);

    // Print the name of the modules for each process.

    for ( i = 0; i < cProcesses; i++ )
        PrintModules( aProcesses );
}
要学做事,先学做人
Newandold
驱动牛犊
驱动牛犊
  • 注册日期2003-01-10
  • 最后登录2004-08-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-28 19:16
如何得到版本号那?
hollychen2002
驱动牛犊
驱动牛犊
  • 注册日期2002-11-04
  • 最后登录2005-11-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-28 19:34
可以用GetFileVersionInfoSize得到文件版本信息的大小
用GetFileVersionInfo得到文件版本信息
用VerQueryValue得到你要的信息

这样应该可以了


要学做事,先学做人
Newandold
驱动牛犊
驱动牛犊
  • 注册日期2003-01-10
  • 最后登录2004-08-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-05-28 19:39
虽然不是内核,但是也懂了些知识.谢谢!

Newandold
驱动牛犊
驱动牛犊
  • 注册日期2003-01-10
  • 最后登录2004-08-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-05-28 19:39
只能给一次分啊?
zhaohappy
驱动牛犊
驱动牛犊
  • 注册日期2002-12-02
  • 最后登录2005-10-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-06-02 12:38
用_DATE_可以得到
Newandold
驱动牛犊
驱动牛犊
  • 注册日期2003-01-10
  • 最后登录2004-08-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-06-02 15:50
什么叫 “用_DATE_可以得到”?

能不能说的稍微详细一点。先谢过了。
游客

返回顶部