Changeset 2891 for trunk/kLdr/kLdr.h


Ignore:
Timestamp:
Nov 21, 2006, 10:40:45 PM (19 years ago)
Author:
bird
Message:

interface adjustment (in progress).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kLdr/kLdr.h

    r2889 r2891  
    603603/** Forwarder symbol. */
    604604#define KLDRSYMKIND_FORWARDER               0x00000200
     605/** Request a flat symbol address. */
     606#define KLDRSYMKIND_REQ_FLAT                0x00000000
     607/** Request a segmented symbol address. */
     608#define KLDRSYMKIND_REQ_SEGMENTED           0x40000000
    605609/** @} */
    606610
     
    621625 * @param   iImport     The import module ordinal number or NIL_KLDRMOD_IMPORT.
    622626 * @param   iSymbol     The symbol ordinal number or NIL_KLDRMOD_SYM_ORDINAL.
    623  * @param   pszSymbol   The symbol name. Can be NULL if iSymbol isn't nil.
     627 * @param   pchSymbol   The symbol name. Can be NULL if iSymbol isn't nil. Doesn't have to be null-terminated.
     628 * @param   cchSymbol   The length of the symbol.
     629 * @param   pszVersion  The symbol version. NULL if not versioned.
    624630 * @param   puValue     Where to store the symbol value.
    625631 * @param   pfKind      Where to store the symbol kind flags.
    626632 * @param   pvUser      The user parameter specified to the relocation function.
    627633 */
    628 typedef int FNKLDRMODGETIMPORT(PKLDRMOD pMod, uint32_t iImport, uint32_t iSymbol, const char *pszSymbol,
    629                                PKLDRADDR puValue, uint32_t *pfKind, void *pvUser);
     634typedef int FNKLDRMODGETIMPORT(PKLDRMOD pMod, uint32_t iImport, uint32_t iSymbol, const char *pchSymbol, size_t cchSymbol,
     635                               const char *pszVersion, PKLDRADDR puValue, uint32_t *pfKind, void *pvUser);
    630636/** Pointer to a import callback. */
    631637typedef FNKLDRMODGETIMPORT *PFNKLDRMODGETIMPORT;
     
    639645 * @param   pMod        The module which symbols are being enumerated.s
    640646 * @param   iSymbol     The symbol ordinal number or NIL_KLDRMOD_SYM_ORDINAL.
    641  * @param   pszSymbol   The symbol name. This can be NULL if there is a symbol ordinal.
     647 * @param   pchSymbol   The symbol name. This can be NULL if there is a symbol ordinal.
    642648 *                      This can also be an empty string if the symbol doesn't have a name
    643649 *                      or it's name has been stripped.
     650 *                      Important, this doesn't have to be a null-terminated string.
     651 * @param   cchSymbol   The length of the symbol.
     652 * @param   pszVersion  The symbol version. NULL if not versioned.
    644653 * @param   uValue      The symbol value.
    645654 * @param   fKind       The symbol kind flags.
    646655 * @param   pvUser      The user parameter specified to kLdrModEnumSymbols().
    647656 */
    648 typedef int FNKLDRMODENUMSYMS(PKLDRMOD pMod, uint32_t iSymbol, const char *pszSymbol,
     657typedef int FNKLDRMODENUMSYMS(PKLDRMOD pMod, uint32_t iSymbol, const char *pchSymbol, size_t cchSymbol, const char *pszVersion,
    649658                              KLDRADDR uValue, uint32_t fKind, void *pvUser);
    650659/** Pointer to a symbol enumerator callback. */
     
    672681typedef int FNKLDRENUMDBG(PKLDRMOD pMod, uint32_t iDbgInfo, KLDRDBGINFOTYPE enmType, int16_t iMajorVer, int16_t iMinorVer,
    673682                          off_t offFile, KLDRADDR LinkAddress, KLDRSIZE cb, const char *pszExtFile, void *pvUser);
    674 /** Pointer to a debug info enumberator callback. */
     683/** Pointer to a debug info enumerator callback. */
    675684typedef FNKLDRENUMDBG *PFNKLDRENUMDBG;
     685
     686/**
     687 * Resource enumerator callback.
     688 *
     689 * @returns 0 to continue the enumeration.
     690 * @returns non-zero if the enumeration should stop. This status code will then be returned by kLdrModEnumResources().
     691 *
     692 * @param   pMod        The module.
     693 * @param   idType      The resource type id. NIL_KLDRMOD_RSRC_TYPE_ID if no type id.
     694 * @param   pszType     The resource type name. NULL if no type name.
     695 * @param   idName      The resource id. NIL_KLDRMOD_RSRC_NAME_ID if no id.
     696 * @param   pszName     The resource name. NULL if no name.
     697 * @param   idLang      The language id.
     698 * @param   AddrRsrc    The address value for the resource.
     699 * @param   cbRsrc      The size of the resource.
     700 * @param   pvUser      The user parameter specified to kLdrModEnumDbgInfo.
     701 */
     702typedef int FNKLDRENUMRSRC(PKLDRMOD pMod, uint32_t idType, const char *pszType, uint32_t idName, const char *pszName,
     703                           uint32_t idLang, KLDRADDR AddrRsrc, KLDRSIZE cbRsrc, void *pvUser);
     704/** Pointer to a resource enumerator callback. */
     705typedef FNKLDRENUMRSRC *PFNKLDRENUMRSRC;
     706
     707/** NIL resource name ID. */
     708#define NIL_KLDRMOD_RSRC_NAME_ID    ( ~(uint32_t)0 )
     709/** NIL resource type ID. */
     710#define NIL_KLDRMOD_RSRC_TYPE_ID    ( ~(uint32_t)0 )
     711/** @name Language ID
     712 *
     713 * Except for the special IDs #defined here, the values are considered
     714 * format specific for now since it's only used by the PE resources.
     715 *
     716 * @{ */
     717/** NIL language ID. */
     718#define NIL_KLDR_LANG_ID                ( ~(uint32_t)0 )
     719/** Special language id value for matching any language. */
     720#define KLDR_LANG_ID_ANY                ( ~(uint32_t)1 )
     721/** Special language id value indicating language neutral. */
     722#define KLDR_LANG_ID_NEUTRAL            ( ~(uint32_t)2 )
     723/** Special language id value indicating user default language. */
     724#define KLDR_LANG_ID_USER_DEFAULT       ( ~(uint32_t)3 )
     725/** Special language id value indicating system default language. */
     726#define KLDR_LANG_ID_SYS_DEFAULT        ( ~(uint32_t)4 )
     727/** Special language id value indicating default custom locale. */
     728#define KLDR_LANG_ID_CUSTOM_DEFAULT     ( ~(uint32_t)5 )
     729/** Special language id value indicating unspecified custom locale. */
     730#define KLDR_LANG_ID_CUSTOM_UNSPECIFIED ( ~(uint32_t)6 )
     731/** Special language id value indicating default custom MUI locale. */
     732#define KLDR_LANG_ID_UI_CUSTOM_DEFAULT  ( ~(uint32_t)7 )
     733/** @} */
     734
    676735
    677736int     kLdrModOpen(const char *pszFilename, PPKLDRMOD ppMod);
     
    682741
    683742int     kLdrModQuerySymbol(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, uint32_t iSymbol,
    684                            const char *pszSymbol, PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser,
    685                            PKLDRADDR puValue, uint32_t *pfKind);
     743                           const char *pchSymbol, size_t cchSymbol, const char *pszVersion,
     744                           PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser, PKLDRADDR puValue, uint32_t *pfKind);
    686745int     kLdrModEnumSymbols(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress,
    687746                           uint32_t fFlags, PFNKLDRMODENUMSYMS pfnCallback, void *pvUser);
     
    691750int     kLdrModGetStackInfo(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, PKLDRSTACKINFO pStackInfo);
    692751int     kLdrModQueryMainEntrypoint(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, PKLDRADDR pMainEPAddress);
     752int     kLdrModQueryResource(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, uint32_t idType, const char *pszType,
     753                             uint32_t idName, const char *pszName, uint32_t idLang, PKLDRADDR pAddrRsrc, size_t *pcbRsrc);
     754int     kLdrModEnumResources(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, uint32_t idType, const char *pszType,
     755                             uint32_t idName, const char *pszName, uint32_t idLang, PFNKLDRENUMRSRC pfnCallback, void *pvUser);
    693756int     kLdrModEnumDbgInfo(PKLDRMOD pMod, const void *pvBits, PFNKLDRENUMDBG pfnCallback, void *pvUser);
    694757int     kLdrModHasDbgInfo(PKLDRMOD pMod, const void *pvBits);
     758int     kLdrModMostlyDone(PKLDRMOD pMod);
     759
    695760
    696761/** @name Operations On The Internally Managed Mapping
     
    751816    /** @copydoc kLdrModQuerySymbol */
    752817    int (* pfnQuerySymbol)(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, uint32_t iSymbol,
    753                            const char *pszSymbol, PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser,
    754                            PKLDRADDR puValue, uint32_t *pfKind);
     818                           const char *pchSymbol, size_t cchSymbol, const char *pszVersion,
     819                           PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser, PKLDRADDR puValue, uint32_t *pfKind);
    755820    /** @copydoc kLdrModEnumSymbols */
    756821    int (* pfnEnumSymbols)(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, uint32_t fFlags,
     
    766831    /** @copydoc kLdrModQueryMainEntrypoint */
    767832    int (* pfnQueryMainEntrypoint)(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, PKLDRADDR pMainEPAddress);
     833    /** @copydoc kLdrModQueryResource */
     834    int (* pfnQueryResource)(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, uint32_t idType, const char *pszType,
     835                             uint32_t idName, const char *pszName, uint32_t idLang, PKLDRADDR pAddrRsrc, size_t *pcbRsrc);
     836    /** @copydoc kLdrModEnumResources */
     837    int (* pfnEnumResources)(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, uint32_t idType, const char *pszType,
     838                             uint32_t idName, const char *pszName, uint32_t idLang, PFNKLDRENUMRSRC pfnCallback, void *pvUser);
    768839    /** @copydoc kLdrModEnumDbgInfo */
    769840    int (* pfnEnumDbgInfo)(PKLDRMOD pMod, const void *pvBits, PFNKLDRENUMDBG pfnCallback, void *pvUser);
     
    795866    int (* pfnRelocateBits)(PKLDRMOD pMod, void *pvBits, KLDRADDR NewBaseAddress, KLDRADDR OldBaseAddress,
    796867                            PFNKLDRMODGETIMPORT pfnGetImport, void *pvUser);
     868    /** @copydoc kLdrModMostlyDone */
     869    int (* pfnMostlyDone)(PKLDRMOD pMod);
    797870    /** Dummy which should be assigned a non-zero value. */
    798871    uint32_t uEndOfStructure;
     
    876949int     kLdrDyldGetName(HKLDRMOD hMod, char *pszName, size_t cchName);
    877950int     kLdrDyldGetFilename(HKLDRMOD hMod, char *pszFilename, size_t cchFilename);
    878 int     kLdrDyldQuerySymbol(HKLDRMOD hMod, uint32_t uSymbolOrdinal, const char *pszSymbolName, uintptr_t *pValue, uint32_t *pfKind);
     951int     kLdrDyldQuerySymbol(HKLDRMOD hMod, uint32_t uSymbolOrdinal, const char *pszSymbolName,
     952                            const char *pszSymbolVersion, uintptr_t *pValue, uint32_t *pfKind);
     953int     kLdrDyldQueryResource(HKLDRMOD hMod, uint32_t idType, const char *pszType, uint32_t idName,
     954                              const char *pszName, uint32_t idLang, void **pvRsrc, size_t *pcbRsrc);
     955int     kLdrDyldEnumResources(HKLDRMOD hMod, uint32_t idType, const char *pszType, uint32_t idName,
     956                              const char *pszName, uint32_t idLang, PFNKLDRENUMRSRC pfnCallback, void *pvUser);
    879957
    880958/** @name OS/2 like API
    881959 * @{ */
     960#if defined(__OS2__)
     961# define KLDROS2API _System
     962#else
     963# define KLDROS2API
     964#endif
    882965int     kLdrDosLoadModule(char *pszObject, size_t cbObject, const char *pszModule, PHKLDRMOD phMod);
    883966int     kLdrDosFreeModule(HKLDRMOD hMod);
     
    889972int     kLdrDosReplaceModule(const char *pszOldModule, const char *pszNewModule, const char *pszBackupModule);
    890973int     kLdrDosGetResource(HKLDRMOD hMod, uint32_t idType, uint32_t idName, void **pvResAddr);
    891 int     kLdrDosQueryResourceSize(HKLDRMOD hMod, uint32_t idTypeID, uint32_t idName, uint32_t *pcb);
     974int     kLdrDosQueryResourceSize(HKLDRMOD hMod, uint32_t idType, uint32_t idName, uint32_t *pcb);
    892975int     kLdrDosFreeResource(void *pvResAddr);
    893976/** @} */
     
    899982void *      kLdrDlSym(HKLDRMOD hMod, const char *pszSymbol);
    900983int         kLdrDlClose(HKLDRMOD hMod);
     984/** @todo GNU extensions */
    901985/** @} */
    902986
    903987/** @name Win32 like API
    904988 * @{ */
    905 HKLDRMOD    kLdrWLoadLibrary(const char *pszFilename);
    906 HKLDRMOD    kLdrWLoadLibraryEx(const char *pszFilename, void *hFileReserved, uint32_t fFlags);
    907 uint32_t    kLdrWGetModuleFileName(HKLDRMOD hMod, char *pszModName, size_t cchModName);
    908 HKLDRMOD    kLdrWGetModuleHandle(const char *pszFilename);
    909 int         kLdrWGetModuleHandleEx(uint32_t fFlags, const char *pszFilename, HKLDRMOD hMod);
    910 void *      kLdrWGetProcAddress(HKLDRMOD hMod, const char *pszProcName);
    911 uint32_t    kLdrWGetDllDirectory(size_t cchDir, char *pszDir);
    912 int         kLdrWSetDllDirectory(const char *pszDir);
    913 int         kLdrWFreeLibrary(HKLDRMOD hMod);
    914 int         kLdrWDisableThreadLibraryCalls(HKLDRMOD hMod);
    915 
     989#if defined(_MSC_VER)
     990# define KLDRWINAPI __stdcall
     991#else
     992# define KLDRWINAPI
     993#endif
     994HKLDRMOD KLDRWINAPI kLdrWLoadLibrary(const char *pszFilename);
     995HKLDRMOD KLDRWINAPI kLdrWLoadLibraryEx(const char *pszFilename, void *hFileReserved, uint32_t fFlags);
     996uint32_t KLDRWINAPI kLdrWGetModuleFileName(HKLDRMOD hMod, char *pszModName, size_t cchModName);
     997HKLDRMOD KLDRWINAPI kLdrWGetModuleHandle(const char *pszFilename);
     998int      KLDRWINAPI kLdrWGetModuleHandleEx(uint32_t fFlags, const char *pszFilename, HKLDRMOD hMod);
     999void *   KLDRWINAPI kLdrWGetProcAddress(HKLDRMOD hMod, const char *pszProcName);
     1000uint32_t KLDRWINAPI kLdrWGetDllDirectory(size_t cchDir, char *pszDir);
     1001int      KLDRWINAPI kLdrWSetDllDirectory(const char *pszDir);
     1002int      KLDRWINAPI kLdrWFreeLibrary(HKLDRMOD hMod);
     1003int      KLDRWINAPI kLdrWDisableThreadLibraryCalls(HKLDRMOD hMod);
     1004
     1005/** The handle to a resource that's been found. */
     1006typedef struct KLDRWRSRCFOUND *HKLDRWRSRCFOUND;
     1007/** The handle to a loaded resource. */
     1008typedef struct KLDRWRSRCLOADED *HKLDRWRSRCLOADED;
     1009HKLDRWRSRCFOUND  KLDRWINAPI kLdrWFindResource(HKLDRMOD hMod, const char *pszType, const char *pszName);
     1010HKLDRWRSRCFOUND  KLDRWINAPI kLdrWFindResourceEx(HKLDRMOD hMod, const char *pszType, const char *pszName, uint16_t idLang);
     1011uint32_t         KLDRWINAPI kLdrWSizeofResource(HKLDRMOD hMod, HKLDRWRSRCFOUND hFoundRsrc);
     1012HKLDRWRSRCLOADED KLDRWINAPI kLdrWLoadResource(HKLDRMOD hMod, HKLDRWRSRCFOUND hFoundRsrc);
     1013void    *KLDRWINAPI kLdrWLockResource(HKLDRMOD hMod, HKLDRWRSRCLOADED hLoadedRsrc);
     1014int      KLDRWINAPI kLdrWFreeResource(HKLDRMOD hMod, HKLDRWRSRCLOADED hLoadedRsrc);
     1015
     1016typedef int (KLDRWINAPI *PFNKLDRWENUMRESTYPE)(HKLDRMOD hMod, const char *pszType, uintptr_t uUser);
     1017int      KLDRWINAPI kLdrWEnumResourceTypes(HKLDRMOD hMod, PFNKLDRWENUMRESTYPE pfnEnum, uintptr_t uUser);
     1018int      KLDRWINAPI kLdrWEnumResourceTypesEx(HKLDRMOD hMod, PFNKLDRWENUMRESTYPE pfnEnum, uintptr_t uUser, uint32_t fFlags, uint16_t idLang);
     1019
     1020typedef int (KLDRWINAPI *PFNKLDRWENUMRESNAME)(HKLDRMOD hMod, const char *pszType, char *pszName, uintptr_t uUser);
     1021int      KLDRWINAPI kLdrWEnumResourceNames(HKLDRMOD hMod, const char *pszType, PFNKLDRWENUMRESNAME pfnEnum, uintptr_t uUser);
     1022int      KLDRWINAPI kLdrWEnumResourceNamesEx(HKLDRMOD hMod, const char *pszType, PFNKLDRWENUMRESNAME pfnEnum, uintptr_t uUser, uint32_t fFlags, uint16_t idLang);
     1023
     1024typedef int (KLDRWINAPI *PFNKLDRWENUMRESLANG)(HKLDRMOD hMod, const char *pszType, const char *pszName, uint16_t idLang, uintptr_t uUser);
     1025int      KLDRWINAPI kLdrWEnumResourceLanguages(HKLDRMOD hMod, const char *pszType, const char *pszName, PFNKLDRWENUMRESLANG pfnEnum, uintptr_t uUser);
     1026int      KLDRWINAPI kLdrWEnumResourceLanguagesEx(HKLDRMOD hMod, const char *pszType, const char *pszName,
     1027                                                 PFNKLDRWENUMRESLANG pfnEnum, uintptr_t uUser, uint32_t fFlags, uint16_t idLang);
    9161028/** @} */
    9171029
Note: See TracChangeset for help on using the changeset viewer.