月度归档:2016年09月

FIELD_OFFSET 宏详解

在日常开发过程中,我们常常用如下这种形式的结构体来传递数据。

typedef struct  _PATH_INFO {
    HANDLE  hPPid;              // 父进程 PID
    HANDLE  hPid;               // 子进程 PID
    ULONG   PathLength;         // 子进程路径长度
    TCHAR   Path[1];            // 用于存储子进程路径
} PATH_INFO, *PPATH_INFO;

其中前三个成员用来描述一个进程的父进程PID和自身进程的PID以及路径长度信息,而最后一个成员来描述该路径的实际内容,由于路径长度是不定的,我们为了节省内存,加了一个 PathLength 的成员来描述路径长度,不会将实际储存路径的成员设置成固定的 512 大小或者 1024 大小,这样会非常浪费内存,在使用过程中,我们会想如下这种方式来给结构体分配内存和填充数据。

继续阅读

WinDBG 使用多个路径下的符号表

在开发调试问题的过程中,我们经常使用 WinDBG 来调试崩溃、卡死或蓝屏的 Dump 文件,调试时我们需要将微软的符号表路径导入到 WinDBG 中,也需要将自己程序的符号表文件导入到 WinDBG 中,这样看 Dump 才一清二楚。导入多个符号表的方法就是在每个符号表路径后增加一个分号 ; 然后紧接着下一个符号表路径。

继续阅读

BindView 可查看网络过滤驱动的工具

BindView 是微软提供的一个可以查看网络过滤驱动的小工具,并且是有源码可以学习改造的,该工具的源码地址在微软的 github 帐号下就可以找到:https://github.com/Microsoft/Windows-driver-samples/tree/master/network/config/bindview,编译运行后可以看到如下效果:

继续阅读

自定义凭据开启 Windows10 锁屏界面

微软提供给我们可以自定义凭据的功能,我们可以通过微软提供的接口对登录界面做一系列的定制。但最近在开发过程中遇到了一些问题。在 Win10 系统中,我们无法接收到 CPUS_UNLOCK_WORKSTATION 锁屏的消息,无论在用户登录后点击锁屏还是重新启动电脑后用户登录界面,我们都无法收到该消息。而 Win7 是可以收到这个消息的,所以我们就要考虑在对 Win7 和 Win10 做不同的处理。然而最近搜索一片文章发现,Win10 一样是可以开启锁屏界面的。

继续阅读