我有一个非常底层(像真的非常底层,基本上就是所有IOCTL调用和一些枚举API调用)的程序,在客户机的Windows Vista / 7上不时会崩溃。不幸的是,我无法获得任何崩溃转储文件,但一位乐于助人的用户提到在XP兼容模式下运行程序解决了问题。
该应用程序始终以完全管理员权限启动(它是从需要管理员授权的另一个程序中启动的),因此这不是UAC问题。我没有使用任何弃用的API,并且我也没有依赖任何注册表修改等内容。我只是发出对磁盘进行枚举的调用,然后使用IOCTL命令来获取关于所有已连接设备的更多低级信息。
在XP兼容模式下会发生什么? Windows向我的应用程序注入了什么或以其他方式对其进行了沙箱处理,以防止它在Vista / 7上崩溃?在被告知在XP兼容模式下运行良好之前,我最初怀疑存在堆损坏(虽然我已经尝试过复制或跟踪此问题而无果)。
是否有人可以建议任何可能的问题,在XP Compat模式下可以避免这些问题,我应该尝试解决此问题?谢谢!
编辑:
还有一件非常重要的事情需要提到:我正在从用户空间调用DDK /内核函数,以便访问某些未通过WIN32 API公开的功能。
我正在使用ZwReadFile、ZwCreateFile、ZwWriteFile、RtlInitUnicodeString、ZwQueryVolumeInformationFile、ZwDeviceIoControlFile、ZwSetInformationFile、ZwClose。
我正在调用的IOCTL包括IOCTL_DISK_GET_PARTITION_INFO_EX、IOCTL_STORAGE_GET_DEVICE_NUMBER、IOCTL_DISK_GET_LENGTH_INFO和IOCTL_DISK_GET_DRIVE_LAYOUT_EX。