Les Chevaliers de Malte/Développeur - Assembleur et Pascal - Interruption 21h, Fonction 44h, Sous-fonction 02h: IOCTL: Lecture de données par bloc


00h à 07h 08h à 0Fh 10h 11h 12h 13h 14h 15h 16h 17h 18h 19h 1Ah 1Bh 1Ch 1Dh 1Eh 1Fh 20h 21h 22h 23h 24h 25h 26h 27h 28h 29h 2Ah 2Bh 2Eh 2Fh 33h 41h 4Bh 59h 5Ch 67h 7Ah 80h à F0h Rechercher


Interruption 21h

Fonction 44h, Sous-fonction 02h

IOCTL: Lecture de données par bloc

DOS 2.0+, OS/2, Windows NT


Description

Cette fonction de type IOCTL permet d'effectuer la lecture de données par bloc.


Entrée

 AX=4402h
 BX=Handle
 CX=Longueur du tampon ou de la structure de réquisition
 DS:DX=Pointeur FAR sur le tampon ou le bloc de réquisition (remarque)


Sortie

 FC=0: Tout va bien, dans ce cas AX=Nombre d'octets transférés
1: Erreur, dans ce cas AX=Code d'erreur:
Code d'erreur Description
1

Cette erreur indique que la fonction est inconnu

6

Cette erreur permet d'indiquer que le Handle est inconnu


Remarques

    Pour que la fonction puissent appeller un bloc de réquisition «GetProtocolManagerInfo», votre tampon devra avoir la structure suivante:

Offset Longueur Description
00h 2 octets (1 mot) Ce champs contient la valeur 01h.
02h 2 octets (1 mot) Ce champs retourne l'état de retour (voir remarque).
04h 4 octets (2 mots) Ce champs retourne un pointeur représentant la structure de la configuration utilisateur.
08h 4 octets (2 mots) Ce champs est réservé pour une utilisation interne ou futur
0Ch 2 octets (mot) Ce champs retourne la version, en format BCD, du NDIS dans lequel le gestionnaire de protocol est chargée.

    Pour que la fonction puissent appeller un bloc de réquisition «RegisterModule», votre tampon devra avoir la structure suivante:

Offset Longueur Description
00h 2 octets (1 mot) Ce champs contient la valeur 02h.
02h 2 octets (1 mot) Ce champs retourne l'état de retour (voir remarque).
04h 4 octets (2 mots) Ce champs retourne un pointeur représentant la structure d'un module de caractéristiques commune.
08h 4 octets (2 mots) Ce champs retourne un pointeur sur une liste de modules dans lequel il est renfermé
0Ch 2 octets (mot) Ce champs n'est pas utilisé.

    Pour que la fonction puissent appeller un bloc de réquisition «BindAndStart», votre tampon devra avoir la structure suivante:

Offset Longueur Description
00h 2 octets (1 mot) Ce champs contient la valeur 03h.
02h 2 octets (1 mot) Ce champs retourne l'état de retour (voir remarque).
04h 4 octets (2 mots) Ce champs retourne l'adresse d'une entrée d'une procédure virtuel dans la structure «FailingModules».
08h 6 octets (3 mots) Ce champs n'est pas utilisé.

    Pour que la fonction puissent appeller un bloc de réquisition «GetProtocolManagerLinkage», votre tampon devra avoir la structure suivante:

Offset Longueur Description
00h 2 octets (1 mot) Ce champs contient la valeur 04h.
02h 2 octets (1 mot) Ce champs retourne l'état de retour (voir remarque).
04h 4 octets (2 mots) Ce champs retourne un point d'expédition. Ce point d'expédition peut être appeler à la place de l'utilisation du IOCTL comme suit:
Dans la Pile: Mot Segment de donnée du gestionnaire de protocol
Doublemot Pointeur sur le bloc de réquisition
Retour: AX=État de retour et la pile est désempilée
08h 4 octets (2 mots) Ce champs n'est pas utilisé.
0Ch 2 octets (mot) Ce champs retourne le segment de donnée du gestionnaire de protocol.

    Pour que la fonction puissent appeller un bloc de réquisition «GetProtocolIniPath», votre tampon devra avoir la structure suivante:

Offset Longueur Description
00h 2 octets (1 mot) Ce champs contient la valeur 05h.
02h 2 octets (1 mot) Ce champs retourne l'état de retour (voir remarque).
04h 4 octets (2 mots) Ce champs retourne un pointeur sur un tampon contenant le chemin ASCIIZ du fichier de configuration «PROTOCOL.INI».
08h 4 octets (2 mots) Ce champs n'est pas utilisé.
0Ch 2 octets (mot) Ce champs retourne la longueur du tampon.

    Pour que la fonction puissent appeller un bloc de réquisition «RegisterProtocolManagerInfo», votre tampon devra avoir la structure suivante:

Offset Longueur Description
00h 2 octets (1 mot) Ce champs contient la valeur 06h.
02h 2 octets (1 mot) Ce champs retourne l'état de retour (voir remarque).
04h 4 octets (2 mots) Ce champs retourne un pointeur sur une structure contenant l'analyse qu'utilise le fichier de configuration.
08h 4 octets (2 mots) Ce champs n'est pas utilisé.
0Ch 2 octets (mot) Ce champs retourne la longueur de la structure.

    Pour que la fonction puissent appeller un bloc de réquisition «InitAndRegister», votre tampon devra avoir la structure suivante:

Offset Longueur Description
00h 2 octets (1 mot) Ce champs contient la valeur 07h.
02h 2 octets (1 mot) Ce champs retourne l'état de retour (voir remarque).
04h 4 octets (2 mots) Ce champs n'est pas utilisé.
08h 4 octets (2 mots) Ce champs contient un pointeur sur un nom ASCIIZ d'un module d'initialisation devant être préattacher.
0Ch 2 octets (mot) Ce champs n'est pas utilisé.

    Pour que la fonction puissent appeller un bloc de réquisition «UnbindAndStop», votre tampon devra avoir la structure suivante:

Offset Longueur Description
00h 2 octets (1 mot) Ce champs contient la valeur 08h.
02h 2 octets (1 mot) Ce champs retourne l'état de retour (voir remarque).
04h 4 octets (2 mots) Ce champs contient une adresse vers un module d'échec pour le réattachement et démarrage (BindAndStop).
08h 4 octets (2 mots) Ce champs contient un pointeur de détachement. S'il n'est pas égal à 0000h:0000h, pointe sur nom ASCIIZ d'un module détacher. S'il est égal 0000h:0000h, termine et fixe la dynamique précédente.
0Ch 2 octets (mot) Ce champs n'est pas utilisé.

    Pour que la fonction puissent appeller un bloc de réquisition «BindStatus», votre tampon devra avoir la structure suivante:

Offset Longueur Description
00h 2 octets (1 mot) Ce champs contient la valeur 09h.
02h 2 octets (1 mot) Ce champs retourne l'état de retour (voir remarque).
04h 4 octets (2 mots) Ce champs contient une adresse de la racine de l'arbre de répertoire. Doit être 0000h:0000h, au retour pointe sur la racine de l'arbre de répertoire.
08h 4 octets (2 mots) Ce champs contient doit contenir 0000h:0000h.
0Ch 2 octets (mot) Ce champs est utilisé pour un usage interne.

    Pour que la fonction puissent appeller un bloc de réquisition «BindStatus», votre tampon devra avoir la structure suivante:

Offset Longueur Description
00h 2 octets (1 mot) Ce champs contient la valeur 0Ah.
02h 2 octets (1 mot) Ce champs retourne l'état de retour (voir remarque).
04h 4 octets (2 mots) Ce champs doit contenir 0000h:0000h.
08h 4 octets (2 mots) Ce champs contient un pointeur sur le nom du module de format ASCIIZ ayant une taille de 16 octets.
0Ch 2 octets (mot) Ce champs doit contenir 0000h.

    Voici la liste des codes d'état:

Code d'état Description
0000h Ce code d'état indique qu'aucune erreur n'est signalé.
0001h Ce code d'état indique un état d'attente de relâchement du protocol retenant le contrôle des données du tampon.
0002h Ce code d'état indique une réquisition de la queue.
0003h Ce code d'état indique que le format est inconnu.
0004h Ce code d'état indique que le format est rejetté.
0005h Ce code d'état indique que le format doit être avant.
0006h Ce code d'état indique un manque de ressource.
0007h Ce code d'état indique que le paramètre n'est pas valide.
0008h Ce code d'état indique que la fonction n'est pas valide.
0009h Ce code d'état indique que la fonction n'est pas supporté.
000Ah Ce code d'état indique une erreur au niveau matériel.
000Bh Ce code d'état indique une erreur au niveau de la transmission.
000Bh Ce code d'état indique que la destination n'est pas reconnue.
000Dh Ce code d'état indique que le tampon est trop petit.
0020h Ce code d'état indique que le pilote est déjà prêt à redémarrer.
0021h Ce code d'état indique que le détachement n'a pas être effectuer totalement.
0022h Ce code d'état indique que le pilote n'est pas été initialisé.
0023h Ce code d'état indique que le matériel n'est pas détecté ou absent.
0024h Ce code d'état indique que le matériel est défectueux.
0025h Ce code d'état indique que la configuration n'est pas valide.
0026h Ce code d'état indique qu'un conflit existe entre certaines interruptions.
0027h Ce code d'état indique que l'adresse MAC n'est pas compatible.
0028h Ce code d'état indique qu'un échec a eu lieu lors de l'initialisation.
0029h Ce code d'état indique qu'il n'y a pas de reliable.
002Ah Ce code d'état indique que le réseau ne peut pas être détaché.
002Bh Ce code d'état indique que la version de système d'exploitation n'est pas compatible.
002Ch Ce code d'état indique que les données sont déjà enregistrées.
002Dh Ce code d'état indique que le chemin ou le répertoire n'a pas été trouvé.
002Eh Ce code d'état indique que la quantité de mémoire n'est pas suffisante.
002Fh Ce code d'état indique que l'information n'est pas trouvable.
00FFh Ce code d'état indique échec général.
F000h à FFFFh Ces codes d'état indique sont spécifiques aux manufacturiers.

    Voici la structure d'une table de caractéristique commune:

Offset Longueur Description
00h 2 octets (1 mot) Ce champs contient la taille de la table en octets.
02h 1 octet Ce champs contient la version majeur du NDIS.
03h 1 octet Ce champs contient la version mineur du NDIS.
04h 2 octets (mot) Ce champs est réservé pour une utilisation interne ou futur.
06h 1 octet Ce champs contient la version majeur du module.
07h 1 octet Ce champs contient la version mineur du module.
08h 4 octets (2 mots) Ce champs contient les drapeaux du module de fonction:
Bits Description
0 Ce bit indique s'il vaut 1 que le détachement des limites hautes est supportée
1 Ce bit indique s'il vaut 1 que le détachement des limites basses est supportée
2 Ce bit indique s'il vaut 1 s'il y a des limitations dynamiques
0Ch 16 octets Ce champs contient le nom du module en format ASCIIZ
1Ch 1 octet Ce champs contient la haute limite de niveau du protocol (voir ci-dessous)
1Dh 1 octet Ce champs contient la haute limite du type d'interface:
Cas Action
Pour les MACs 1=MAC
Pour des données liées et transports Doit être défini
Pour une session 1=NCB
Chaque niveau 0=privée (Définition ISV)
1Eh 1 octet Ce champs contient la basse limite de niveau du protocol (même chose qu'à l'offset 1Ch).
1Fh 1 octet Ce champs contient la basse limite du type d'interface (même chose qu'à l'offset 1Dh).
20h 2 octets (mot) Ce champs contient l'identificateur du module remplit dans un gestionnaire de protocol.
22h 2 octets (mot) Ce champs contient le segment de données du module (DS du module).
24h 4 octets (2 mots) Ce champs contient un pointeur d'entrée d'une réquisition du système.
28h 4 octets (2 mots) Ce champs contient un pointeur sur les caractéristiques des spécifications de service (0000h:0000h s'il n'y en a pas).
2Ch 4 octets (2 mots) Ce champs contient un pointeur sur l'état des spécifications de service (0000h:0000h s'il n'y en a pas).
30h 4 octets (2 mots) Ce champs contient un pointeur sur la partie haute de la table d'envoie (voir ci-dessous) (0000h:0000h s'il n'y en a pas).
34h 4 octets (2 mots) Ce champs contient un pointeur sur la partie basse de la table d'envoie (voir ci-dessous) (0000h:0000h s'il n'y en a pas).
38h 8 octets (4 mots) Ce champs contient toujours la valeur 0.

    Voici les valeurs des «limite de niveau du protocol»:

Code Description
00h Ce code indique un niveau physique.
01h Ce code indique un contrôle d'accès média.
02h Ce code indique un lien de données.
03h Ce code indique un réseau.
04h Ce code indique un transport.
05h Ce code indique une session.
FFh Ce code indique qu'il n'y a pas de spécification.

    Voici la structure d'une table d'envoie:

Offset Longueur Description
00h 4 octets (2 mots) Ce champs contient la table de caractéristique commune (voir plus haute).
04h 4 octets (2 mots) Ce champs contient une structuration interne.
08h 4 octets (2 mots) Ce champs contient une fonction interne (appeller avec 12 octets dans les arguments de la pile).
0Ch 4 octets (2 mots) Ce champs contient une fonction interne (appeller avec 10 octets dans les arguments de la pile).
10h 4 octets (2 mots) Ce champs contient une fonction interne (appeller avec 16 octets dans les arguments de la pile).
14h 4 octets (2 mots) Ce champs contient une fonction interne (appeller avec 4 octets dans les arguments de la pile).
18h 4 octets (2 mots) Ce champs contient une fonction interne (appeller avec 18 octets dans les arguments de la pile).
1Ch 4 octets (2 mots) Ce champs contient une fonction interne (appeller avec 12 octets dans les arguments de la pile).

    Voici la structure des spécifications de la table des caractéristiques MAC:

Offset Longueur Description
00h 2 octets (1 mot) Ce champs contient la taille de la table en octets.
02h 16 octets (8 mots) Ce champs contient le type de nom MAC en format ASCIIZ:
Code Nom
802.3 Ethernet
802.4 Large bande
802.5 Anneau à jeton «TokenRing»
802.6 SMDS, DBDQ
DIX DIX
DIX+802.3 DIX+802.3
APPLETALK AppleTalk
ARCNET ArcNet
FDDI FDDI
SDLC SDLC
BSC BSC
HDLC HDLC
ISDN ISDN
12h 2 octets (mot) Ce champs contient la longueur des adresses de station en octets.
14h 16 octets (8 mots) Ce champs contient l'adresse de la station permanente.
24h 16 octets (8 mots) Ce champs contient l'adresse de la station courante.
34h 4 octets (2 mots) Ce champs contient l'adresse de l'adapteur des fonctionnalitées courante (00000000h si aucune).
38h 4 octets (2 mots) Ce champs contient l'adresse de la liste du «MultiCast».
3Ch 4 octets (2 mots) Ce champs contient la vitesse de la transmission en bits/seconde (BAUD).
40h 4 octets (2 mots) Ce champs contient le drapeau de service:
Bits Description
0 Ce bit indique qu'il supporte le «Broadcast»
1 Ce bit indique qu'il supporte le «MultiCast»
2 Ce bit indique qu'il supporte les adressages des fonctionnalités de groupe
3 Ce bit indique qu'il supporte le mode de conduction léger
4 Ce bit indique l'adresse de la station logiciel est fixable
5 Ce bit indique les statistiques courante
6 Ce bit indique qu'il supporte le diagnostique d'initialisation
7 Ce bit indique qu'un signal est reçu au lieu d'une indication «ReceiveLookahead»
8 Ce bit indique que l'adresse MAC fait premièrement une indication de chaîne
9 Ce bit indique s'il supporte le routage IBM
10 Ce bit indique s'il supporte la réinitialisation MAC
11 Ce bit indique s'il supporte les adapteurs OPEN/CLOSE
12 Ce bit indique s'il supporte le réquisition d'interruption
13 Ce bit indique s'il supporte le pont de la routine source
14 Ce bit indique s'il supporte les adresses virtuel GDT (version OS/2)
15 Ce bit fixe plusieurs transfère de données disponible pendant une simple indication.
16 Ce bit du MAC normal fixe la taille du format (FrameSize) à 0 dans un «ReceiveLookahead»
44h 2 octets (mot) Ce champs contient la taille maximal du format/chassie (Frame) lequel peut émettre ou recevoir.
46h 4 octets (2 mots) Ce champs contient la capacité total du tampon de transmission en octets.
4Ah 2 octets (mot) Ce champs contient la taille d'allocation du tampon du bloc de transmission en octets.
4Ch 4 octets (2 mots) Ce champs contient la capacité total d'envoie de tampon en octets.
50h 2 octets (mot) Ce champs contient la taille de l'allocation du bloc de réception en octets.
52h 3 octets Ce champs contient le code du manufacturier IEEE.
55h 1 octet Ce champs contient le code de l'adapteur du manufacturier.
56h 4 octets (2 mots) Ce champs contient un pointeur sur la description du manufacturier en format ASCIIZ.
5Ah 2 octets (mot) Ce champs indique l'adapteur qu'utilise l'IRQ.
5Ch 2 octets (mot) Ce champs indique la profondeur de la queue de transmission.
5Eh 2 octets (mot) Ce champs indique le nombre maximal de bloc de donnée dans un tampon de description supportée.
60h N octets Ce champs contient les informations spécifique au manufacturier.

    Voici la structure des spécifications de la table des caractéristiques du réseau en BIOS (NetBIOS):

Offset Longueur Description
00h 2 octets (mot) Ce champs contient la longueur de la table en octets.
02h 16 octets (8 mots) Ce champs contient le type de nom (en format ASCIIZ) du module NetBIOS.
12h 2 octets (mot) Ce champs contient le code du module NetBIOS.
14h N octets Ce champs contient les informations spécifique au manufacturier.

Dernière mise à jour: Lundi, le 24 juillet 2006