FNFDINOTIFY 宏 (fdi.h)

FNFDINOTIFY宏會提供應用程式定義回呼通知函式的宣告,以在解碼器的狀態上更新應用程式。

語法

void FNFDINOTIFY(
   fn
);

參數

fn

通知類型。

意義
fdintCABINET_INFO
0x00
封包的一般資訊。

設定此值時,會填入 FDINOTIFICATION 結構,其中包含下列資訊:

  • psz1 會指向下一個封包的名稱, (排除路徑資訊)
  • psz2 會指向下一個磁片的名稱
  • psz3 會指向封包路徑名稱
  • setID 將等於目前封包的集合識別碼
  • iCabinet 會等於第一個封包的封包集內的封包編號 (0,第二個封包為 1,依此類推。)
應用程式應該會傳回 0 以表示成功,或 -1 表示失敗,這會中止 FDICopy。 將針對FDICopy所開啟的每個封包提供一次fdintCABINET_INFO通知;這包括因為檔案跨越封包界限而開啟的接續封包。
fdintPARTIAL_FILE
0x01
封包中的第一個檔案是先前封包中的檔案接續。

設定此值時,會填入 FDINOTIFICATION 結構,其中包含下列資訊:

  • psz1 會指向從上一個封包繼續的檔案名
  • psz2 會指向檔案第一個區段所在的封包名稱
  • psz3 會指向檔案第一個區段所在的磁片名稱
封包開頭的檔案會呼叫 fdintPARTIAL_FILE 通知,該封包會從上一個封包繼續。 只有在序列中的第二個或後續封包上啟動 FDICopy 時,才會發生此通知,該封包的檔案會從上一個封包繼續。 應用程式應該會傳回 0 表示成功,或 -1 表示失敗。
fdintCOPY_FILE
0x02
識別要複製之檔案的資訊。

設定此值時,會填入 FDINOTIFICATION 結構,其中包含下列資訊:

  • psz1 會指向封包中的檔案名;cb 會等於檔案的未壓縮大小
  • date 會等於檔案的 16 位 MS-DOS 日期
  • time 等於檔案的 16 位 MS-DOS 時間
  • attribs 會等於檔案的 16 位 MS-DOS 屬性
應用程式應該會傳回三個值的其中一個;0 略過 (,也就是不要複製) 檔案;-1 (負一個) 中止 FDICopy;或非零 (和非負一) 檔案控制代碼,指出寫入檔案的位置。 檔案控制代碼必須與提供給FDICreatePFNCLOSE函式相容。 系統會針對在目前封包內啟動的每個檔案呼叫 fdintCOPY_FILE 通知,讓應用程式有機會要求複製或略過檔案。
fdintCLOSE_FILE_INFO
0x03
關閉檔案,設定相關資訊。

設定此值時,會填入 FDINOTIFICATION 結構,其中包含下列資訊:

  • psz1 會指向封包中的檔案名
  • hf 會是源自 fdintCOPY_FILE) 的檔案控制碼 (
  • 日期 日期會等於檔案的 16 位 MS-DOS 日期
  • 時間 時間等於檔案的 16 位 MS-DOS 時間
  • attribs 屬性會等於檔案的 16 位 MS-DOS 屬性, (減去_A_EXEC位)
  • cb 會等於 0 或 1,指出是否應該在擷取 (1) 之後執行檔案,或是否 (0)
如果 cb 等於 1,應用程式必須負責執行檔案。 所有資料都已寫入目標檔案之後,就會呼叫 fdintCLOSE_FILE_INFO 通知。 應用程式必須使用提供的 hf 控制碼) 來關閉檔案 (,並設定檔案日期、時間和屬性。 應用程式應該會傳回 TRUE 以成功 ,FALSE 或 -1 表示中止 FDICopy。 FDI 假設目標檔案已關閉,即使此回呼傳回失敗也一樣;FDI 不會嘗試使用 PFNCLOSE 關閉檔案。
fdintNEXT_CABINET
0x04
檔案會繼續下一個封包。

設定此值時,會填入 FDINOTIFICATION 結構,其中包含下列資訊:

  • psz1 會指向目前檔案繼續所在的下一個封包名稱
  • psz2 將是源自 fdintCOPY_FILE) 的檔案控制碼 (
  • psz3 會指向封包路徑資訊
  • fdie 將等於成功或錯誤值
只有在 指示fdintCOPY_FILE 將後續封包繼續的檔案複製到目前的封包時,才會呼叫此通知。 由於應用程式可以修改封包名稱,因此請務必先驗證 psz3所表示的封包路徑名稱,然後再傳回。 此外,應用程式應該確保封包存在且可在傳回之前讀取;如有必要,應用程式應該發出磁片變更提示以確認。

當此函式返回 FDI 時,FDI 會確認所提供封包的 setIDiCabinet 欄位符合該封包的預期值。 如果沒有,則 FDI 會繼續傳送 fdintNEXT_CABINET 通知訊息,並將 fdie 欄位設定為 FDIERROR_WRONG_CABINET,直到指定正確的封包檔案,或直到此函式傳回 -1 並中止 FDICopy 呼叫為止。 如果從此函式傳回之後,封包檔案不存在、可讀取或已損毀,則 fdie 欄位會等於下列其中一個值:

  • FDIERROR_CABINET_NOT_FOUND
  • FDIERROR_NOT_A_CABINET
  • FDIERROR_UNKNOWN_CABINET_VERSION
  • FDIERROR_CORRUPT_CABINET
  • FDIERROR_BAD_COMPR_TYPE
  • FDIERROR_RESERVE_MISMATCH
  • FDIERROR_WRONG_CABINET
如果沒有錯誤, 則 fdie 會等於FDIERROR_NONE。 應用程式應該會傳回 0 以表示成功,或 -1 表示失敗,這會中止 FDICopy
fdintENUMERATE
0x05
列舉狀態。

傳回值

需求

   
目標平台 Windows
標頭 fdi.h

另請參閱

FDICopy

FDINOTIFICATION