修改操作系统的类型
上面的话题其实很多文章都讨论过了。但是在实际工作中,我们会遇到一些平台迁移的工作。我们会首先将Windows Mobile的软件在Windows CE上运行,以验证功能。不过有些软件检测了操作系统类型,在不修改软件代码的情况下,我们是否可以在Windows CE上运行检测平台类型的应用程序呢?
Windows CE操作系统的Platform. Type类型值是在BSP中被指定的,我们可以通过修改BSP中的Platform. Type来改变系统的Platform. Type。注意:这种情况只能出现在测试时,不应该修改实际产品的平台类型,否则会引起很多安全性的问题。
我们打开Windows CE 6.0 R2的源代码,位置在:
x:\WINCE600\PLATFORM\DEVICEEMULATOR\SRC\INC
我们修改的是DEVICEEMULATOR的代码,如果是其他平台的代码,则去相应BSP文件夹中的指定位置。在BSP的INC文件夹中,我们会找到一个ioctl_cfg.h文件。
在ioctl_cfg.h文件中,我们会找到下面的代码:
#if defined( project_smartfon )
#define IOCTL_PLATFORM_TYPE (L"SmartPhone\0")
#elif defined( project_wpc )
#define IOCTL_PLATFORM_TYPE (L"PocketPC\0SSDK\0")
#else
#define IOCTL_PLATFORM_TYPE (L"DeviceEmulator")
#endif
#define IOCTL_PLATFORM_OEM (L"Microsoft DeviceEmulator")
#define IOCTL_PLATFORM_TYPE (L"SmartPhone\0")
#elif defined( project_wpc )
#define IOCTL_PLATFORM_TYPE (L"PocketPC\0SSDK\0")
#else
#define IOCTL_PLATFORM_TYPE (L"DeviceEmulator")
#endif
#define IOCTL_PLATFORM_OEM (L"Microsoft DeviceEmulator")
Device Emulator的BSP通过编译选项区分了不同的平台类型,如果是Windows CE系统,则Platform. Type为DeviceEmulator。好了,我们可以通过修改IOCTL_PLATFORM_TYPE的值,来“欺骗”操作系统,让应用程序认为自己运行在Pocket PC或Smartphone上。注意:因为Windows Mobile和Windows CE的函数库存在巨大差异,Windows Mobile的应用程序在Windows CE上未必能够直接运行。