阅读:1787回复:7
如何得到当前进程对应文件的版本号&文件创建时间?(50分)
可以执行Iogetcurrentprocess得到当前进程句柄,随后如何得到此进程对应程序文件的版本号和创建时间呢?
谢谢 [编辑 - 5/17/03 by Newandold] |
|
沙发#
发布于: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 ); } |
|
|
板凳#
发布于:2003-05-28 19:16
如何得到版本号那?
|
|
地板#
发布于:2003-05-28 19:34
可以用GetFileVersionInfoSize得到文件版本信息的大小
用GetFileVersionInfo得到文件版本信息 用VerQueryValue得到你要的信息 这样应该可以了 |
|
|
地下室#
发布于:2003-05-28 19:39
虽然不是内核,但是也懂了些知识.谢谢!
|
|
5楼#
发布于:2003-05-28 19:39
只能给一次分啊?
|
|
6楼#
发布于:2003-06-02 12:38
用_DATE_可以得到
|
|
7楼#
发布于:2003-06-02 15:50
什么叫 “用_DATE_可以得到”?
能不能说的稍微详细一点。先谢过了。 |
|