zoukankan      html  css  js  c++  java
  • WINCE6.0隐藏文件夹和应用程序访问物理寄存器

     

    ********************************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()函数,这样就可以实现此功能了。

    参考代码如下所示:

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

  • 相关阅读:
    OI 复赛注意事项整理
    U138415 堆箱子 | 扩展欧几里得 扩欧
    扩欧-扩展欧几里得 | 数论学习笔记
    U138097 小鱼吃大鱼 埃氏筛
    牛客1029A 袜子分配
    U137971 公司搬迁
    初赛知识点整理
    SQL注入技术
    写出易于调试的SQL
    dos命令大全
  • 原文地址:https://www.cnblogs.com/LoongEmbedded/p/5298753.html
Copyright © 2011-2022 走看看