首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

GetModuleFileNameEx返回0,而GetLastError返回溢出错误。我做错了什么?

根据提供的问答内容,你遇到的问题是调用GetModuleFileNameEx函数返回0,而GetLastError函数返回溢出错误。这种情况通常表示你在调用GetModuleFileNameEx函数时出现了错误。下面是一些可能的原因和解决方法:

  1. 参数错误:请确保你正确地传递了函数所需的参数。GetModuleFileNameEx函数需要传递进程句柄、模块句柄和缓冲区大小等参数。请检查你传递的参数是否正确。
  2. 缓冲区大小不足:如果传递给GetModuleFileNameEx函数的缓冲区大小不足以容纳模块文件名,函数将返回溢出错误。你可以尝试增加缓冲区大小,或者使用动态分配内存的方式来确保缓冲区足够大。
  3. 权限问题:如果你尝试获取其他进程的模块文件名,可能会遇到权限问题。请确保你有足够的权限来获取目标进程的模块信息。
  4. 模块句柄错误:请确保你传递给GetModuleFileNameEx函数的模块句柄是有效的。你可以使用EnumProcessModules函数来获取进程的模块句柄列表,并确保你选择了正确的模块句柄。
  5. 兼容性问题:某些操作系统版本可能不支持GetModuleFileNameEx函数或者某些参数。请确保你的操作系统版本符合函数的要求,并查阅相关文档以获取更多信息。

总结起来,你需要仔细检查你调用GetModuleFileNameEx函数时的参数、缓冲区大小、权限、模块句柄等方面是否正确,并确保你的操作系统版本支持该函数。如果问题仍然存在,你可以参考相关文档或搜索引擎来获取更多关于GetModuleFileNameEx函数的信息和解决方法。

注意:由于要求不能提及特定的云计算品牌商,我无法为你提供腾讯云相关产品和产品介绍链接地址。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

文件操作API

这个函数返回值是BOOL类型。通过GetLastError 函数能得到出错的原因。...fr=prin ) 如果文件夹已存在CreateDirectory函数就会出错,而且通过GetLastError 函数得到的错误代码为0x50.所以我们可以这样写一个判断句: if( !...MessageBox(NULL,_T("文件夹已存在"),_T("出错"),MB_OK); } }     通知我们的用户,因为什么原因出错了。...但是第二个参数就容易弄错了,很容易就只写一个文件夹。比如要把文件移动到D:\abc文件夹底下,第二个参数就填D:\\abc. 这就会出错。     一开始也是犯了这个错误。...第三个参数是个BOOL型,填TRUE 代表:若目标文件已存在,不覆盖文件,函数返回错误。填FALSE代表:若目标文件已存在,覆盖文件。

65420
  • OpenProcess打开进程返回错误的问题

    于是乎,打开调试器下了几个断点跟了进去发现:GetLastError()的返回值在遇到System Process时,会返回错误代码87。...回头一查MSDN,人家已然说明:当OpenProcess()给定的进程ID为0时,该函数会失败并且GetLastError()返回错误代码是ERROR_INVALID_PARAMETER。...另外还说明了,当给定的进程是空闲进程(Idle Process)或CSRSS进程之一时,GetLastError()返回错误代码是ERROR_ACCESS_DENIED,其值为5....显然,错误很明显了。并没有过滤这些特殊进程,而是一股脑的全部调用OpenProcess()打开进程。刚好,的系统上第一个遍历的进程就是System Process(进程ID为0)。...于是程序直接跳出了得不到任何结果。另外,的系统是Windows 7 64位系统,网上有人说在Windows XP系统上不会出现这种错误,不知道真假。

    3.3K100

    秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别

    大家好,又见面了,是你们的朋友全栈君。...函数返回值: 在指定的时间内对象被触发,函数返回WAIT_OBJECT_0。超过最长等待时间对象仍未被触发返回WAIT_TIMEOUT。...//错误处理代码 } } 假设某个线程A在执行上面的代码,该线程在调用system()之后且尚未调用switch()语句时另外一个线程B启动了,这个线程B也调用了标准C运行库的函数,不幸的是这个函数执行出错了并将错误代号写入全局变量...//校正错误代号(可以调用GetLastError()得到错误代号) if ( err !...答案是不对的,虽然这种做法在逻辑上是正确的,但在多线程环境下这样是会产生严重的问题,下一篇《秒杀多线程第三篇 原子操作 Interlocked系列函数》将为你演示错误的结果(可能非常出人意料)并解释产生这个结果的详细原因

    24620

    Windows核心编程第一章.错误处理

    一丶错误处理 1.核心编程学习总结 不管是逆向,开始开发.在Windows下.你都需要看一下核心编程这本书.这本书确实写得很好.所以自己在学习这本书的同时,也把自己所学的知识进行 总结,以及巩固....2.常见的Windows函数返回类型总结 数据类型 作用 VOID 如果是Void表示函数不可能失败.极少数windows函数会返回void BOOL 表示这个函数会有失败情况.0失败.否则就是非...函数名称/圆形 作用 DWORD WINAPI GetLastError(void) 返回值: 返回调用线程之后的错误代码调用成功则返回ERROR_SUCESS void WINAPI SetLastError...如果调用的API没有错误,就是返回0 也就是说ERROR_SUCESS 否则则就会返回错误代码.这个错误代码可以用工具查看. 当然,你可以查询MSDN....MSDN上有介绍GetLastError配合ForMatMessage来打印错误代码. 5.错误代码查找工具的使用 VS编译器还提供了了错误代码查看工具.我们可以输入那么就会显示错误代码代表的什么意思.

    48820

    用Qt写软件系列三:一个简单的系统工具(上)

    于是立马在程序中调用,又发现了一个问题:该函数对于32位进程而言正常工作无疑,但是当查询的进程是64位的时候,这个函数直接返回0了,查询失败。显然,该函数对32位进程和64位进程的运行结果不一样。...不知道360安全卫士、金山卫士等软件是怎么的,反正最自然的想法就是去读注册表。每一款软件安装后都会在注册表里留下记录,除非是绿色免安装软件。那么,要读注册表的话要去哪个位置读呢?...等等,稍微一扫描就觉得有什么不对劲了:每天用的QQ去哪了?没道理这么大一款软件不使用注册表啊?想来难道又是64位系统的缘故?...显然,我们就得了解下这个Wow64是个什么东西了。 (2)Wow64是什么? 咋一看Wow这个缩写,让莫名的熟悉,难道是这个Wow(World of Warcraft)?显然和魔兽世界没有什么联系。...照这字面意思,就是微软在64为系统上模拟了一个32位程序运行的环境,这也解释了,为什么的电脑上会有两个这样的文件夹: ? 这篇博客讲的很详细,对于是什么、为什么、怎么样都有详细叙述。

    2.5K80

    gh0st源码分析与远控的编写(四)

    总算有一个时间,放下手里所有的活,能够继续把这份努力延续下去。     以后对于gh0st的文章,就是一个一个模块的分析。...原本gh0st就是由很多功能组成的一个强大的远控,但有些东西并不是功能越强大越好。我们到最后,会做一个gh0st的精简,留下最重要的功能,淘汰一些庞大容易暴露的功能。...进程完整名+0 //为什么0 ?...其中调用的EnumProcessModules函数要注意,传入的第二个参数是一个HMODULE类型指针,不是MSDN中说的数组。...所以,最后getProcessList函数返回的就是一个包含所有进程信息的一个缓冲区,类似这样"01ieplorer.exe\0IE浏览器\002qq.exe\0腾讯QQ\0...."。

    1K32

    windows错误处理

    在调用windows API时函数会首先对我们传入的参数进行校验,然后执行,如果出现什么情况导致函数执行出错,有的函数可以通过返回值来判断函数是否出错,比如对于返回句柄的函数如果返回NULL 或者INVALID_HANDLE_VALUE...,则函数出错,对于返回指针的函数来说如果返回NULL则函数出错,但是对于有的函数从返回值来看根本不知道是否成功,或者为什么失败,对此windows提供了一大堆的错误码,用于标识API函数是否出错以及出错原因...在windows中为每个线程准备了一个存储区,专门用来存储当前API执行的错误码,想要获取这个错误码可以通过函数GetLastError。...在这需要注意的是当前API执行返回错误码会覆盖之前API返回错误码,所以在调用API结束后需要立马调用GetLastError来获取该函数返回错误码。...在windows上一般遵循这样的格式: 位 31~30 29 28 27~16 15~0 用途 严重性 系统错误码 保留位 设备码 异常代码 含义 0 成功 1供参考2警告3错误 0系统定义1自定义 总为

    80520

    免杀杂谈

    那么免杀这是一个大类,如果直接去说,这其实是大空的,那么具体免杀,我们需要去做些什么呢?将会从下面几个方面来论述。...但是程序编译成exe比较大,而且编译出来的有时候拿到目的机器上运行,会出现各种错误无法运行。 go:运行速度快,难度也比较简单,支持各种库。文件也不是很大。 java:这种很少用来木马的。...,还需要使用GetLastError来判断错误返回值。   ...若错误返回值为ERROR_SUCCESS,则表示所有特权设置成功;若为ERROR_NOT_ALL_ASSIGNED,   则表示并不是所有特权都设置成功   换句话说,如果在程序中只提升了一个访问令牌特权...其实这样也没什么问题,但是依旧应该去研究一下更少见的内容,最好是自己分析,调试一下,不是直接下载项目,自己编译运行,报错了也不知道为什么会报错。希望和各位安全师傅共勉,共同进步。

    31710

    微信PC端多开的秘密

    小林告诉他是这样的,写了一个批处理: start D:\WeChat\WeChat.exe start D:\WeChat\WeChat.exe 然后直接双击批处理文件,就能启动两个微信进程。...试了一下,果然如此! 随后又加了一行,竟然还能启动3个: ? 接着在网络上搜了一下,原来这一招早就被人用过了,看来是火星了。不过到底为什么用这种方式就能多开,倒是很想知道这个迷底。...可以看到,创建这个名字的互斥体后,随后又调用了GetLastError函数,并返回0x000000b7,查看手册,其含义: ? 表示已经存在。...上面这张图反映了创建互斥体后的判断逻辑: 如果sub_108e26d0返回值为0,表示没有错误,当前函数也直接返回0。...如果sub_108e26d0返回值不为0,表示出现了错误,则依次判断WeChatMainWndForPC和WeChatLoginWndForPC两个窗口是否存在,如果存在则使用BringWindowToTop

    2.5K10

    非禁用validateRequest=false使用Page_Error()错误处理

    大家好,又见面了,是你们的朋友全栈君。 ASP.Net 1.1后引入了对提交表单自动检查是否存在XSS(跨站脚本攻击)的能力。...看得这叫一个胆战心惊。安全意识应该时时刻刻在每一个程序员的心里,不管你对安全的概念了解多少,一个主动的意识在脑子里,你的站点就会安全很多。   ...为什么很多程序员想要禁止 validateRequest 呢?有一部分是真的需要用户输入””之类的字符。这就不必说了。...还有一部分其实并不是用户允许输入那些容易引起XSS的字符,而是讨厌这 种报错的形式,毕竟一大段英文加上一个ASP.Net典型异常错误信息,显得这个站点出错了不是用户输入了非法的字符,可是自己又不知道怎么不让它报...对于希望很好的处理这个错误信息,不使用默认ASP.Net异常报错信息的程序员们,你们不要禁用validateRequest=false。

    64320

    实战|使用Windows API绕过进程保护

    而是由于在底层,杀死进程的API已经被hook了,这里应该是内核hook,当想要结束的进程为核心进程时,就直接返回一个无法终止进程的弹窗。...taskkill或者通过任务管理器等GUI工具去结束进程,本质上都是调用的TerminateProcess,有些可能是调用更为底层的ZwTerminateProcess,但是本质都差不多,只是看该进程用的什么...通过hook TerminateProcess让执行该函数时直接返回没有权限。...AdjustTokenPrivileges Error,Error is:%d\n", GetLastError());return FALSE;}else{// 根据错误码判断是否特权都设置成功...那么如果要选择性保护进程,又应该怎么呢。注意TerminateProcess的第一个参数,传入的是一个句柄,这个句柄需要从openprocess的返回值获得,所以我们还需要知道打开进程的句柄。

    2.3K20

    windows10 记事本进程 键盘消息钩子 dll注入

    SetWindowsHookEx()的官网文档说了,这个函数只能用于64位程序将64位dll注入64位程序,或32位程序将32位dll注入32位程序,如果我们编写的dll是32位的,那么到时候注入时程序就会卡死(别问我为什么知道...} KeyboardProc,官方文档有解释:点击打开链接,关于KeyboardProc中wparam参数返回的信息:点击打开链接 可能也有很多地方没理解对,有能力尽量看官方文档。...10、点击最上方的生成->生成解决方案,成功的话,找到DLL->x64->Debug这个文件夹,看下有没有DLL.dll这个文件,注意:不是DLL->DLL->x64->Debug这个文件夹,不要问我为什么会知道...0,没找到时就返回0 DWORD ProcessesId[1024] = { 0 }; //进程id数组,在之后EnumProcesses函数调用会将当前所有进程id放入数组 DWORD NeededProcessesId...,而且列出所有子线程那个方法没弄懂,于是没这么; 思路2:找到找到记事本进程id,枚举当前所有窗口参看窗口的进程id以及线程id,对比记事本进程id,相同的话就锁定了记事本窗口所在线程id; 思路3

    1.7K10
    领券