次の方法で共有


FNFDINOTIFY マクロ (fdi.h)

FNFDINOTIFY マクロは、デコーダーの状態でアプリケーションを更新するアプリケーション定義コールバック通知関数の宣言を提供します。

構文

void FNFDINOTIFY(
   fn
);

パラメーター

fn

通知の種類。

価値 意味
fdintCABINET_INFO
0x00
キャビネットに関する一般的な情報。

この値を設定すると、FDINOTIFICATION 構造体に次の情報が設定されます。

  • psz1 が次のキャビネットの名前を指す (パス情報を除く)
  • psz2 は、次のディスクの名前を指します
  • psz3 がキャビネット パス名を指す
  • setID は、現在のキャビネットのセット ID と等しくなります
  • iCabinet は、キャビネット セット内のキャビネット番号 (最初のキャビネットの場合は 0、2 番目のキャビネットの場合は 1 など) と等しくなります。
アプリケーションは、成功を示す場合は 0 を返す必要があります。失敗を示 -1 すると、FDICopy が中止されます。 fdintCABINET_INFO 通知は、FDICopyによって開かれた各キャビネットに対して 1 回提供されます。これには、キャビネット境界にまたがるファイルのために開かれた継続キャビネットが含まれます。
fdintPARTIAL_FILE
0x01
キャビネット内の最初のファイルは、前のキャビネットからのファイルの継続です。

この値を設定すると、FDINOTIFICATION 構造体に次の情報が設定されます。

  • psz1 は、前のキャビネットから続くファイルの名前を指します
  • psz2 は、ファイルの最初のセグメントが存在するキャビネットの名前を指します
  • psz3 は、ファイルの最初のセグメントが存在するディスクの名前を指します
fdintPARTIAL_FILE 通知は、以前のキャビネットから継続したキャビネットの先頭にあるファイルに対して呼び出されます。 この通知は、FDICopy が、前のキャビネットから引き続きファイルがあるシリーズの 2 番目以降のキャビネットで開始された場合にのみ発生します。 成功した場合はアプリケーションから 0 が返されるか、失敗を示す -1 が返されます。
fdintCOPY_FILE
0x02
コピーするファイルを識別する情報。

この値を設定すると、FDINOTIFICATION 構造体に次の情報が設定されます。

  • psz1 は、キャビネット内のファイルの名前を指します
  • cb ファイルの圧縮されていないサイズと等しくなります
  • 日付 は、ファイルの 16 ビット MS-DOS 日付と等しくなります
  • 時間 はファイルの 16 ビット MS-DOS 時間と等しくなります
  • attribs は、ファイルの 16 ビット MS-DOS 属性と等しくなります。 さらに、ファイル名が UTF-8 として解釈されることを意図している場合は、_A_NAME_IS_UTF フラグが設定されます。

上記のメンバーはキャビネット ファイルから直接取得されることに注意してください。 キャビネット ファイルが悪意のある場合、名前に無効なファイル名または悪意のあるファイル名文字が含まれている可能性があります。

アプリケーションは、3 つの値のいずれかを返す必要があります。ファイルをスキップする (つまりコピーしない) 場合は 0。FDICopy中止する -1 (負の値) ;または、ファイルを書き込む場所を示す 0 以外の (および負の 1 以外の) ファイル ハンドル。 ファイル ハンドルは、FDICreateに提供される PFNCLOSE 関数と互換性がある必要があります。 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 返し、FDICopy中止する FALSE または -1 を する必要があります。 FDI は、このコールバックがエラーを返した場合でも、ターゲット ファイルが閉じられたことを前提としています。FDI は PFNCLOSE 使用してファイルを閉じようとしません。
fdintNEXT_CABINET
0x04
ファイルは次のキャビネットに続きます。

この値を設定すると、FDINOTIFICATION 構造体に次の情報が設定されます。

  • psz1 は、現在のファイルが継続される次のキャビネットの名前を指します
  • psz2 はファイル ハンドルになります (fdintCOPY_FILEから発生)
  • psz3 がキャビネット パス情報を指す
  • fdie が成功またはエラー値と等しい
この通知は、fdintCOPY_FILE 後続のキャビネットから現在のキャビネットに続くファイルをコピーするように指示された場合にのみ呼び出されます。 アプリケーションはキャビネット名を変更できるため、psz3示されるキャビネット パス名は、返される前に検証することが重要です。 さらに、アプリケーションはキャビネットが存在し、戻る前に読み取り可能であることを確認する必要があります。必要に応じて、アプリケーションはディスク変更プロンプトを発行して確認する必要があります。

この関数が FDI に戻ると、FDI は、指定されたキャビネットの setID および iCabinet フィールドがそのキャビネットの期待値と一致することを確認します。 そうでない場合、FDI は、適切なキャビネット ファイルが指定されるまで、またはこの関数が -1 を返して FDICopy 呼び出しを中止するまで、fdie フィールドが FDIERROR_WRONG_CABINETに設定された fdintNEXT_CABINET 通知メッセージを送信し続けます。 この関数から戻った後、キャビネット ファイルが存在しない、読み取り可能、または破損している場合、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
列挙の状態。

戻り値

何一つ

必要条件

要件 価値
ターゲット プラットフォーム の ウィンドウズ
ヘッダー fdi.h

関連項目

FDICopy の

FDINOTIFICATION