2013年10月26日
摘要: Windows Services 学习一、学习点滴1、本机服务查看:services.msc /s2、服务手动安装(使用sc.exe):sc create MemoryStatus binpath= c:\MyServices\MemoryStatus.exesc delete MemoryStatus3、把服务所在进程杀掉,服务也就停止了。4、服务删除,错误信息:D:\>sc delete Sample_Srv[SC] DeleteService FAILED 1072D:\>sc stop Sample_srv[SC] ControlService FAILED 1052解决: 阅读全文
posted @ 2013-10-26 20:34 -银光- 阅读(17852) 评论(0) 推荐(0)
  2013年8月31日
摘要: 一两个月前为产品写了一个独立的exe,由于产品使用的捕获dump是一个现成的进程外exe,如果以资源的方式集成它容易出现安全警告,由于时间关系没有寻求新的解决方法,还是遵循旧方案,不捕获dump。 最近业余看了会儿breakpad client,想到一个解决方案——其实也蛮简单的,最后exe大概会增加200多KB。下边从头分析。 有这样一种需求,希望一个进程启动之后,有另一个进程来“守护”它,当它发生crash时,能生成dump,然后把它重启;还有一个要求,“守护”进程跟工作进程必须是在同一个物理文件里,就像chromium一样,它是多进程的,但只有exe文件只有一个。借助breakpa... 阅读全文
posted @ 2013-08-31 17:38 -银光- 阅读(5283) 评论(0) 推荐(0)
  2013年8月27日
摘要: breakpad是Google开源的一套跨平台工具,用于dump的处理。很全的一套东西,我这里只简单涉及breakpad客户端,不涉及纯文本符号生成,不涉及dump解析。一、使用 最简单的是使用进程内dump捕获,使用者只需要跟ExceptionHandler打交道,在自己的程序里定义一个ExceptionHandler对象,ExceptionHandler会挂上异常处理、CRT参数错误处理、purecall错误处理,当发生crash时,breakpad会写好dump,然后回调通知使用者。进程内dump并不推荐,但也不算太差,它在程序启动时就开启了一个“Handler thread”,等... 阅读全文
posted @ 2013-08-27 23:23 -银光- 阅读(7752) 评论(0) 推荐(1)
  2013年7月22日
摘要: 一般要捕获异常只需要两个函数:SetUnhandledExceptionFilter截获异常;MiniDumpWriteDump写dump文件。但是由于CRT函数可能会在内部调用SetUnhandledExceptionFilter(NULL),解除我们程序设置的异常处理,这导致我们的程序无法完整捕获崩溃。另外,还有一部分非异常的CRT错误,不属于SEH异常捕获的范畴,需要通过_set_invalid_parameter_handler、_set_purecall_handler拦截,否则会弹出很丑陋的Runtime Error提示框。为保证所有异常都能由我们捕获,需要把SetUnhand.. 阅读全文
posted @ 2013-07-22 22:13 -银光- 阅读(12555) 评论(1) 推荐(2)
  2013年7月16日
摘要: 抓包命令行工具tshark可以用于自定制,相比GUI工具可以实现一些自动化,譬如把某些关注的数据抓起下来存放到文本中,然后再分析输出。 demo:std::string decodeHex(const std::string& strHex){ int nLen = strHex.length() / 2; std::string strRet(nLen, 0); for (int i = 0; i != nLen; ++i) { strRet[i] = ((strHex[2*i]>='a') ? (strHex[2*i]-'a'+10) : (s 阅读全文
posted @ 2013-07-16 20:19 -银光- 阅读(4864) 评论(0) 推荐(1)
  2013年7月13日
摘要: openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密。可以使用非对称加密:公钥加密,私钥解密。openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所以一般的做法是使用对称密钥加密数据,然后再把这个只在当前有效的临时生成的对称密钥用非对称密钥的公钥加密之后... 阅读全文
posted @ 2013-07-13 01:39 -银光- 阅读(57405) 评论(1) 推荐(0)
  2013年7月11日
摘要: HTTP是很常见的协议,虽然用得很多,但对细节的了解却是很浅,这回通过向服务端上传文件信息来理解细节。网络库的选择:1、WinHTTP是windows下常用的库;2、CURL是广受喜爱的开源库。对于我来说,libcurl最大的优点是使用方便,可以把注意力更多的集中到业务层上,提高工作效率,避免重... 阅读全文
posted @ 2013-07-11 22:43 -银光- 阅读(108854) 评论(2) 推荐(0)
  2013年7月1日
摘要: “局域网设置”里有自动配置、代理服务器的设置项目,在进行网络通讯相关的开发时,需要使用到它们,下边介绍如何将这些设置信息读取出来。 当“使用自动配置脚本”不使用时,使用WinHttpGetIEProxyConfigForCurrentUser函数来获取用户的代理配置。如果发现用户使用了自动配... 阅读全文
posted @ 2013-07-01 01:22 -银光- 阅读(7229) 评论(4) 推荐(0)
  2013年5月30日
摘要: 其他人想必会有这样的感觉,早上酣畅淋漓的写完一段代码,心情特别舒适,可是却发现了异常,然后开始debug直到忘记了吃饭,好心情就一点点被消磨掉。这种情况在写多线程代码的时候更是常见,一个工作线程的任务被层层封装,然后才被扔到工作线程队列,我从哪里来是不知道的,甚至于连我在哪里都不知道,设置线程名称,就是为了解决“我在哪里”的问题。在debug时,线程有了名称,查bug的效率会得到提升。 设置线程名称,只有短短的几行代码,windows已经做好了准备,只需要触发它。这么简单的东西其实没有必要写到博客里,但是最近我发现还是有不少人不知道、或者没想到去这么做的。 以上是废话,以下才是重点:#... 阅读全文
posted @ 2013-05-30 21:52 -银光- 阅读(2518) 评论(0) 推荐(0)
  2013年5月28日
摘要: 最近两周使用透明、半透明窗口比较多,在此之前我写代码都借助封装好了的皮肤库,而现在都是“手写”的——石器时代大冒险,遇到了一些困难,在此做总结。1、GDI函数对Alpha值的忽视。 GDI函数只有AlphaBlend api可以提供alpha通道的绘制,使用AlphaBlend可以实现32位位图的绘制。因为只有这个api能识别alpha通道,如果在一个MemDC上用DrawText绘制文本,这些文字区域的alpha值都为0,之后再使用AlphaBlend api把MemDC的位图拷贝到实际DC,就会导致文字区域异常,要么是透明了,要么是变成纯白色了。解决办法是:1、在能达到目的的前提下,从.. 阅读全文
posted @ 2013-05-28 01:18 -银光- 阅读(7413) 评论(0) 推荐(0)