关于XP没有QueryFullProcessImageName的问题(in ProcessInfo)

VB 调用 WindowsAPI 函数GetModuleFileName、 GetProcessImageFileName 和QueryFullProcessImageName获取进程文件路径 Windows编程中,需要获取一个已打开窗口程序的完整路径,以便下次用ShellExecute 函数直接打开。 能实现这一目标的Windows API函数有3个: GetModuleFileName、GetProcessImageFileName 和QueryFullProcessImageName。网上的API函数手册大多只能查到第一个,后面两个只能百度查找调用方法,然而却都讲得不清不楚。... 阅读详情

2011-03-29

记得以前看过一点儿windows核心编程,现在又拿起来重新看看,哎,基本上都忘了。简单看了看进程那部分,自己想写点关于进程的小程序,不过后来发现原来书配了源代码的。于是下到http://www.wintellect.com/books.aspx 把代码下了。打开,然后一切顺利,编译全部通过。不过执行ProcessInfo时,出现错误了。无法定位程序输入点QueryFullProcessImageNameW于KERNEL32.dll上 。去google了一下,原来是XP里面没有QueryFullProcessImageNameW这个东东啊。随后查了查msdn,上面说

 


 

Requirements

Minimum supported client

Windows Vista

Minimum supported server

Windows Server 2008

Header

Winbase.h (include Windows.h)

 


 

 

原来自己用的是XP,不满足人家最小要求啊,呵呵:)。接着往后看,有一个评论说:

 


 

For the best results use the following table to convert paths.

Windows 2000 = GetModuleFileName()
Windows XP x32 = GetProcessImageFileName()
Windows XP x64 = GetProcessImageFileName()
Windows Vista = QueryFullProcessImageName()
Windows 7 = QueryFullProcessImageName()


Note: If you are not aware the API GetProcessImageFileName() returns a kernel DOS device path. You can use the following API to map the device paths to a Win32 format.

GetLogicalDriveStrings
QueryDosDevice

 


原来32位XP还可以用GetProcessImageFileName呢。又查了下GetProcessImageFileName

DWORD WINAPI GetProcessImageFileName(
  __in   HANDLE hProcess,
  __out  LPTSTR lpImageFileName,
  __in   DWORD nSize
);
把源码改了改,如下:

再加上psapi.h这个头文件,然后编译要是有错,5555。 error   LNK2001:   unresolved   external   symbol 。???怎么会有这个问题呢,又看了下msdn,原来

Requirements

Minimum supported client

Windows XP

Minimum supported server

Windows Server 2003

Header

Psapi.h

Library

Kernel32.lib on Windows 7 and Windows Server 2008 R2, Psapi.lib if PSAPI_VERSION=1 on Windows 7 and Windows Server 2008 R2, Psapi.lib on Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP/2000

DLL

Kernel32.dll on Windows 7 and Windows Server 2008 R2, Psapi.dll if PSAPI_VERSION=1 on Windows 7 and Windows Server 2008 R2, Psapi.dll on Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP/2000
 
原来是自己没有仔细看啊,少了个psapi.lib啊,难怪啊。加上之后,哈哈可以运行啦,不写了,自己慢慢看看他是怎么写的,嘿嘿,顺便自己瞎改改。


 

 

 

 

 

 

 

 


通过进程PID获取可执行文件全路径,提取路径中的文件名,提取文件名后缀、提取全路径中的目录、枚举进程加载模块dll 需要用到如下API 32位的程序调用此API同样能获取到64位进程的可执行文件路径。下面是微软在文档中的说明,由于该API很简单就不再复述了hProcess [in]A handle to the process. This handle must be created with the PROCESS_QUERY_INFORMATION or PROCESS_QUERY_LIMITED_INFORMATION access right. For more information, see Proces 阅读详情

相关推荐

完整版进程管理器——全路径与图标展示

本文还有配套的精品资源,点击获取 简介:进程管理是操作系统的核心功能,允许用户监控和控制系统进程。本文介绍的“完整版进程管理器”提供了额外的进程信息,包括显示每个进程的全路径文件名和程序图标。这些信息对于识别进程来源、提高系统安全性和优化系统性能至关重要。用户可以通过这一工具结束无用进程,优化资源使用,并通过界面友好的方式管理进程。开发者可能使用了Windows API函数...

weixin_33670640的博客 1392

VB 使用 ZwQueryInformationProcess

Option ExplicitPublic Declare Function ZwQueryInformationProcess _Lib "NTDLL.DLL" (ByVal ProcessHandle As Long, _ByVal ProcessInformationClass As PROCESSINFOCLASS, _ByVal ProcessInformation As Long...

資料為我做事 635

获取进程名称:Windows句柄操作详解

GetInfoTable函数在Windows系统编程中扮演着重要的角色,尤其是在进程管理方面。其核心功能是从系统中检索关于特定进程的详细信息表。这个函数通常被应用于系统监控、性能分析、安全审计等多种场景,开发者通过调用GetInfoTable可以获取进程的ID、句柄、优先级、内存使用情况等信息。例如,系统管理员可能需要定期检查系统的进程活动,以监控恶意软件或服务的异常行为;而应用开发者则可能需要获取进程信息来优化应用程序的性能。在这些情况下,GetInfoTable函数都能够提供关键的数据支持。

weixin_35677363的博客 1181

获取进程全路径

BOOL GetProcPath( __in BOOL bCurrentProc, __in ULONG ulPid, __inout LPTSTR lpProcPath, __in ULONG ulProcPathBufLen ) { BOOL bRet = FALSE; HMODULE hModule = NULL; HANDLE hProc

fengkuangfj的专栏 3104

VB根据PID得到进程路径

VB根据PID得到进程路径,改了一段代码,可以获取进程的PID和路径:   在窗体设计器里放一个listbox,命名为process;   再放2个txtbox,一个名为ProcessID,用来显示PID;   另一个名为Path,用来显示进程路径;   最后再放一个按钮,命名为cmdRefresh,用于刷新列表;   完成后即可运行代码

轻松修改任务管理器查看进程路径源代码

轻松修改任务管理器查看进程路径源代码,自己DIY任务管理器其实很简单

获取进程全路径方法(支持xp、win7、win10系统)

获取进程全路径方法(支持xp、win7、win10系统)获取进程的全路径的函数包括GetModuleFileNameEx、GetProcessImageFileName、QueryFullProcessImageName。这三个函数的原型:DWORD GetModuleFileNameEx(HANDLE hProcess,HMODULE hModule,LPTSTR lpFilename,DWOR...

深之JohnChen的专栏 6253

抖音私信卡片私信名片的原理分析

简单说一下它的功能吧:抖音私信卡片,解决了客户封号严重、引流效率低的痛点,所以从去年到现在,依然是热销品。"抖音快手私信名片链接跳转"是2022年抖音快手引流最新技术,可以生成卡片链接,支持标题、描述、logo以及跳转落地页的完全自定义配置.支持微信公众号和微信号复制唤起微信客户端app添加,同时也支持任意链接落地页跳转提高粉丝引流转化率,关注转化率,引流转化率,安全绿色私信卡片功能1、跳转微信用户点击卡片,自动跳转微信界面,显示好友和群聊二维码2、跳转链接用户点击卡片,自动跳转到指定链接,支持任意链接。3

m0_71385839的博客 5189

根据进程句柄获得可执行文件路径的几种方法

转载自: http://blog.youkuaiyun.com/hellokandy/article/details/52160077 通过进程句柄,获得可执行文件的路径,主要有以下几种方法: 第一种方法:也是最常用的方法,是通过GetModuleFileNameEx函数获得可执行文件的模块路径,这个函数从Windows NT 4.0开始到现在的Vista系统都能使用,向后兼容性比较好。

while(1) { smile(); } 13万+

PADS Layout中快速导入自定义元器件封装的实用技巧

本文详细介绍了在PADS Layout中高效导入自定义元器件封装的实用技巧。针对封装“找不到”、“对不上”、“导不进”三大痛点,系统梳理了从封装文件来源识别、库规划管理,到三种核心导入场景(从库文件添加、从其他设计借用、处理第三方格式)的完整操作流程,并提供了导入后的关键验证清单与常见问题排查方法,旨在帮助硬件工程师快速掌握这一提升设计效率的关键技能。

weixin_29302047的博客 375

Arduino-CRSF库详解:嵌入式端CRSF协议解析与ELRS接收机集成

CRSF(Crossfire Serial Protocol)是一种面向FPV无人机的轻量级、高实时性串行通信协议,采用单总线异步传输与8位CRC-8校验机制,广泛应用于遥控链路与遥测交互。其核心在于帧同步(0xC8起始字节)、反相逻辑电平及无重传的广播式设计,对嵌入式平台的UART精度、电平匹配和状态机健壮性提出严苛要求。Arduino-CRSF库正是为资源受限MCU(如ESP32、STM32、ATmega328P)提供零配置、中断安全的协议解析能力,封装了CRC查表计算、超时恢复、多级同步验证等关键机制

weixin_35756690的博客 416

GetModuleFileName 64位问题

利用GetModuleFileName在32位机器上开发的程序,在64位机器上运行的时候,GetModuleFileName和GetModuleFileNameEX获取信息失败。

董盼山的专栏 5607

昇腾CANN实战:如何用DVPP+AIPP实现32路视频流毫秒级预处理(附性能对比)

本文深入探讨了昇腾CANN架构中DVPP和AIPP模块在32路视频流毫秒级预处理中的硬件加速技术。通过异构计算架构的优化,实现了从传统CPU方案的40.7毫秒到CANN方案3.4毫秒的显著性能提升,特别适用于智能安防领域的实时视频分析需求。文章详细解析了DVPP多通道并行设计和AIPP模型级预处理融合的技术细节,并提供了性能对比数据与实战调优经验。

alice7model的博客 919

python psutil模块查找进程_在Python中查找每个正在运行的进程的路径

作为管理员,如果不能获得PROCESS_QUERY_INFORMATION(0x400),则可以获得给定进程的PROCESS_QUERY_LIMITED_INFORMATION(0x1000)访问权限。QueryFullProcessImageNameW只需要有限的访问权限。然而,并不是所有情况下都能奏效。例如,上的安全描述符csrss.exe文件只授予对系统帐户的访问权限,不授予管理员权限。另一...

weixin_30284125的博客 735

稀疏数据分析:马蹄估计量及其理论性质

稀疏数据分析:马蹄估计量及其理论性质基本框架half-Cauchy分布为什么它叫马蹄估计量后验均值、shrinkage与κ\kappaκθ\thetaθ的边缘先验分布的阶马蹄估计的一致性收敛速率Clarke-Barron(1990)引理马蹄估计的最优收敛速率 这是对The horseshoe estimator for sparse signal这篇论文的回顾,这篇论文在Modern Bayesian statistics与Bayesian Machine Learning领域比较重要,它提出了一种新的先验

一个不愿透露姓名的博客 3799

UE5多人联机实战:从零搭建LAN游戏房间(含UMG界面配置)

本文详细介绍了如何在UE5中从零开始搭建一个完整的局域网(LAN)多人游戏房间系统。内容涵盖项目基础配置、UMG主菜单设计、会话创建与搜索的核心实现,并重点解析了创建会话的关键参数配置与常见陷阱,帮助开发者快速掌握UE5多人联机开发的核心流程。

weixin_29001683的博客 690

GetModuleFileNameEx遍历获取64bit程序路径失败的一种解决方法(Win7-64-bit)

根据官方的说法: For the best results use the following table to convert paths. Windows 2000 = GetModuleFileNameEx()Windows XP x32 = GetProcessImageFileName()Windows XP x64 = GetProcessImageFileName()Window...

weixin_30500473的博客 423

【WRF-Urban数据集】中国60个城市的1 km分辨率城市冠层参数(UCPs)

中国60个城市的1 km分辨率城市冠层参数(UCPs)

WW、forever的博客 1068

无法定位程序输入点

无法定位程序输入点

风无痕 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName

  想获得进程可执行文件的路径通常有三个方法:一: 调用GetModuleFileNameEx函数获得可执行文件的模块路径这个函数从Windows NT 4.0开始到现在的Vista系统都能使用,向后兼容性比较好。 二:调用GetProcessImageFileName函数,这个函数在Windows XP及其以后的系统中都能使用。 三:调用Windows Vista新增

David的专栏 2万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【Delphi】运行程序时自动检查程序是否已经有一个实例在运行

//uCheckAppRunning.pas: unit uCheckAppRunning; //检查程序是否已经在运行,不允许运行多个实例 interface uses System.SysUtils, System.Classes, Winapi.Windows, Vcl.Forms, Winapi.Messages, Vcl.ExtCtrls, Vcl.Menus, Vcl.Dialogs, Winapi.TlHelp32, Winapi.PsAPI; type TShow...

BlueStorm的博客 1477

获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName...

http://blog.youkuaiyun.com/bichenggui/article/details/4774457 -------------------------------------------------- 获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName 20...

weixin_33726313的博客 694

Windows 中通过进程 ID 获取可执行文件路径的方法

Windows中通过进程ID获取进程全路径 GetModuleFileNameEx 在Win7上,如果32进程调用用来获取64位进程路径,返回失败。 由于函数GetModuleFileName() 和 函数GetModuleFileNameEx()都是通过PEB头信息获取进程文件路径,所以它们只能工作于与调用进程相同位数的进程,比如:调用进程32位时,这两个函数只对32位进程有效,64位同理。 GetProcessImageFileName 所以在64位进程与32位进程并.

langshanglibie的专栏 5227

进程完整路径获取方式底层实现剖析

解析GetProcessImageFileName和QueryFullProcessImageName、SeLocateProcessImageName函数,进程完整路径获取方式底层实现剖析

sunjiaoya的博客 1671
上一篇: 【转载】提高编程技能最有效的方法
下一篇: Background of the Microsoft C Run-time Libraries
RFC2008
博客等级 码龄18年 45粉丝 14原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值