private List<ThunkData> readThunks(NTHeader ntHeader, BinaryReader reader,
			long ptr, boolean isName) throws IOException {
		List<ThunkData> thunkList = new ArrayList<ThunkData>();
		if (ptr == 0) {
			return thunkList;
		}

		long thunkPtr = 0;
		int offset = 0;

		if (isUsingRVA()) {
			thunkPtr = ntHeader.rvaToPointer(ptr);
		}
		else {
			thunkPtr = ntHeader.vaToPointer(ptr);
		}

		while (true) {
			if (!ntHeader.checkPointer(thunkPtr)) {
				Msg.error(this, "Invalid thunkPtr for "+Long.toHexString(ptr));
				return null;
			}
			ThunkData thunk =
				new ThunkData(reader, (int) thunkPtr, ntHeader.getOptionalHeader().is64bit());
			thunkList.add(thunk);
			if (thunk.getAddressOfData() == 0)
				break;

			thunkPtr += thunk.getStructSize();

			if (!isName) {
				continue;
			}

			String funcName;
			if (thunk.isOrdinal()) {
				funcName = SymbolUtilities.ORDINAL_PREFIX + thunk.getOrdinal();
			}
			else {
				long ibnPtr = 0;
				if (isUsingRVA()) {
					ibnPtr = ntHeader.rvaToPointer(thunk.getAddressOfData());
				}
				else {
					ibnPtr = ntHeader.vaToPointer(thunk.getAddressOfData());
				}
				if (ibnPtr < 0) {
					Msg.error(this, "Invalid import pointer for "+thunk.getAddressOfData());
					return thunkList;
				}
				ImportByName ibn = new ImportByName(reader, (int) ibnPtr);
				importByNameMap.put(thunk, ibn);
				funcName = ibn.getName();
				thunk.setImportByName(ibn);
			}

			delayImportInfoList.add(new ImportInfo(offset, "", dllName, funcName, false));
			offset += thunk.getStructSize();
		}

		return thunkList;
	}
A class to represent the 
<code>ImgDelayDescr</code>
data structure defined in <b><code>DELAYIMP.H</code></b>.
<pre>
typedef struct ImgDelayDescr {
    DWORD           grAttrs;        // attributes
    LPCSTR          szName;         // pointer to dll name
    HMODULE *       phmod;          // address of module handle
    PImgThunkData   pIAT;           // address of the IAT
    PCImgThunkData  pINT;           // address of the INT
    PCImgThunkData  pBoundIAT;      // address of the optional bound IAT
    PCImgThunkData  pUnloadIAT;     // address of optional copy of original IAT
    DWORD           dwTimeStamp;    // 0 if not bound,
                                    // O.W. date/time stamp of DLL bound to (old BIND)
} ImgDelayDescr, * PImgDelayDescr;
</pre>
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/DelayImportDescriptor.java