我试验了下,第一个方案是不正确的。...OpenProcess返回的是进程句柄,而GetModuleFileName 的传入参数是模块的句柄,这两种句柄不是一个东西。...当然强制转换可以解决VC编译通过问题,但是这样做不会有任何效果的。说强制转换的人可能受到一种现象的影响——HINSTANCE和HMOUDLE是一个东西。...在我之前做的一个项目中,我就发现了一个现象——这个逻辑在Win7 64bit上失败。经过调试,发现EnumProcessMoudles执行失败。...// 传的Size为MAX_PATH,而不是MAX_PATH+1,是因为保证不会存在溢出问题 if ( 0 == GetModuleFileNameEx( hProcess, hMod
这个函数返回值是BOOL类型。通过GetLastError 函数能得到出错的原因。...fr=prin ) 如果文件夹已存在CreateDirectory函数就会出错,而且通过GetLastError 函数得到的错误代码为0x50.所以我们可以这样写一个判断句: if( !...MessageBox(NULL,_T("文件夹已存在"),_T("出错"),MB_OK); } } 通知我们的用户,因为什么原因出错了。...但是第二个参数就容易弄错了,很容易就只写一个文件夹。比如要把文件移动到D:\abc文件夹底下,第二个参数就填D:\\abc. 这就会出错。 我一开始也是犯了这个错误。...第三个参数是个BOOL型,填TRUE 代表:若目标文件已存在,不覆盖文件,函数返回错误。填FALSE代表:若目标文件已存在,覆盖文件。
于是乎,打开调试器下了几个断点跟了进去发现: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系统上不会出现这种错误,不知道真假。
一丶错误处理 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编译器还提供了了错误代码查看工具.我们可以输入那么就会显示错误代码代表的什么意思.
大家好,又见面了,我是你们的朋友全栈君。...函数返回值: 在指定的时间内对象被触发,函数返回WAIT_OBJECT_0。超过最长等待时间对象仍未被触发返回WAIT_TIMEOUT。...//错误处理代码 } } 假设某个线程A在执行上面的代码,该线程在调用system()之后且尚未调用switch()语句时另外一个线程B启动了,这个线程B也调用了标准C运行库的函数,不幸的是这个函数执行出错了并将错误代号写入全局变量...//校正错误代号(可以调用GetLastError()得到错误代号) if ( err !...答案是不对的,虽然这种做法在逻辑上是正确的,但在多线程环境下这样做是会产生严重的问题,下一篇《秒杀多线程第三篇 原子操作 Interlocked系列函数》将为你演示错误的结果(可能非常出人意料)并解释产生这个结果的详细原因
ReturnLength:一个可选参数,用于接收实际返回的线程信息的长度。...} return 0; } 需要注意的是,实际使用时需要正确加载 NtQueryInformationThread 函数的地址,并处理相关的错误情况。...错误处理 开发者需要仔细处理函数的返回值,以应对可能出现的各种错误情况,如无效的句柄、缓冲区溢出等。...= 0) { //qWarning() GetLastError(); return false; } return suspendCount > 0; } bool TerminateSuspendedProcesses
大家好,又见面了,我是你们的朋友全栈君。下面是本人愿来写的关机程序可以适用于98/xp/2000,在程序中调用即可。...函数返回本线程的最后一次错误代码。...Public Declare Function GetLastError Lib “kernel32” () As Integer ‘GetCurrentProcess函数返回当前进程的一个句柄...‘这样做,GetLastError函数如果没有错误会返回0 ”””’SetLastError 0 ‘GetCurrentProcess函数设置 hdlProcessHandle变量...”, tmpLuid) ””’If GetLastError 0 Then ””’MsgBox “LookupPrivilegeValue error==” & GetLastError
大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。...返回值为假时,使用getlasterror来得到错误信息。...返回值: 当返回false时能够调用getlasterror来得到相关信息。...返回值: 当返回false时能够调用getlasterror来得到相关信息。...假设填为NULL,则默信为0-123 返回值: 全部的错误代码表明,底层的TCP连接已中断。 ERROR_IO_PENDING 操作将异步完毕。
总算有一个时间,我放下手里所有的活,能够继续把这份努力延续下去。 以后对于gh0st的文章,就是一个一个模块的分析。...原本gh0st就是由很多功能组成的一个强大的远控,但有些东西并不是功能越强大越好。我们到最后,会做一个gh0st的精简,留下最重要的功能,淘汰一些庞大而容易暴露的功能。...进程完整名+0 //为什么加0 ?...其中调用的EnumProcessModules函数要注意,传入的第二个参数是一个HMODULE类型指针,而不是MSDN中说的数组。...所以,最后getProcessList函数返回的就是一个包含所有进程信息的一个缓冲区,类似这样"01ieplorer.exe\0IE浏览器\002qq.exe\0腾讯QQ\0...."。
于是立马在程序中调用,又发现了一个问题:该函数对于32位进程而言正常工作无疑,但是当查询的进程是64位的时候,这个函数直接返回0了,查询失败。显然,该函数对32位进程和64位进程的运行结果不一样。...不知道360安全卫士、金山卫士等软件是怎么做的,反正我最自然的想法就是去读注册表。每一款软件安装后都会在注册表里留下记录,除非是绿色免安装软件。那么,要读注册表的话要去哪个位置读呢?...等等,稍微一扫描我就觉得有什么不对劲了:我每天用的QQ去哪了?没道理这么大一款软件不使用注册表啊?想来难道又是64位系统的缘故?...显然,我们就得了解下这个Wow64是个什么东西了。 (2)Wow64是什么? 咋一看Wow这个缩写,让我莫名的熟悉,难道是这个Wow(World of Warcraft)?显然和魔兽世界没有什么联系。...照这字面意思,就是微软在64为系统上模拟了一个32位程序运行的环境,这也解释了,为什么我的电脑上会有两个这样的文件夹: ? 这篇博客讲的很详细,对于是什么、为什么、怎么样都有详细叙述。
大家好,又见面了,我是你们的朋友全栈君。...为什么这么麻烦?...返回值:如果函数调用成功,返回非零值。如 果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。...因为此原因使用GetLastError会 得到错误码为1444, 这种情况经常出现,解决方法有如下两种: 1....下面是我写的一个比较严整的例子,仅供参考。
大家好,又见面了,我是你们的朋友全栈君。...什么原因呢?原来在默认的情况下进程的一些访问权限是没有被使能(Enabled)的,所以我们要做的首先是使能这些权限。...(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES) NULL, 0); //调整获得的权限 if (GetLastError() !...if (GetLastError() !...= NULL){ TCHAR szBuffer[MAX_PATH] = {_T('/0')}; if(::GetModuleFileNameEx(hProcess, NULL, szBuffer
一丶简介 为什么要创建系统权限服务.首先.强调权限一说....g_ServiceStatus.dwWin32ExitCode = 0; //服务用语报告启动或停止时候发生的错误代码.返回特定的错误代码就设置....g_ServiceStatus.dwWin32ExitCode = 0; //服务用语报告启动或停止时候发生的错误代码.返回特定的错误代码就设置....g_ServiceStatus.dwWin32ExitCode = 0; //服务用语报告启动或停止时候发生的错误代码.返回特定的错误代码就设置....return 0; } 4.总结 代码没有进行完善,比如服务中创建的进程是写死的.这个我没有做.因为时间有限.只为了测试代码. 其实不难.有兴趣的可以自己做一下.
在调用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自定义 总为
小林告诉我他是这样做的,写了一个批处理: start D:\WeChat\WeChat.exe start D:\WeChat\WeChat.exe 然后直接双击批处理文件,就能启动两个微信进程。...我试了一下,果然如此! 随后我又加了一行,竟然还能启动3个: ? 接着我在网络上搜了一下,原来这一招早就被人用过了,看来是我火星了。不过到底为什么用这种方式就能多开,我倒是很想知道这个迷底。...可以看到,创建这个名字的互斥体后,随后又调用了GetLastError函数,并返回了0x000000b7,查看手册,其含义: ? 表示已经存在。...上面这张图反映了创建互斥体后的判断逻辑: 如果sub_108e26d0的返回值为0,表示没有错误,当前函数也直接返回0。...如果sub_108e26d0的返回值不为0,表示出现了错误,则依次判断WeChatMainWndForPC和WeChatLoginWndForPC两个窗口是否存在,如果存在则使用BringWindowToTop
调用CreateWindow或CreateWindowEx创建窗口返回空句柄时,我们总是会调用GetLastError看下错误码,就知道具体错误的原因(比如窗口类未注册),但如果GetLastError...返回0没有报错,是怎么回事呢?...第二,SendMessage发送WM_CREATE消息,消息处理函数WndProc处理WM_CREATE消息,返回处理结果 第三,如果处理结果为0,窗口创建成功返回窗口句柄,如果处理结果非0,销毁窗口,...返回空句柄。...所以,CreateWindow返回空句柄而GetLastError返回0是因为未正确处理WM_CREATE消息,返回非0值。
那么免杀这是一个大类,如果直接去说,这其实是大而空的,那么具体免杀,我们需要去做些什么呢?我将会从下面几个方面来论述。...但是程序编译成exe比较大,而且编译出来的有时候拿到目的机器上运行,会出现各种错误无法运行。 go:运行速度快,难度也比较简单,支持各种库。文件也不是很大。 java:这种很少用来做木马的。...,还需要使用GetLastError来判断错误码返回值。 ...若错误码返回值为ERROR_SUCCESS,则表示所有特权设置成功;若为ERROR_NOT_ALL_ASSIGNED, 则表示并不是所有特权都设置成功 换句话说,如果在程序中只提升了一个访问令牌特权...其实这样也没什么问题,但是依旧应该去研究一下更少见的内容,最好是自己分析,调试一下,而不是直接下载项目,自己编译运行,报错了也不知道为什么会报错。希望和各位安全师傅共勉,共同进步。
大家好,又见面了,我是你们的朋友全栈君。 ASP.Net 1.1后引入了对提交表单自动检查是否存在XSS(跨站脚本攻击)的能力。...看得我这叫一个胆战心惊。安全意识应该时时刻刻在每一个程序员的心里,不管你对安全的概念了解多少,一个主动的意识在脑子里,你的站点就会安全很多。 ...为什么很多程序员想要禁止 validateRequest 呢?有一部分是真的需要用户输入””之类的字符。这就不必说了。...还有一部分其实并不是用户允许输入那些容易引起XSS的字符,而是讨厌这 种报错的形式,毕竟一大段英文加上一个ASP.Net典型异常错误信息,显得这个站点出错了,而不是用户输入了非法的字符,可是自己又不知道怎么不让它报...对于希望很好的处理这个错误信息,而不使用默认ASP.Net异常报错信息的程序员们,你们不要禁用validateRequest=false。
大家好,又见面了,我是你们的朋友全栈君。...如果成功,返回非0。 If the function fails, the return value is 0 (zero)....如果失败,返回0,错误可通过GetLastError获得 The function fails if the requested read operation crosses into an area...重点:当操作进入了进程不可读取的部分时会失败,大多数人犯的错误。...GetLastError(菜鸟一枚,勿喷)获取错误代码,我用了后发现代码是5,然后用IDE工具中的错误查看器查出错误是: 仅完成部分的 ReadProcessMemory 或 WriteProcessMemory
而是由于在底层,杀死进程的API已经被hook了,这里应该是内核hook,当想要结束的进程为核心进程时,就直接返回一个无法终止进程的弹窗。...taskkill或者通过任务管理器等GUI工具去结束进程,本质上都是调用的TerminateProcess,有些可能是调用更为底层的ZwTerminateProcess,但是本质都差不多,只是看该进程用的什么...通过hook TerminateProcess让执行该函数时直接返回没有权限。...AdjustTokenPrivileges Error,Error is:%d\n", GetLastError());return FALSE;}else{// 根据错误码判断是否特权都设置成功...那么如果要选择性保护进程,又应该怎么做呢。注意TerminateProcess的第一个参数,传入的是一个句柄,这个句柄需要从openprocess的返回值获得,所以我们还需要知道打开进程的句柄。