WINCE6.0隐藏文件夹和应用程序访问物理寄存器
********************************LoongEmbedded********************************
作者:LoongEmbedded(kandi)
時間:2011.11.11
類別:WINCE應(yīng)用開發(fā)
********************************LoongEmbedded********************************
?
本周的工作的一部分內(nèi)容是根據(jù)產(chǎn)品的需求做些修改,其中包括應(yīng)用程序來直接控制物理寄存器來實現(xiàn)關(guān)機,以及如何保護保存在FLASH分區(qū)中的應(yīng)用程序的問題,下面總結(jié)一下,作為備忘錄。
?
1.????? 應(yīng)用程序訪問物理寄存器
背景:產(chǎn)品在異地做試驗,不便于更新NK,但客戶要求在推出應(yīng)用程序的時候關(guān)機。
?
剛開始嘗試用MmMapIoSpace()和MmUnmapIoSpace()函數(shù)的方式來實現(xiàn),但會出現(xiàn)內(nèi)核出錯的信息,因為WINCE6.0的應(yīng)用程序是運行在用戶態(tài)的,用戶態(tài)下的應(yīng)用程序不能直接訪問物理寄存器(比如S3C6410的GPNDATA寄存器)。后來經(jīng)過了解,可以采用應(yīng)用程序加載流驅(qū)動,然后由流驅(qū)動來訪問物理寄存器,從而實現(xiàn)關(guān)機功能。
?
應(yīng)用程序的設(shè)計思想如下:
1)????? 調(diào)用RegCreateKeyEx()函數(shù)創(chuàng)建一個子鍵。
2)????? 在上面創(chuàng)建的子鍵下創(chuàng)建驅(qū)動(比如GPIO.dll)所需要的鍵項和鍵值。
3)????? 調(diào)用ActivateDeviceEx()函數(shù)來加載流驅(qū)動GPIO.dll。
4)????? 調(diào)用CreateFile函數(shù)來獲取GPIO.dll的句柄。
5)????? 調(diào)用DeviceIoControl()函數(shù)來通過操作系統(tǒng)的調(diào)用,從而調(diào)用GPIO.dll的GPO_IOControl()函數(shù),這樣就可以實現(xiàn)此功能了。
參考代碼如下所示:
圖1
?
2.????? 隱藏文件夾
背景:為了加強對應(yīng)用軟件的保護,避免用戶的操作而破壞了應(yīng)用程序
基本可行的方式有如下幾種:
1)????? 為應(yīng)用程序的文件夾建立一個專門的分區(qū),然后隱藏此分區(qū)
[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
?
比如應(yīng)用程序放在名稱為PocketMory的分區(qū)中,那么只需要在上面注冊表信息的基礎(chǔ)上增加”MountHidden”=1就可以了,但是這種方式是把整個分區(qū)隱藏了,后面就不便于往此分區(qū)寫數(shù)據(jù)了。
?
2)????? 采用SetFileAttributes()函數(shù)來設(shè)置文件或是文件夾的屬性
隱藏文件夾LoongEmbedded
TCHAR m_szHiddenFolder[] = TEXT("\\SDMMC\\LoongEmbedded");
SetFileAttributes(m_szHiddenFolder,FILE_ATTRIBUTE_HIDDEN);
?
當(dāng)然也可以重新顯示此文件夾
SetFileAttributes(m_szHiddenFolder,FILE_ATTRIBUTE_NORMAL);
?
這種方式,我試過下面的方式來設(shè)置此文件夾為只讀的方式,但是還是可以刪除,不知道為什么?
SetFileAttributes(m_szHiddenFolder,FILE_ATTRIBUTE_READONLY);
而且如果設(shè)置為系統(tǒng)屬性也可以隱藏此文件夾
SetFileAttributes(m_szHiddenFolder,FILE_ATTRIBUTE_SYSTEM);
?
3)????? 采用守護進程的思想,當(dāng)刪除應(yīng)用程序的關(guān)鍵內(nèi)容時做保護,這樣的方式我沒有實現(xiàn),但這應(yīng)該是一種不錯的辦法。
?
?
總結(jié)
以上是生活随笔為你收集整理的WINCE6.0隐藏文件夹和应用程序访问物理寄存器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WINCE6.0+S3C6410基于SD
- 下一篇: S3C6410禁用和启用触摸屏