Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le champ « 64 Bits » est défini dans le code de contrôle IOCTL ou FSCTL. Ce champ contient un indicateur de bits qui est toujours défini pour les appelants 64 bits, mais est toujours clair pour 32 bits. Le bit du code de contrôle choisi comme champ « 64 Bits » est spécifique au pilote, mais il doit s’agir d’un bit qui n’est jamais défini pour les appelants 32 bits. Un bon choix pour la plupart des pilotes est le bit le plus significatif (MSB) dans le champ Fonction.
Par exemple, les codes de contrôle IOCTL (FSCTL) utilisés dans les pilotes 32 bits contiennent quatre champs de bits :
Type d’appareil | Access | Fonction | Méthode |
---|---|---|---|
16 bits |
2 bits |
12 bits |
2 bits |
Tant qu’aucun des codes de contrôle existants définis par le pilote ne définit le msb dans le champ Fonction, ces codes de contrôle peuvent continuer à être utilisés par les applications en mode utilisateur 32 bits.
Pour prendre en charge les appelants 64 bits, le pilote définit un champ de fonction plus court d’un bit. Ce bit est redéfini en tant que champ « 64 Bits » :
Type d’appareil | Access | 64 Bits | Fonction | Méthode |
---|---|---|---|---|
16 bits |
2 bits |
1 bit |
11 bits |
2 bits |
L’exemple de code suivant montre comment définir un champ « 64 Bits » dans un fichier d’en-tête de pilote :
#define REGISTER_FUNCTION 0 // Define the IOCTL function code
#ifdef _WIN64
#define CLIENT_64BIT 0x800
#define REGISTER_FUNCTION 0
#define IOCTL_REGISTER CTL_CODE(FILE_DEVICE_UNKNOWN, \
CLIENT_64BIT|REGISTER_FUNCTION, METHOD_BUFFERED, FILE_ANY_ACCESS)
#else
#define IOCTL_REGISTER CTL_CODE(FILE_DEVICE_UNKNOWN, \
REGISTER_FUNCTION, METHOD_BUFFERED, FILE_ANY_ACCESS)
#endif
typedef struct _IOCTL_PARAMETERS {
PVOID Addr;
SIZE_T Length;
HANDLE Handle;
} IOCTL_PARAMETERS, *PIOCTL_PARAMETERS;