WINCE6.0隐藏文件夹和应用程序访问物理寄存器

时间:2023-01-31 17:31:43
 

********************************LoongEmbedded********************************

作者:LoongEmbedded(kandi)

时间:2011.11.11

类别:WINCE应用开发

********************************LoongEmbedded********************************

 

本周的工作的一部分内容是根据产品的需求做些修改,其中包括应用程序来直接控制物理寄存器来实现关机,以及如何保护保存在FLASH分区中的应用程序的问题,下面总结一下,作为备忘录。

 

1.      应用程序访问物理寄存器

背景:产品在异地做试验,不便于更新NK,但客户要求在推出应用程序的时候关机。

 

刚开始尝试用MmMapIoSpace()和MmUnmapIoSpace()函数的方式来实现,但会出现内核出错的信息,因为WINCE6.0的应用程序是运行在用户态的,用户态下的应用程序不能直接访问物理寄存器(比如S3C6410的GPNDATA寄存器)。后来经过了解,可以采用应用程序加载流驱动,然后由流驱动来访问物理寄存器,从而实现关机功能。

 

应用程序的设计思想如下:

1)      调用RegCreateKeyEx()函数创建一个子键。

2)      在上面创建的子键下创建驱动(比如GPIO.dll)所需要的键项和键值。

3)      调用ActivateDeviceEx()函数来加载流驱动GPIO.dll。

4)      调用CreateFile函数来获取GPIO.dll的句柄。

5)      调用DeviceIoControl()函数来通过操作系统的调用,从而调用GPIO.dll的GPO_IOControl()函数,这样就可以实现此功能了。

参考代码如下所示:

WINCE6.0隐藏文件夹和应用程序访问物理寄存器

图1

 

2.      隐藏文件夹

背景:为了加强对应用软件的保护,避免用户的操作而破坏了应用程序

基本可行的方式有如下几种:

1)      为应用程序的文件夹建立一个专门的分区,然后隐藏此分区

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FDSK\FATFS]

    "FriendlyName"="PocketMory FAT FileSystem"

;    "Dll"="fatfsd.dll"

    "Flags"=dword:00000014               ; FATFS_ENABLE_BACKUP_FAT | FATFS_DISABLE_AUTOSCAN

    "Folder"="PocketMory"

    "FormatExfat"=dword:1

;    "EnableCacheWarm"=dword:0

    "CheckForFormat"=dword:1

    "EnableWriteBack"=dword:1

      

    "MountAsRoot"=dword:1        ; for ROM-only file system   

   

    "DisableAutoScan"=dword:1

   

IF IMGHIVEREG

   "MountAsBootable"=dword:1

ENDIF IMGHIVEREG

 

比如应用程序放在名称为PocketMory的分区中,那么只需要在上面注册表信息的基础上增加”MountHidden”=1就可以了,但是这种方式是把整个分区隐藏了,后面就不便于往此分区写数据了。

 

2)      采用SetFileAttributes()函数来设置文件或是文件夹的属性

隐藏文件夹LoongEmbedded

TCHAR m_szHiddenFolder[] = TEXT("\\SDMMC\\LoongEmbedded");

SetFileAttributes(m_szHiddenFolder,FILE_ATTRIBUTE_HIDDEN);

 

当然也可以重新显示此文件夹

SetFileAttributes(m_szHiddenFolder,FILE_ATTRIBUTE_NORMAL);

 

这种方式,我试过下面的方式来设置此文件夹为只读的方式,但是还是可以删除,不知道为什么?

SetFileAttributes(m_szHiddenFolder,FILE_ATTRIBUTE_READONLY);

而且如果设置为系统属性也可以隐藏此文件夹

SetFileAttributes(m_szHiddenFolder,FILE_ATTRIBUTE_SYSTEM);

 

3)      采用守护进程的思想,当删除应用程序的关键内容时做保护,这样的方式我没有实现,但这应该是一种不错的办法。