You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
7.3 KiB
187 lines
7.3 KiB
#ifndef _DSLOADER__H_
|
|
#define _DSLOADER__H_
|
|
|
|
//
|
|
// This header file defines the interface between TWAIN Source manager and
|
|
// the import data source loader. An import data source loader is a
|
|
// separate module loaded by the Source manager to enumerate, load, and unload
|
|
// data sources not in TWAIN traditional form, ie, *.ds files in the TWAIN
|
|
// subdirectory. This kind of data sources can be in any form as far as
|
|
// the loader can expose them properly so that the Source
|
|
// manager can access to them.
|
|
// A registry entry is dedicated for the loader(only one loader is allowed,
|
|
// although this may be changed in the future):
|
|
// ImportDSLoader = REG_SZ : <loader full path name>
|
|
//
|
|
|
|
//
|
|
// API names provided by the loader.
|
|
//
|
|
|
|
const CHAR FIND_FIRSTIMPORTDS[] = "FindFirstImportDS";
|
|
const CHAR FIND_NEXTIMPORTDS[] = "FindNextImportDS";
|
|
const CHAR CLOSE_FINDCONTEXT[] = "CloseFindContext";
|
|
const CHAR LOAD_IMPORTDS[] = "LoadImportDS";
|
|
const CHAR UNLOAD_IMPORTDS[] = "UnloadImportDS";
|
|
const CHAR GET_LOADERSTATUS[] = "GetLoaderStatus";
|
|
const CHAR FIND_IMPORTDSBYDEVICENAME[] = "FindImportDSByDeviceName";
|
|
|
|
//
|
|
// We pass the imported data source handle on every call to an imported
|
|
// data source so that the loader has a way of dispatching the call
|
|
// to the designated data source in case two or more data sources
|
|
// share the same DS_Entry.
|
|
//
|
|
|
|
typedef TW_UINT16 (APIENTRY *PFNIMPORTEDDSENTRY)(HANDLE, TW_IDENTITY *,
|
|
TW_UINT32, TW_UINT16, TW_UINT16, TW_MEMREF);
|
|
//
|
|
// Each data source has its own load/unload function. This makes it possible
|
|
// for the loader to assign different loading/unloading scheme for
|
|
// different data source.
|
|
//
|
|
|
|
typedef TW_UINT16 (APIENTRY *PFNLOAD_IMPORTDS)(LPCSTR DeviceName,
|
|
DWORD DeviceFlags, HANDLE *phDS, PFNIMPORTEDDSENTRY *pDSEntry);
|
|
typedef TW_UINT16 (APIENTRY *PFNUNLOAD_IMPORTDS)(HANDLE hDS);
|
|
|
|
//
|
|
// Data structure used to convey information about a
|
|
// particular data source
|
|
//
|
|
|
|
typedef struct tagImportDSInfo
|
|
{
|
|
DWORD Size; // The size of the entire structure in bytes.
|
|
CHAR DeviceName[MAX_PATH]; // The device name which uniquely
|
|
// identifies a particular device
|
|
// instance in a system. The content
|
|
// is up to the loader.
|
|
DWORD DeviceFlags; // misc flags used by the loader.
|
|
// Together with DeviceName, it is required
|
|
// to load a device.
|
|
PFNLOAD_IMPORTDS pfnLoadDS; // Loader provided function to load this
|
|
// this data source.
|
|
|
|
PFNUNLOAD_IMPORTDS pfnUnloadDS; // Loader provided function to unload this data source.
|
|
}IMPORT_DSINFO, *PIMPORT_DSINFO;
|
|
|
|
//
|
|
// Funtion prototypes for the APIs
|
|
//
|
|
|
|
typedef TW_UINT16 (APIENTRY *PFNFIND_FIRSTIMPORTDS)(PIMPORT_DSINFO pDSInfo, PVOID *Context);
|
|
typedef TW_UINT16 (APIENTRY *PFNFIND_NEXTIMPORTDS)(PIMPORT_DSINFO pDSInfo, PVOID Context);
|
|
typedef TW_UINT16 (APIENTRY *PFNCLOSE_FINDCONTEXT)(PVOID Context);
|
|
typedef TW_UINT16 (APIENTRY *PFNFIND_IMPORTDSBYDEVICENAME)(PIMPORT_DSINFO pDSInfo, LPCSTR DeviceName);
|
|
typedef TW_UINT16 (APIENTRY *PFNGET_LOADERSTATUS)(TW_STATUS *ptwStatus);
|
|
|
|
//
|
|
// This API finds the first available data source managed by the loader
|
|
// Input:
|
|
// pDSInfo -- the buffer to receive the first available data source
|
|
// information. The structure size must be initialized.
|
|
// Context -- A place holder to store the context created by this
|
|
// API. It is required for FindNextImportDS.
|
|
// CloseFindContext should be called to release any
|
|
// resource alloated for this context.
|
|
//Output:
|
|
// standard TWRC_ code. If it is not TWRC_SUCCESS, a call
|
|
// to GetLoaderStatus will returns the corresponding TWCC_ code.
|
|
// If the API succeeded, TWRC_SUCCESS is returned.
|
|
// If the API succeeded, pDSInfo is filled with the data source
|
|
// information.
|
|
|
|
TW_UINT16 APIENTRY FindFirstImportDS(PIMPORT_DSINFO pDSInfo,PVOID Context);
|
|
|
|
//
|
|
// This API finds the next available data source managed by the loader
|
|
// Input:
|
|
// pDSInfo -- the buffer to receive the next available data source
|
|
// information. The structure size must be initialized.
|
|
// Context -- The context returned by FindFirstImportDS
|
|
//Output:
|
|
// standard TWRC_ code. If it is not TWRC_SUCCESS, a call
|
|
// to GetLoaderStatus returns the corresponding TWCC_ code.
|
|
// If the API succeeded, TWRC_SUCCESS is returned.
|
|
// If there are no available Data source, TWRC_ENDOFLIST is
|
|
// returned. If the function succeeded, the buffer designated
|
|
// by pDSInfo is filled with data source information.
|
|
|
|
TW_UINT16 APIENTRY FindNextImportDS(PIMPORT_DSINFO pDSInfo,PVOID Context);
|
|
|
|
//
|
|
// This API closes the context information used to find the data sources
|
|
// managed by the loader. The context is returned from FindFirstImportDS
|
|
// API and should be releases by calling this API when the searching
|
|
// is done.
|
|
// Input:
|
|
// Contex -- the context to be closed
|
|
// Output:
|
|
// standard TWRC_ error code
|
|
|
|
TW_UINT16 APIENTRY CloseFindContext( PVOID Context);
|
|
|
|
//
|
|
// This API asks the loader to load the specific data source
|
|
// idenetified by the given IMPORT_DSINFO and returns
|
|
// the data source's DSEntry. Each data source can supply its own load function
|
|
// or several data sources can share the same function. The choice is up
|
|
// to the loader and how it load/unload the data source.
|
|
// Input:
|
|
// DeviceName -- the name that uniquely represent the data source
|
|
// phDS -- to receive a handle to the loaded data source.
|
|
// pDSEntry -- to receive the data source DSEntry
|
|
// Output:
|
|
// standard TWRC_.
|
|
// If the data source is loaded successfully, TWRC_SUCCESS
|
|
// is returned, pDSEntry is filled with the data source's
|
|
// DSEntry and phDS is filled with the handle to the loaded
|
|
// data source. If this api failed, NULL are returned in phDS
|
|
// and pDSEntry.
|
|
//
|
|
TW_UINT16 APIENTRY LoadImportDS(LPCSTR DeviceName, DWORD DeviceFlags,HANDLE *phDS,
|
|
PFNIMPORTEDDSENTRY *pImportDSEntry);
|
|
//
|
|
// This API asks the loader to unload the specific data source
|
|
// The loader is free to release any resources allocated for this
|
|
// data source. When the data source is needed again, it will be
|
|
// loaded again.
|
|
// Input:
|
|
// hDS -- handle to the loaded data source obtained
|
|
// from LoadImportDS API
|
|
// Output:
|
|
// standard TWRC_ error code
|
|
|
|
TW_UINT16 APIENTRY UnloadImportDS(HANDLE hDS);
|
|
|
|
//
|
|
// This API finds the data source designated by the given
|
|
// device name. This API is useful when the caller only
|
|
// knows about a particular device name.
|
|
//
|
|
// Input:
|
|
// pDSInfo -- buffer to receive data source info.
|
|
// DeviceName -- the device name use to search
|
|
// for data source
|
|
// Output:
|
|
// TWRC_SUCCESS if a match is found.
|
|
// TWRC_ENDOFLIST if no math is found.
|
|
// TWRC_ other error code.
|
|
//
|
|
|
|
TW_UINT16 APIENTRY FindImportDSByDeviceName(PIMPORT_DSINFO pDSInfo,LPCSTR DeviceName);
|
|
|
|
//
|
|
// This API returns the current loader TW_STATUS. The loader
|
|
// updates its status only when the last api call to the loader
|
|
// did not return TWRC_SUCCESS.
|
|
// Input:
|
|
// ptwStatus -- buffer to receive the status
|
|
// Output:
|
|
// standard TWRC_ code.
|
|
//
|
|
|
|
TW_UINT16 APIENTRY GetLoaderStatus(TW_STATUS *ptwStatus);
|
|
|
|
#endif // #ifndef _DSLOADER__H_
|