La macro FNFDINOTIFY fournit la déclaration de la fonction de notification de rappel définie par l’application pour mettre à jour l’application sur l’état du décodeur.
Syntaxe
void FNFDINOTIFY(
fn
);
Paramètres
fn
Type de notification.
Valeur
Signification
fdintCABINET_INFO
0x00
Informations générales sur le cabinet.
Lorsque cette valeur est définie, la structure FDINOTIFICATION est remplie avec les informations suivantes :
psz1 pointe vers le nom du cabinet suivant (à l’exception des informations sur le chemin)
psz2 pointe vers le nom du disque suivant
psz3 pointe vers le nom du chemin d’accès de l’armoire
setID correspond à l’ID défini de l’armoire actuelle
iCabinet correspondra au numéro d’armoire défini (0 pour le premier cabinet, 1 pour le deuxième cabinet, etc.)
L’application doit retourner 0 pour indiquer la réussite, ou -1 pour indiquer l’échec, qui abandonnera FDICopy. Une notification de fdintCABINET_INFO sera fournie une fois pour chaque cabinet ouvert par FDICopy; cela inclut les armoires de continuation ouvertes en raison de fichiers couvrant les limites du cabinet.
fdintPARTIAL_FILE
0x01
Le premier fichier dans le cabinet est une continuation d’un fichier du cabinet précédent.
Lorsque cette valeur est définie, la structure FDINOTIFICATION est remplie avec les informations suivantes :
psz1 pointera vers le nom du fichier continué à partir d’un cabinet précédent
psz2 pointe vers le nom du cabinet sur lequel se trouve le premier segment du fichier
psz3 pointe vers le nom du disque sur lequel le premier segment du fichier existe
La notification fdintPARTIAL_FILE est appelée pour les dossiers au début d’un cabinet qui ont continué à partir d’un cabinet précédent. Cette notification ne se produit que lorsque FDICopy est démarrée sur le deuxième cabinet ou le cabinet suivant dans une série, ce qui a continué à partir d’un cabinet précédent. L’application doit retourner 0 en cas de réussite ou -1 pour indiquer l’échec.
fdintCOPY_FILE
0x02
Informations identifiant le fichier à copier.
Lorsque cette valeur est définie, la structure FDINOTIFICATION est remplie avec les informations suivantes :
psz1 pointera vers le nom d’un fichier dans le cabinet
cb équivaut à la taille non compressée du fichier
date correspond à la date de MS-DOS 16 bits du fichier
heure est égale à l’heure de MS-DOS 16 bits du fichier.
attribs correspond aux attributs de MS-DOS 16 bits du fichier. En outre, l’indicateur _A_NAME_IS_UTF est défini si le nom de fichier est destiné à être interprété comme UTF-8.
Notez que les membres ci-dessus proviennent directement du dossier du cabinet.
Si le fichier d’armoire est malveillant, le nom peut contenir des caractères de nom de fichier illégal ou malveillant.
L’application doit retourner l’une des trois valeurs ; 0 pour ignorer (c’est-à-dire ne pas copier) le fichier ; -1 (négative) pour abandonner FDICopy ; ou un handle de fichier différent de zéro (et non négatif) qui indique où écrire le fichier. Le handle de fichier doit être compatible avec la fonction PFNCLOSE fournie pour FDICreate. La notification fdintCOPY_FILE est appelée pour chaque fichier qui commence dans le cabinet actuel, ce qui permet à l’application de demander que le fichier soit copié ou ignoré.
fdintCLOSE_FILE_INFO
0x03
Fermez le fichier, définissez les informations pertinentes.
Lorsque cette valeur est définie, la structure FDINOTIFICATION est remplie avec les informations suivantes :
psz1 pointera vers le nom d’un fichier dans le cabinet
hf sera un handle de fichier (qui provient de fdintCOPY_FILE)
date date correspond à la date de MS-DOS 16 bits du fichier
heure heure est égale à l’heure de MS-DOS 16 bits du fichier.
attributs de attribs est égal aux attributs de MS-DOS 16 bits du fichier (moins le bit _A_EXEC)
cb est égal à 0 ou 1, indiquant si le fichier doit être exécuté après l’extraction (1) ou non (0)
Il incombe à l’application d’exécuter le fichier si cb est égal à 1. La notification fdintCLOSE_FILE_INFO est appelée une fois que toutes les données ont été écrites dans un fichier cible. L’application doit fermer le fichier (à l’aide du handle fourni) et définir la date, l’heure et les attributs du fichier. L’application doit retourner TRUE pour réussir, et FALSE ou -1 pour abandonner FDICopy. L’IED suppose que le fichier cible a été fermé, même si ce rappel retourne un échec ; L’IED ne tentera pas d’utiliser PFNCLOSE pour fermer le fichier.
fdintNEXT_CABINET
0x04
Le dossier a continué au cabinet suivant.
Lorsque cette valeur est définie, la structure FDINOTIFICATION est remplie avec les informations suivantes :
psz1 pointera vers le nom du cabinet suivant sur lequel le dossier actuel est poursuivi
psz2 sera un handle de fichier (qui provient de fdintCOPY_FILE)
psz3 pointera vers les informations sur le chemin de l’armoire
fdie équivaut à une valeur de réussite ou d’erreur
Cette notification est appelée uniquement si fdintCOPY_FILE est invité à copier un fichier, qui est continué d’un cabinet ultérieur, au cabinet actuel. Étant donné qu’il est possible pour l’application de modifier le nom du cabinet, il est important que le nom du chemin d’accès de l’armoire, indiqué par psz3, soit validé avant son retour. En outre, l’application doit s’assurer que le cabinet existe et qu’il est lisible avant de retourner ; si nécessaire, l’application doit émettre une invite de modification de disque pour confirmer.
Lorsque cette fonction revient à l’IED, l’IED vérifie que les setID et iCabinet champs de l’armoire fournie correspondent aux valeurs attendues pour ce cabinet. Si ce n’est pas le cas, l’IED continuera d’envoyer des messages de notification fdintNEXT_CABINET avec le champ de fdie défini sur FDIERROR_WRONG_CABINET, jusqu’à ce que le fichier d’armoire correct soit spécifié, ou jusqu’à ce que cette fonction retourne -1 et abandonne l’appel FDICopy. Si, après le retour de cette fonction, le fichier d’armoire n’est pas présent, lisible ou a été endommagé, le champ idee est égal à l’une des valeurs suivantes :
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
En l’absence d’erreur, idee sera égal à FDIERROR_NONE. L’application doit retourner 0 pour indiquer la réussite, ou -1 pour indiquer l’échec, qui abandonnera FDICopy.