对SOCKET句柄做的一些实验

2009-3-24 Nie.Meining Debug

我一直怀疑Socket和其它类别的HANDLE不一样。(或者说究竟是不是一个句柄?)    
WinSock.h中对SOCKET的定义是:   typedef UINT_PTR SOCKET;     
而WinNT.h中对HANDLE的定义是:   typedef void *HANDLE;    

SOCKET不仅定义上同HANDLE不一样,而且打开方式也不一样。Windows的内核对象的句柄在打开时,一般都会要求一个安全描述符参数LPSECURITY_ATTRIBUTES lpEventAttributes,但是Socket不需要。   

SOCKET到底是不是句柄,有没有一个对应的内核对象?各种资料上的说法都不一样。我写了个用SOCKET监听端口的程序,在虚拟机里运行,然后用Windbg调试了一下,发现Socket的句柄值对应的是一个File类型的可继承的内核对象: 

005c: Object: 86251778 GrantedAccess: 001f01ff (Inherit) Entry: e10950b8

阅读全文>>

评论(0) 浏览(13988)

探究为何vbs脚本无法模拟PrintScreen按键

2009-3-7 Nie.Meining Debug

今天群里有个人问为什么vbs脚本无法模拟截取屏幕的按键,我试了一下,果然不行,而模拟其它常规按键(如abcdefg)都是没有问题的。但是微软官方的帮助文档上明确说明了PRINT SCREEN这个键可以用{PRTSC}参数模拟……
我又用C++写了一个模拟PRINT SCREEN键的程序做实验,代码很简单:

#define UNICODE

#define _UNICODE

#include <windows.h>

#include <tchar.h>

int WINAPI _tWinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) {

阅读全文>>

评论(0) 浏览(46243)

【转帖】谈对APC的一点理解

2009-3-6 Nie.Meining Coding

最近想做Ring0下执行Ring3代码的东西。查资料找到种通过APC实现的方法,其思想是将要执行的代码注入Ring3下的进程,然后用APC排队。我实现了一下,感觉不太稳定,稍不注意被注入的进程就挂掉了(比蓝屏好多了,呵呵)。我怀疑是KeStackAttachProcess的问题。要注入进程的用户态空间就必然要Attach,但是只要Attach了成功率就很容易变成人品问题……
这里有一篇比较好的讲APC的文章,combojiang大牛那看到的,转过来大家分享:

【转帖】谈对APC的一点理解

 

异步过程调用(APCs) 是NT异步处理体系结构中的一个基础部分,理解了它,对于了解NT怎样操作和执行几个核心的系统操作很有帮助。

阅读全文>>

评论(0) 浏览(12992)

Powered by emlog