如何進行U盤二次開發?

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環境下的靜態編譯。

相關問題答案