首页

如何寻找IE浏览器的执行路径  

基于某些原因,有些开发者希望能获取到IE浏览器(Internet Explorer)的全路径,这样就可以在二进制执行文件上加上一些选项了。 其实,并不需要这样。 只需要向ShellExecute函数传递”IEXPLORE.EXE”这个参数,它就会有方法找到IE的执行文件并想办法执行它,如下图所示: 这个ShellExecute函数会负责为我们干”脏活̶...

关于x86平台上内存对齐的重要性,第二部分

各种 Interlocked 函数(InterlockedIncrement 等)要求被更新的变量正确对齐,即使在 x86 平台上,CPU 以静默方式修复未对齐的内存访问。 如果将未对齐的指针传递给 Interlocked 函数之一,操作仍然会成功,但结果将不是原子的。 另一个处理器可能会看到部分完成的更新。 这是一个特别隐蔽的错误,因为它只发生在非常严格的时序条件下的多处理器机器上。 您将很难在...

关于x86平台上内存对齐的重要性

有时候,未对齐的内存访问,可能会导致系统挂起。 有一些显卡不允许驱动程序一次性就访问所有的显卡内存。取而代之的做法是:它给你一个访问窗口,你可以从中选择一个显存的子集来进行访问。举个例子,EGA显卡有256K的字节空间,它们被划分到4个64K的存储单元中。如果你希望访问第一个64K,则你需要将这个64K空间(bank 0)选择到访问窗口中,同样的道理,如果你需要访问第二个64K,则你需要将它(ba...

为什么有些结构体中会定义一个字节的数组  

有一些Windows结构体是可变长度的,它们通常会有一个固定长度的头部,然后接下来是一个可变长度的数组。当这些结构体被声明的时候,它们通常会被声明为一个只有一个字节元素的数组,如下图所示: 如果我们观察一下头文件中的定义,就会发现,这里的ANYSIZE_ARRAY被定义成了1,也就是说,这个结构体的结尾是一个只包含1个字节的数组。 通过这样的声明,我们可以分配一个可变长度的结构体,如下图所示: ...

为什么不能将FILETIME看做__int64  

我们先来看看FILETIME这个结构体,它通过组合两个DWORD来表示了一个64位的整数值。 你可能想将这个FILETIME结构体看做一个整体,然后将它们看做一个__int64结构来进行访问。 毕竟,这两个类型的内存布局都是一样的,下面是一些开发者写的代码,我们来看看: 上面的代码有什么错呢? 你答对啦:对齐。 因为这个FILETIME结构体包含两个DWORD部分,所以它只需要4个字节的对齐,...

叨一叨注册表中的字符串类型值  

如果一个注册表表项的值类型为REG_SZ,请注意了,它并不意味着这个字符串一定会以一个空字符串结束。从底层实现的角度来说,注册表仅仅是一个层次化组织的名值数据库而已。 所以,你可以使用一些小技巧来”欺骗”注册表。 很多人都会欺骗注册表。你会发现有很多本应该被设置为REG_DWORD的值被存储成了一个4个字节的REG_BINARY。(这部分是 Windows 95 注册表的保...

说说有点意思的STRRET结构体

如果你曾经折腾过外壳命名空间(shell namespace),则我想你一定碰到过古怪的STRRET结构体。 这个结构体是IShellFolder::GetDisplayNameOf用来返回一些列外壳项目名称的。 如果你阅读文档就可以知道,一个STRRET结构有时候是一个ANSI字符串的缓冲区,有时候它又是一个指向UNICODE字符串的指针,有时候(这个时候是最奇怪的情况)它会是一个指向一个pid...

误解:如果你想使用AWE,则必须先启用PAE

我们先来看看AWE的一个官方解释,看看它到底是什么样一个玩意儿: 地址窗口扩展 (AWE) 是一组扩展,允许应用程序快速操作大于4GB的物理内存。某些数据密集型应用程序,例如数据库管理系统和科学与工程软件,需要访问非常大的数据缓存。 在非常大的数据集的情况下,限制缓存以适应应用程序的2GB用户地址空间是一个严格的限制。在这些情况下,缓存太小而无法正确支持应用程序。 AWE通过允许应用程序在继续使用...

如何编写你自己的类菜单窗口

如果你是一位不走寻常路的人(我知道你一定是),想编写类似菜单那样的窗口,则先不用自己折腾,可以到我们的Platform SDK中找到关于“FakeMenu”的例子代码,参考一下。 这个例子代码位于SDK目录下的”winui\shell\fakemenu”目录中。对于那些没有Platform SDK的人,我想问问你:你在没有 Platform SDK的情况下编写Win32程序...

简单说说PAE和NX之间的奇妙互动

Carmen Crincoli在他自己的博客中介绍了PAE和NX之间的交互,所以今天的内容不是很多,我只是简单地引用他的文章中的一些内容。 这又是一次后兼容性的让步。 如果没有向后兼容工作,XP SP2 将附带NX支持,但是会加上下面这段星号文字: “* 那些不支持PAE的设备驱动程序将无法利用这些新的安全增强功能。我们本可以做一些事情来确保您的系统安全,但我们决定不这样做是为了给您一...