1隐藏区与私密区
私密区是由用户自己控制的一块空白区域,用户通过提供的接口对其进行逻辑读写。
隐藏区是具有文件系统管理功能的逻辑分区,但通常情况下是不可见的,需要通过接口函数才能将其映射为可见分区,或通过专用的接口函数将其隐藏。
Chipsbank提供的闪存盘方案可在所有类型的闪存盘中提供私密区的功能,可在除了加密盘的所有类型的闪存盘中提供隐藏分区的功能。
具体如下:
普通盘
普通分区
私密区
隐藏区
分区盘
普通分区
普通分区
私密区
隐藏区
AUTORUN盘
普通分区
CD-ROM区
私密区
隐藏区
私密区对应的逻辑单元号为2,隐藏区对应的逻辑单元号为3。私密区之前的两个分区按顺序分别为0,1,但是逻辑单元号为1的分区容量可设为0。
隐藏区和私密区的大小可在闪存盘量产时通过量产工具的设置界面中指定大小。
2主控类型
二次开发接口支持2095,并且与具体的应用相关,请注意函数调用说明。
3标准错误返回值
如果调用一个函数返回错误,可再通过调用GetError()获得错误的原因。错误代码定义如下:
序号
错误码常量名称
错误码值
错误描述
1
ERR_NO_ERROR
0
成功。
2
ERR_DISK_NOT_FOUND
1
未发现磁盘。
3
ERR_CFG_TABLE_NOT_FOUND
2
未找到配置表。
4
ERR_BAD_PASSWORD
3
错误的密码。
5
ERR_PRIVATE_ZONE_NOT_FOUND
4
私密区不存在。
6
ERR_DISK_NOT_OPENNED
5
磁盘未打开。
7
ERR_HIDE_ZONE_NOT_FOUND
6
隐藏区不存在。
8
ERR_PASSWORD_NOT_FOUND
7
密码未找到。
9
ERR_API_NOT_SUPPORTED
8
不支持的接口。
10
ERR_BAD_AUTHORIZE_KEY
9
错误的授权码。
11
ERR_BAD_LUN
10
错误的逻辑单元号。
12
ERR_LUN_LOCKED
11
逻辑单元号已锁。
13
ERR_FORMAT_ERROR
12
格式化出错。
14
ERR_BAD_FILENAME
13
错误的文件名。
15
ERR_FILE_NOT_FOUND
14
文件不存在。
16
ERR_CANNOT_GET_SIZE
15
获取规格大小失败。
17
ERR_SIZE_ERROR
16
规格错误。
18
ERR_ISO_WRITE_ERROR
17
写ISO文件失败。
19
ERR_UPDATE_CFG_TABLE_ERROR
18
更新配置表错误。
20
ERR_DISK_READ_ERROR
19
读磁盘错误。
21
ERR_DISK_WRITE_ERROR
20
写磁盘错误。
22
ERR_MULTI_THREAD_NOT_SUPPORTED
21
不支持多线程。
23
ERR_CANNOT_REOPENED
22
重新打开失败。
24
ERR_BAD_PARAMETER
23
参数错误
25
ERR_READ_PROTECTED
24
读保护打开
26
ERR_UNMATCH_VERSION
25
版本错误
27
ERR_UNSUPPORT_SCAN_MODE
26
扫描类型错误,只支持块扫描
28
ERR_UNSUPPORT_43NMFLASH
28
API不支持43纳米Flash
BASE_FILESYSTEM_ERR
Pz接口错误码基数
29
FSE_FILE_NOT_EXIST
(BASE_FILESYSTEM_ERR + 1)
源文件不存在。
30
FSE_FILE_HAD_EXIST
(BASE_FILESYSTEM_ERR + 2)
目标文件不存在。
31
FSE_FILE_OPEN_FAILED
(BASE_FILESYSTEM_ERR + 3)
打开文件失败。
32
FSE_SECTOR_READ_FAILED
(BASE_FILESYSTEM_ERR + 4)
读扇区失败。
33
FSE_SECTOR_WRITE_FAILED
(BASE_FILESYSTEM_ERR + 5)
写扇区失败。
34
FSE_DISK_NOT_ENOUGH_SPACE
(BASE_FILESYSTEM_ERR + 6)
磁盘空间不足。
35
FSE_NOTFIND_DIRTABLEITEM
(BASE_FILESYSTEM_ERR + 7)
未找到可用的目标表项(根目录限制文件数为512)。
36
FSE_DELETE_FAT_FAILED
(BASE_FILESYSTEM_ERR + 8)
删除文件分配表失败。
37
FSE_NEWBUFFER_FAILED
(BASE_FILESYSTEM_ERR + 9)
分配内存失败。
38
FSE_INVALID_FILENAME
(BASE_FILESYSTEM_ERR + 10)
无效的文件名。
39
FSE_CREATE_DIR_FAILED
(BASE_FILESYSTEM_ERR + 11)
创建路径失败。
40
FSE_OPEN_FAT_FAILED
(BASE_FILESYSTEM_ERR + 12)
打开FAT失败。
41
FSE_OPEN_FDT_FAILED
(BASE_FILESYSTEM_ERR + 13)
打开FDT失败。
42
FSE_INVALID_FILE_HANDLE
(BASE_FILESYSTEM_ERR + 14)
无效的文件句柄。
43
FSE_INVALID_FIND_HANDLE
(BASE_FILESYSTEM_ERR + 15)
无效的文件查找句柄。
44
FSE_READ_DATA_CLUSTER_FAILED
(BASE_FILESYSTEM_ERR + 16)
读数据簇失败。
45
FSE_WRITE_DATA_CLUSTER_FAILED
(BASE_FILESYSTEM_ERR + 17)
写数据簇失败。
4二次开发说明
二次开发接口函数以静态LIB库和动态连接库DLL两种方式提供。用户可任选其中的一种方式进行二次开发。
4.1注意事项
序号
注意事项
1
通过API打开设备后,如果需要重新上盘,那么需要先关闭句柄。等待重新上盘后再重新打开句柄。
2
支持多个线程打开同一设备,但是每个线程在单位时间内只能有一个线程操作设备,这点要由API的使用者自己控制。
3
支持一个进程打开多个设备。
4
可支持多个进程打开同一设备,但是状态数据并不会即时更新,进程间通讯需要用户处理。
5
当使用二次开发接口函数的应用程序操作闪存盘后,如果切换到隐藏区后退出应用程序而不拔盘,再次启动应用程序可能会有识别上的错误产生,因此在开发过程中,如果退出应用程序请将隐藏区切换回正常状态。
6
加密盘不支持对隐藏区的切换功能。
7
如果一个设备有两个可见分区,那么通过不同的分区对应的盘符都可以打开这个设备,并且在调用Open类函数返回的句柄是不一样的,在退出程序之前,也要分别对两个句柄执行CloseHandle进行释放。
8
如果对一个分区调用两次Open类函数,那么两次调用返回的句柄也是不一样的。在退出程序之前,也要分别对两个句柄执行CloseHandle进行释放。
9
目前4.42以上的版本只支持Win2K/WinXP/Vista,不支持Win98/WinMe以及Win2003。
10
支持和配合量产工具中的自定义盘类型。即可以在量产工具中设置出现三个盘符,以及设置Lun号的先后顺序。注意,如果设置出现三个盘符,且出现的三个盘符对应Lun0, Lun1,Lun3,那么这种情况下不支持涉及隐藏区的函数。
11
由于系统对于本地盘管理的权限和可移动磁盘管理的权限不同,因此API的使用请尽量在可移动磁盘上操作。
12
API只支持2093p/2095的主控类型
13
API只支持在量产时使用块扫描量产的U盘
4.2风险
多线程访问同一设备的互斥,客户容易自行控制。但是多进程访问同一设备时的互斥,这点在不同的客户开发的程序中显然无法做到,因此存在风险。
4.3开发建议
调用其他函数之前,必须首先调用Open类函数(OpenUsbDisk/OpenUsbDiskEx)打开U盘,并且通过一个标志量标记二次开发接口函数库已经打开,然后在调用每个API函数之前对标志量做判断,只有函数库处于打开的状态才能进行调用。
4.4版本说明
4.4.1文件说明
CBM2095API共包含四个文件,分别为:Chipsbank.h、api2095_dll_M.dll、api2095_dll_M.lib、api2095_lib_M.lib。
4.4.1.1Chipsbank.h
该文件是二次开发接口的头文件。
4.4.1.2api2095_dll_M.dll和api2095_dll_M.lib
其中api2095_dll_M.dll为二次开发接口动态链接库,api2095_dll_M.lib为动态链接库的配套的LIB库文件。
4.4.1.3api2095_lib_M.lib
该文件为二次开发接口表态链接库。
4.4.2在VC6.0中使用
本产品提供两种方式供用户进行二次开发,一种是使用动态链接库,另一种是使用静态链接库。两者的区别是,使用动态链接库进行二次开发时,用户在发布自己的产品时必须将api209X_dll_M.dll动态库随用户的产品一起发布。
4.4.2.1使用动态链接库进行二次开发
使用Chipsbank.h、api2095_dll_M.dll和api2095_dll_M.lib三个文件进行开发,操作步骤如下:
1.将Chipsbank.h和api2095_dll_M.lib放到工作目录(其它目录也可以),然后添加到VC工程中。
2.在需要调用API接口的源文件顶部添加代码:#include “Chipsbank.h”,包含Chipsbank.h头文件。
3.将api2095_dll_M.dll放到输出目录(与用户生成的可执行文件放在同一目录下)。
4.4.2.2使用静态链接库进行二次开发
使用Chipsbank.h和api2095_lib_M.lib两个文件添加到工程中,在需要调用API接口的源文件顶部添加代码:#include “Chipsbank.h”,包含Chipsbank.h头文件。同时按下图对VC工程选项进行设置:
图 1静态库工程选项设置图
说明:由于目前版本中提供的静态库是静态编译的Release版本,所以用户只能进行Release版的二次开发。
4.4.3在VS2005及VS2008下使用
4.4.3.1使用动态链接库进行开发
使用Chipsbank.h、api2095_dll_M.dll和api2095_dll_M.lib三个文件进行开发,操作步骤如下:
1.将Chipsbank.h和api2095_dll_M.lib放到工作目录(其它目录也可以),然后添加到VS2005工程中。
2.在需要调用API接口的源文件顶部添加代码:#include “Chipsbank.h”,包含Chipsbank.h头文件。
3.将api2095_dll_M.dll放到输出目录(与用户生成的可执行文件放在同一目录下)。
4.4.3.2使用静态链接库进行二次开发
不支持。由于本版本发布的静态链接库为VC6.0下生成的,所以只支持VC6.0环境下的静态编译。