Calcolo dei valori necessari
Le informazioni essenziali che devono essere calcolate dalla routine di supporto del caricamento ritardato sono due. A questo scopo, sono state previste due funzioni inline nel file delayhlp.cpp che consentono di calcolare tali informazioni.
Mediante la prima viene calcolato l'indice dell'importazione corrente in tre tabelle differenti, ovvero la tabella di indirizzi di importazione (IAT), la tabella di indirizzi di importazione associati (BIAT) e la tabella di indirizzi di importazione non associati (UIAT)).
Mediante la seconda viene calcolato il numero di importazioni in una tabella IAT valida.
// utility function for calculating the index of the current import
// for all the tables (INT, BIAT, UIAT, and IAT).
__inline unsigned
IndexFromPImgThunkData(PCImgThunkData pitdCur, PCImgThunkData pitdBase) {
return pitdCur - pitdBase;
}
// utility function for calculating the count of imports given the base
// of the IAT. NB: this only works on a valid IAT!
__inline unsigned
CountOfImports(PCImgThunkData pitdBase) {
unsigned cRet = 0;
PCImgThunkData pitd = pitdBase;
while (pitd->u1.Function) {
pitd++;
cRet++;
}
return cRet;
}