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

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

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

Continue reading

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

Continue reading

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

Continue reading