Prototype |
struct | EMemory::SC_BLOCK { | void | *pBlock; |
ulonglong | ullBlockSize; | ||
ulonglong | ullReserved0; | ||
uchar | *pucReserved1; | ||
ulong | ulReserved2; | ||
}; |
Cette structure est utilisée par les fonctions BlocksCountGet, BlocksFind, BlocksSubstitute et BlocksSuppress faisant office de tableau contenant, sous forme séquentielle, tous les blocs d'octets à traiter.
Variables membres |
void *pBlock adresse du bloc d'octets. |
ulonglong ullBlockSize taille du bloc d'octets. Si la taille est égale à 0, cette structure n'est pas prise en compte lors de l'utilisation au sein de la fonction concernée. |
ulonglong ullReserved0 cette variable est réservée à l'usage personnel des fonctions l'utilisant. Il est inutile de l'initialiser et vous ne devez pas l'utiliser. |
uchar *pucReserved1 cette variable est réservée à l'usage personnel des fonctions l'utilisant. Il est inutile de l'initialiser et vous ne devez pas l'utiliser. |
ulong ulReserved2 cette variable est réservée à l'usage personnel des fonctions l'utilisant. Il est inutile de l'initialiser et vous ne devez pas l'utiliser. |
Remarque |
Lorsque vous spécifiez un bloc d'octets dont une partie des données sont similaires à celles d'un autre bloc d'octets, les fonctions traitent en priorité celui qui contient le plus de données. Eclaircissons cela par un exemple. Nous déclarons deux blocs d'octets :
Comme vous pouvez le constater, les données du premier bloc sont présentent dans le second. Si l'on écrit une fonction de recherche simple, le second bloc d'octets ne sera jamais trouvé car le premier le sera toujours en premier. La fonction nous dirait qu'elle a trouvé le bloc 0x41 et 0x42 à l'offset 0 et à l'offset 3. La problématique n'est pas une histoire d'ordre d'énumération des blocs (les fonctions de l'objet EMemory n'en tiennent pas compte). Nous aurions bien pû déclarer la série de blocs d'octets comme ceci :
que cela donnerait le même résultat. Tout simplement lorsque la fonction aura trouvé les valeurs contigues 0x41 et 0x42, elle cessera son travail car elle a effectivement trouvé un bloc à chercher. Les fonctions de l'objet EMemory utilisant les structures EMemory::SC_BLOCK tentent en priorité de traiter les blocs les plus longs parmi ceux partageant une même série d'octets. Donc ces fonctions de l'objet nous dirons qu'elles ont traité le bloc d'octets 0x41, 0x42 et 0x43 à l'offset 0 et le bloc d'octets 0x41 et 0x42 à l'offset 3. |
Exemple |
Description : Exemples d'initialisation de structures EMemory::SC_BLOCK et de passage en argument. Les initialisations "automatiques" sont utiles lorsque l'on connait par avance les blocs d'octets à recherche. Par contre les initialisations "dynamiques" sont utiles lorsque l'on ne connait pas par avance les blocs d'octets à recherche. On peut ainsi construire le tabeau de blocs d'octets suivant les besoins. Ne pas oublier de libérer la mémoire allouée dynamiquement après que l'on n'en a plus besoin. |
Code :
|
Voir aussi |
Minimum |
Version | 1.0.0 |