home *** CD-ROM | disk | FTP | other *** search
- // **************************************************************************
- //
- // File: SMSAPI.H
- //
- // Copyright (c) 1994, 1995 Microsoft Corp.
- //
- // This is the header file for the SMS API.
- //
- // This file contains all data definitions, manifests, return codes and
- // API declarations that constitute the API set.
- //
- //
- // **************************************************************************
-
-
-
- // **************************************************************************
- //
- // The SMS API set provides a set of interfaces to enable querying and,
- // in some cases creation and deletion, of data from an SMS database.
- //
- // SMS contains numerous objects to which an ISV needs access. These objects
- // are (not in any particular order): packages, jobs, workstation command
- // lines, program items, sites, domains, machines, machine groups.
- //
- // The SMS API is built using a technology known as the objectity technique.
- // This technique expresses all objects in terms of containers, folders,
- // and scalars. All SMS objects are thus expressed in these terms.
- // The advantage of this is that we have a standard interface to all
- // objects. That is, the API does not distinguish between, say, a job and
- // a machine.
- //
- // The starting point is the container. There are certain types of container
- // defined (container types below). A container is opened and then
- // populated. The act of populating a container causes it to be filled with
- // folders of defned types. A folder can contain sub-folders and scalars.
- // Scalars are akin to leaf nodes in a hierarchy graph. The contain a
- // name, type, and value.
- //
- // Much of the power to the objectity technique is provided by filters.
- // These are objects which specify selection criteria. Filters are applied
- // by the user at the container level, at which point the implementation of
- // the API will assume ownership of the filter. It is guaranteed that only
- // folders matching the filters will be included in the container hierarchy.
- //
- // Every folder can contain a set of scalars. Not all folders do, for
- // example a machine folder does not. In some cases a folder contains a
- // defined set of scalars, in other cases the scalar set can only be
- // determined at run time. In cases where the scalar set is predetermined
- // it will be documented in supporting documentation.
- //
- // The APIs behave in a uniform manner.
- // 1. They all return a status code (SMS_STATUS).
- // 2. Where a value needs to be returned, it is done via a reference
- // parameter.
- //
- // An API is provided to determine the API version. Any problems involving
- // the SMS API should include the information provided by this API.
- //
- // The first step in using the APIs to to establish a connection to a
- // datasource. Currently the only datasource supported in SQL, but the
- // API is designed in such a way that additional datasources can be
- // added. Two APIs are provided for dealing with datasources:
- // DataSourceConnect and DataSourceDisonnect. The connect API returns a
- // connection handle, this is used in subsequent calls to open containers.
- //
- // Apart from these APIs, the rest of the API set is divided into four
- // groups:
- // 1. Container APIs.
- // 2. Folder APIs.
- // 3. Scalar APIs.
- // 4. Filter APIs.
- //
- // 1. Container APIs.
- // These allow a container to be opened, a filter to be applied to a
- // container, a container to be populated with folders, a folder to be
- // retrieved, and the container to be closed. An API also exists to
- // return the number of folders currently contained in a container.
- //
- // 2. Folder APIs.
- // These allow a for retrieval of various types of information about a
- // folder (its ID or name, its type, the number of sub-folders, the number
- // of scalars). Retrieval of sub-folders within a folder in both a
- // sequential fashion and by name. Retrieval of scalars (sequential and by
- // name. And closure of the folder.
- // An API exists to allow folder creation. However, this is implementation
- // dependant. That is, most folders do not permit creation, some (eg
- // ceratin types of jobs) do.
- //
- // 3. Scalar APIs.
- // There is a bit of overlap between this and the previous group. Although
- // scalar retrieval is included in the Folder API group, it can also be
- // considered a scalar API.
- // An API is provided to set/update the value of a scalar. This can
- // currently only be done in a folder that is being newly created.
- //
- // 4. Filter APIs.
- // APIs for opening and closing a filter, and adding tokens into a filter.
- // Filters are composed of one or more tokens of the same type. Some filters
- // permit grouping of tokens within the filter (ie machine filter). This
- // allows for complex boolean expressions.
- // Tokens differ between different filters, but have a common interface.
- // Tokens are contructed via the SmsAddToken API.
- //
- // 5. Filter container APIs
- // Certain filters can be persistent, that is they are saved in the database
- // and can be reloaded by separate processes. These filters can be created
- // either the APIs, or via the SMS Admin.
- // These APIs enable the retrieval of these filters from the datasource
- // and the commital of new filters into the datasource.
- // Currently machine filters are the only filters capable of exhibiting
- // persistence.
- //
- // **************************************************************************
-
-
- #ifndef _SMSAPI_H_
- #pragma option push -b -a8 -pc -A- /*P_O_Push*/
- #define _SMSAPI_H_
-
-
-
- // ====================================================================
- //
- // Includes
- //
- // ====================================================================
-
- #include <qrycodes.h> // The query codes for Machine queries.
-
- #include <smsinfo.h> // Manifests related to scalar settings.
-
- #include <objectty.h> // Objectity engine.
-
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
-
-
- // ====================================================================
- //
- // Datasource definition information.
- //
- // ====================================================================
-
- //
- // Supported datasources.
- // (NOTE: only sql supported currently).
- //
- typedef enum { DB_SQL, DB_SQL_CONNECTED, DB_OTHER } DATASOURCE_TYPE;
-
-
- //
- // Prototype for a decryption function. This is the last parameter
- // to the SQL_CONNECT_PARAMS structure.
- // When a user calls the DataSourceConnect API he can pass in the
- // user name and password in encrypted form. If the decryption function
- // pointer is non-null the the API will attempt to call this function
- // both for the user name and password.
- // The decryption function is user-supplied, it is expected to return
- // the decrypted data in the first parameter.
- //
-
- typedef void (*PDECRYPTFUNC)(char *pszBuffer, char *pszDecryptMe, char *pszKey);
-
-
- //
- // The information block needed for the DataSourceConnect API.
- // 1. SQL datasource.
- //
-
- typedef struct _SQL_CONNECT_PARAMS {
- DATASOURCE_TYPE ds;
- char *pszServer; // SQL Server name.
- char *pszUserName; // User name (possibly encrypted).
- char *pszPasswd; // Password (possibly encrypted).
- char *pszDbName; // Database name.
- char *pszKey; // Decryption key.
- PDECRYPTFUNC pFunc; // Pointer to a decryption function.
- } SQL_CONNECT_PARAMS;
-
-
- //
- // 2. RESERVED DO NOT USE
- //
-
- typedef struct _SQL_CONNECT_CONNECTED_PARAMS {
- DATASOURCE_TYPE ds;
- HANDLE hDataSource;
- const char *pszAccessType;
- } SQL_CONNECT_CONNECTED_PARAMS;
-
-
-
- //
- // This only has the type field. It is used for extracting the type
- // in such a fashion that user code doesn't have to imply any
- // particular data source. It has no use other than that.
- //
-
- typedef struct _GENERIC {
- DATASOURCE_TYPE ds;
- } GENERIC;
-
-
-
- // We can now define the DATASOURCE. It is a union of the structs above.
- typedef union {
- GENERIC type;
- SQL_CONNECT_PARAMS sqlParams;
- SQL_CONNECT_CONNECTED_PARAMS sqlConnectedParams;
- } DATASOURCE;
-
-
-
-
-
- // ====================================================================
- //
- // Return codes. See also objectty.h.
- //
- // ====================================================================
- typedef DWORD SMS_STATUS; // All APIs return an SMS_STATUS.
-
- #define SMS_OK OTT_OK
- #define SMS_MORE_DATA OTT_MORE_DATA
- #define SMS_NO_MORE_DATA OTT_NO_MORE_DATA
- #define SMS_FOLDER_NO_UPDATE OTT_FOLDER_NO_UPDATE
-
- // Error codes when registering (and accessing) containers and filters
- #define SMS_DUPLICATE_CONTAINER_ID OTT_DUPLICATE_CONTAINER_ID
- #define SMS_DUPLICATE_FOLDER_ID OTT_DUPLICATE_FOLDER_ID
- #define SMS_DUPLICATE_FILTER_ID OTT_DUPLICATE_FILTER_ID
-
- #define SMS_DUPLICATE_FILTER OTT_DUPLICATE_FILTER
-
- #define SMS_SCALAR_NO_UPDATE OTT_SCALAR_NO_UPDATE
- #define SMS_SCALAR_WRONG_TYPE OTT_SCALAR_WRONG_TYPE
- #define SMS_INVALID_CONTAINER_ID OTT_INVALID_CONTAINER_ID
- #define SMS_INVALID_FOLDER_ID OTT_INVALID_FOLDER_ID
- #define SMS_INVALID_FILTER_ID OTT_INVALID_FILTER_ID
-
- #define SMS_CONTAINER_NO_UPDATE OTT_CONTAINER_NO_UPDATE
-
- #define SMS_PARAMETER_ERROR OTT_PARAMETER_ERROR
- #define SMS_UNSUPPORTED OTT_UNSUPPORTED
-
- // This is returned when a specific object
- // (folder or scalar) is requested and not
- // found. APIs returning this are GetFolderByID
- // and GetScalarByName.
- #define SMS_NOT_FOUND OTT_NOT_FOUND
-
- #define SMS_PARENT_NOT_FOUND OTT_PARENT_NOT_FOUND
-
- #define SMS_CANT_DELETE OTT_CANT_DELETE
-
- #define SMS_NEW_FOLDER OTT_NEW_FOLDER
-
- // Error when attempting to multiply
- // link a folder.
- #define SMS_FOLDER_LINKED OTT_FOLDER_LINKED
-
- // Filter operations.
- #define SMS_RANGE_ERROR OTT_RANGE_ERROR
-
- // These are returned when a container
- // operation is tried when it shouldn't be.
- #define SMS_CONTAINER_NOT_POPULATED OTT_CONTAINER_NOT_POPULATED
- #define SMS_CONTAINER_POPULATED OTT_CONTAINER_POPULATED
-
-
- // Attempt to perform persistent operation
- // on a non-persistent filter.
- #define SMS_FILTER_NOT_PERSISTENT OTT_FILTER_NOT_PERSISTENT
-
- // Error return if the connection handle
- // of a filter doesn't match that of a
- // container to which the filter is being
- // applied.
- #define SMS_INVALID_CONNECTION_HANDLE OTT_INVALID_CONNECTION_HANDLE
- #define SMS_INVALID_FILTER_TYPE OTT_INVALID_FILTER_TYPE
-
- // Folder's can't be unlinked if there are multiple handles
- // to the same object.
- #define SMS_IN_USE_BY_OTHER OTT_IN_USE_BY_OTHER
-
- // User (ie non-engine) codes begin here.
- #define SMS_ERROR (OTT_END + 1)
- #define SMS_SQL_ERROR (OTT_END + 2)
- #define SMS_INVALID_DATASOURCE (OTT_END + 3)
- #define SMS_INVALID_HANDLE (OTT_END + 4)
- #define SMS_INVALID_FOLDER_TYPE (OTT_END + 6)
-
- #define SMS_CONNECT_FAILED (OTT_END + 7)
- #define SMS_NO_CREATE (OTT_END + 8)
- #define SMS_FOLDER_NOT_MODIFIED (OTT_END + 9)
- #define SMS_INCORRECT_FOLDER_TYPE (OTT_END + 10) // Unused.
- #define SMS_INVALID_PARAMETER (OTT_END + 11)
- #define SMS_EMPTY (OTT_END + 12)
-
- // Return when commiting a child folder
- // and the parent folder must be committed.
- #define SMS_PARENT_NEEDS_COMMIT (OTT_END + 13)
- #define SMS_PARENT_ALREADY_COMMITTED (OTT_END+ 14)
-
- // Used in asynchronous folder retrieval.
- // Indicates that there might be more
- // data but it isn't available yet.
- #define SMS_NOT_READY (OTT_END + 15)
-
- #define SMS_FILTER_NO_MODIFY (OTT_END + 16)
- #define SMS_FOLDER_ALREADY_DELETED (OTT_END + 17)
-
- // Only allow one active connection.
- // This is an SMS restriction.
- #define SMS_ALREADY_CONNECTED (OTT_END + 18)
-
- // Some failure in committing a folder
- #define SMS_COMMIT_FAILED (OTT_END + 19)
-
-
- // Specific failure in linking a folder
- #define SMS_DUPLICATE_FOLDER (OTT_END + 20)
-
-
- // ====================================================================
- //
- // Various manifests.
- //
- // ====================================================================
-
- // The location of the SMS registry root.
- #define SMS_REG_ROOT "SOFTWARE\\Microsoft\\SMS\\"
-
- // The max size of character (string) data that we return.
- #define SMS_DATA_BUFF_SIZE 255
-
-
- // 'SMSBUFF' and 'OBJDESCRIPTOR' used in object type enumeration APIs.
- // ===================================================================
-
- // A character buffer.
- // -------------------
- typedef char SMSBUFF[SMS_DATA_BUFF_SIZE+1];
-
- // Describes an object returned from SmsEnumObjects.
- // -------------------------------------------------
- typedef struct _OBJDESCRIPTOR {
- DWORD objType; // Type of this object.
- SMSBUFF szName; // Object name (eg 'Personal Computer')
- SMSBUFF szFriendlyName; // Friendly name. Only used in groups
- // where szName would be, eg,
- // 'MICROSOFT|IDENTIFICATION|1.0', the
- // friendly name would be 'Identification'.
- BOOL bGotFriendlyName; // TRUE if we have a friendly name.
-
- DWORD dwRelopMin; // For attributes, indicates range of
- DWORD dwRelopMax; // relational operators that can be used
- // for this attribute.
- BOOL bGotRelops; // TRUE if we have the relops fields set.
-
- } OBJDESCRIPTOR;
-
-
- // Object types.
- // =============
- // This is the value that is inserted by the object
- // enumeration APIs into the OBJDESCRIPTOR structure.
- // --------------------------------------------------
- #define OT_ARCHLIST 1
- #define OT_ARCH 2
- #define OT_GROUP 3
- #define OT_ATTRIBUTE 4
-
- #define OT_PLATFORMS 5
- #define OT_PLATFORM_PDF 6
- #define OT_PLATFORM_WINST 7
- #define OT_PLATFORM_NAD 8
-
- #define OT_UNKNOWN 100
-
-
-
-
- // --------------------------------------------------------------------
- // Flags for Populate options.
- // --------------------------------------------------------------------
- #define POP_SYNC 0x00000000
- #define POP_ASYNC 0x00000001
- #define POP_EVENT 0x00000010
- #define POP_WINDOW 0x00000020
-
-
- // --------------------------------------------------------------------
- // Folder types supported by smsapi (MUST NOT BEGIN AT ZERO).
- // --------------------------------------------------------------------
- #define F_SITE 1 // Site folder.
- #define F_MACHINE 2 // Machine folder.
- #define F_GROUP 3 // Subfolder of machine
- #define F_DOMAIN 4 // Domain folder, subfolder
- // of a site.
- // Jobs
- #define F_SYSTEMJOB 5 // System (NAD/Site) job folder.
- //#define F_MINIJOB 6 // Mini-job folder.
- #define F_INSTALLJOB 7 // Job folder (wksta install).
- #define F_SRVINSTALLJOB 8 // Job folder (server install).
- #define F_REMPKGJOB 9 // Remove package Job folder.
-
- #define F_PACKAGE 10 // Packages.
- #define F_WCL 11 // Workstation command lines.
- #define F_PROGITEM 12 // Program items.
- #define F_INVENTORY 13 // Inventory rules.
-
- #define F_MACHINEGROUP 14 // Machine group
- #define F_SITEGROUP 15 // Site group folder
-
- // --------------------------------------------------------------------
- // Container types supported by smsapi (MUST NOT BEGIN AT ZERO).
- // --------------------------------------------------------------------
- #define C_SITE 1 // Site container.
- #define C_JOB 2 // Job container.
- #define C_MACHINE 3 // Machine container.
- #define C_PACKAGE 4 // Package container.
- #define C_MACHINEGROUP 5 // Machine group
- #define C_SITEGROUP 6 // Site group
-
-
- // ====================================================================
- //
- // Filter information.
- //
- // ====================================================================
-
-
- // --------------------------------------------------------------------
- // Filter types
- // --------------------------------------------------------------------
- #define SITE_FILTER 1
- #define MACHINE_FILTER 2
- #define GROUP_FILTER 3
- #define JOB_FILTER 4
- #define ARCHITECTURE_FILTER 5
- #define PACKAGE_FILTER 6
- #define ATTRIBUTE_FILTER 7
- #define SITELIMIT_FILTER 8
-
-
- // --------------------------------------------------------------------
- // Token types.
- // --------------------------------------------------------------------
- #define TOKEN_USER 0x8 // 1000 bit 3 always set for user-token
- #define TOKEN_OR 0x2 // 0010 bit 1 always set for AND/OR
- #define TOKEN_AND 0x3 // 0011 bit 1 always set for AND/OR
- #define TOKEN_OPENPAREN 0x4 // 0100 bit 2 always set for PAREN
- #define TOKEN_CLOSEPAREN 0x5 // 0101 bit 2 always set for PAREN
- #define TOKEN_NOTIN 0x20 //10100 bit 2 set for a PAREN plus bit 4 for an extra indicator.
- #define TOKEN_OPERATOR 0x2 // Detects both AND or OR
- #define TOKEN_PAREN 0x4 // Detects either open or close paren
-
-
- // --------------------------------------------------------------------
- // Manifests used in filter token APIs.
- // --------------------------------------------------------------------
- #define AT_START OTT_AT_START // Token will be inserted at start of
- // expression.
- #define AT_END OTT_AT_END // Token will be appended to end of
- // expression.
-
- //
- // Flags field in SmsManipulateTokens.
- //
- #define TOK_GROUP 1
- #define TOK_UNGROUP 2
- #define TOK_DELETE 3
- #define TOK_GROUP_NOT 4
-
-
- /////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////
- /////////// The APIs ////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////
-
-
- // **************************************************************************
- //
- // This DLL provides a "C" interface for accessing SMS objects.
- //
- //===========================================================================
- //
- // SmsAPIVer
- //
- // This API returns a version string to identify the SMS API version.
- //
- // Parameters:
- // char **ppVersion The version string is returned
- // in this pointer.
- // The user must not free this memory,
- // it is a static buffer inside the API
- // dll.
- //
- // Returns:
- // SMS_STATUS Always SMS_OK.
- //
- //===========================================================================
- //
- //===========================================================================
- // 1. Connection APIs.
- //===========================================================================
- //
- // SmsDataSourceConnect
- //
- // This API connects to the datasource as specified in the DATASOURCE
- // parameter. The API returns a connection handle in the second
- // parameter.
- // This handle is passed to OpenContainer.
- //
- // Parameters:
- // DATASOURCE *pd Pointer to DATASOURCE structure.
- // The user must have already set up
- // the appropriate parameters in this
- // structure. For SQL this contains
- // the server name, user name, password,
- // database, public encryption key, and
- // a pointer to a decryption function.
- // See the description above.
- // HANDLE *phConn Handle to a connection. This is
- // filled in by the API.
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsDataSourceDisconnect
- //
- // This API releases a datasource connection that was established by
- // DataSourceConnect.
- //
- // Parameters:
- // HANDLE hConn Handle to the connection to be closed.
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // 2. Engine APIs.
- //
- // These are straight "pass-through" APIs that just call the engine APIs
- // (in objectty.dll) directly. Here for name conformance and so to ensure
- // that smsapi.dll will get loaded before the engine.
- //
- //===========================================================================
-
- //
- // SmsEnumContainers
- //
- // This returns an array of pointers to FOLDER_INFO structures.
- // If the pData parameter is NULL the API sets pCount to the number of
- // containers registered. Thus, a user can call this API with a NULL
- // buffer to get the count, which enables the application to allocate
- // sufficient memory. If pData is non-NULL the API will copy up to
- // pCount FOLDER_INFO pointers into the data buffer. If that number
- // is less than the number of containers the count will be set as
- // previously described.
- // The data buffer is an array of pointers to FOLDER_INFO structures.
- // These point to memory in the engine's address space, it should
- // not be deallocated or modified.
- //LATER: make this pointer to const.
- //
- //
- // Parameters:
- // FOLDER_INFO **pData Pointer to array of FOLDER_INFO structures.
- // DWORD *pCount Pointer to count of containers.
- //
- // Returns:
- // SMS_STATUS OTT_OK: success.
- // OTT_MORE_DATA: passed buffer not
- // big enough. *pCount says how
- // many containers registered.
- //
- // ====================================================================
- //
- // SmsEnumFilters
- //
- // This API returns a list of all filters currently registered
- // in the filter registry. This list is actually an array of
- // FILTER_INFO structs.
- //
- // The memory for this array must be allocated by the caller.
- // To determine the size of the array call this API with NULL as
- // the first parameter. This will result in the number of filters
- // being returned in pCount.
- //
- //
- // Parameters:
- // FILTER_INFO *paFI Pointer to an array of FILTER_INFO
- // structures.
- // The user is responsible for allocating
- // (and deallocating) this memory.
- // DWORD *pCount Pointer to count of filters.
- //
- // Returns:
- // SMS_STATUS OTT_OK: success.
- // OTT_MORE_DATA: passed buffer not
- // big enough. *pCount says how
- // many containers registered.
- //
- // ==========================================================================
- //
- // SmsEnumFolders
- //
- // This API returns a list of all folders currently registered
- // in the folder registry. This list is actually an array of
- // FOLDER_INFO structs.
- //
- // The memory for this array must be allocated by the caller.
- // To determine the size of the array call this API with NULL as
- // the first parameter. This will result in the number of filters
- // being returned in pCount.
- //
- //
- // Parameters:
- // FOLDER_INFO **pData Pointer to an array of FOLDER_INFO structures.
- // DWORD *pCount Pointer to count of folders.
- //
- // Returns:
- // SMS_STATUS OTT_OK: success.
- // OTT_MORE_DATA: passed buffer not
- // big enough. *pCount says how
- // many containers registered.
- //
- // ==========================================================================
- //
- // SmsDescribeFolder
- //
- // This API retrieves information about a container/folder and returns
- // it in the FOLDER_INFO parameter (see description of FOLDER_INFO).
- // Because containers and folders share the same id space for their
- // tags, it is necessary for the caller to specify which one they are
- // interested in.
- // Note that the Enum... APIs return a set of objects, this API returns
- // only a single one.
- //
- //
- //
- // Parameters:
- // BASETYPE tObjectity T_CONTAINER or T_FOLDER
- // (do we want a container or folder).
- // DWORD dwTag Container/folder type.
- // FOLDER_INFO **ppFInfo Store the retrieved FOLDER_INFO here.
- //
- // Returns:
- // SMS_STATUS OTT_OK: success.
- // OTT_INVALID_CONTAINER_ID:
- // OTT_INVALID_FOLDER_ID:
- // The container/folder cannot be
- // located in the registry.
- //
- //===========================================================================
- // 3. Container APIs.
- //===========================================================================
- //
- // SmsOpenContainer
- //
- // Opens a container of the specified type (cType). The container is opened
- // but is currently empty. The only operations that can be performed on it
- // in this state is SetFilter, Populate, and CloseContainer.
- // It is permissible to have multiple containers of the same type opened
- // simultaneously.
- // Only when a container has been populated does it have information that
- // can resonably be examined.
- // The container type is one of the C_xxx manifests in the list above.
- //
- // Parameters:
- // DWORD cType Type of the container to open.
- // This should be one of thr C_xxx
- // manifests above.
- // HANDLE hConnect Handle to a connection that has been
- // established via SmsDataSourceConnect.
- // HANDLE *phContainer Handle to the container, filled in by
- // the API.
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsSetFilter
- //
- // This API submitts a filter to the container. The filter consists
- // of tokens (possibly grouped) which express conditions for folder
- // inclusion within a container.
- // Note: when applying multiple filters an implicit AND is performed between
- // filters.
- //
- // Parameters:
- // HANDLE hContainer Identifies the container.
- // HANDLE hFilter Handle to the filter to assign to
- // the container.
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsPopulate
- //
- // This causes the container to be populated with folders according to the
- // filters applied to the container.
- // It should be noted that not all filters that are applied to a container
- // will be activated at this stage. For instance, applying an attribute
- // filter to a site container has no effect at this stage. However, the
- // filter is held internally within the system and will be applied to the
- // appropriate folder. For an attribute filter, its activation in a site
- // container would come at the level of a child domain folder. This
- // technique is known as percolating filters.
- // Containers are the only level at which filters can be applied at the
- // API level.
- // The dwOpts parameter allows the caller to specify whether the population
- // (and the folder retrieval) should be asynchronous or synchronous.
- // Synchronous is the default. These options are described earlier (see
- // "Populate options").
- // This parameter also specifies how the event handle should be set. The
- // event handle can be set by the API whenever a folder has been retrieved,
- // when all folders have been retrieved, or it can not be used at all (the
- // default).
- //
- // A third parameter is an event handle. According
- //
- // Parameters:
- // HANDLE hContainer Identifies the container.
- // DWORD dwOptions Synchronous/asynch, event handle usage.
- // NOTIFY *pNotify Contains information about asynchronous
- // notification. NULL if synchronous.
- // parameter.
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsGetNextFolder
- //
- // This API retrieves the next folder in a parent container or folder.
- //
- // Parameters:
- // HANDLE hParent Identifies the parent (container or
- // folder).
- // DWORD fType Which type of sub-folder we want to
- // retrieve.
- // HANDLE *phFolder Receives a handle to the next
- // folder in the parent.
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsCloseContainer
- //
- // Closes a currently open container, and frees resources held be the
- // container.
- // It is possible to open a container's child folders and then close the
- // container. This has no adverse effects on either the folders or on any
- // filters that have been applied to the container.
- //
- // Parameters:
- // HANDLE hContainer Identifies the container.
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- // 4. Folder APIs.
- //===========================================================================
- //
- // SmsCreateFolder
- //
- // This API attempts to create a folder (initally empty) of the specified
- // type. Folder creation is done in the context of a parent (folder or
- // container). Not all containers/folder support folder creation.
- // Once created, a folder must have its scalars set by the application.
- // Failure to do so will result in the system not accepting the newly
- // created folder. See DescribeFolder for information on retrieving details
- // about a folder's scalars.
- //
- // Parameters:
- // HANDLE hParent Identifies the parent (can be either
- // container or folder).
- // DWORD fType The type of folder to create. See
- // the list of folders above).
- // char *pszFolderID A name to give the folder. Not all
- // creatable folders can be named by the
- // user. In many cases SMS itself will
- // assign the name.
- // HANDLE *phFolder Receives a handle to the newly-created
- // folder (if successful).
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsGetFolderID
- //
- // This API retrives the ID/name of the folder referenced by the folder handle.
- //
- // Parameters:
- // HANDLE hFolder Which folder object we're talking about.
- // char *pszFolderID Pointer to buffer to receive the
- // folder's ID. It is the caller's
- // responsibility to ensure that this
- // buffer is large enough. If in doubt
- // use of buffer of size SMS_DATA_BUFF_SIZE.
- // This is guaranteed to be sufficient.
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsGetFolderType
- //
- // This API retrieves the folder's type as both an integer value and as
- // a character string. For instance invoking this API on a domain folder
- // will result in a type string of "Domain folder" and an integer type of
- // F_DOMAIN being returned. The caller is responsible for ensuring that
- // the character buffer is of sufficient size.
- //
- // Parameters:
- // HANDLE hFolder The folder to query.
- // DWORD *pfType Receive's the folder's type (integer).
- // char *pszfType Receives folder's type (as a string).
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsEnumFolderTypes
- //
- // This API returns an array of DWORDs which indicate what folder types
- // CAN be contained within this folder. It is the caller's responsibility
- // to ensure that the DWORD array (*pfTypes) is of sufficient size.
- // Calling this API with pfTypes of NULL or with *pctFolderTypes of 0,
- // will result in the correct count being returned to the caller in
- // pctFolderTypes.
- // If the *pctFolderTypes is less than the number of folders, then up to
- // *pctFolderTypes are returned in the DWORD array, and a status of
- // SMS_MORE_DATA is returned.
- // If *pctFolderTypes is greater than the number of folders then the maximum
- // number of folder types will be stored in the array, and a value of
- // PARAMETER_ERROR returned. *pctFolderTypes will be updated to indicate
- // the number of folder types.
- //
- // Note the difference between this API and GetFolderCount. This returns
- // a list of sub-folder types that can be contained in the folder,
- // GetFolderCount returns a count of how many sub-folders of a specified
- // type actually are contained in the folder.
- //
- // Parameters:
- // HANDLE hFolder The folder to query.
- // DWORD *pfTypes Points to an array of DWORD.
- // Filled in with the types of sub-
- // folders that this folder can contain.
- // DWORD *pctFolderTypes How many types of sub-folders this
- // folder can contain.
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsGetFolderCount
- //
- // This API returns (in the DWORD parameter) how many sub-folders of the
- // specified folder-type are contained in this folder.
- // Note that a DWORD of F_ANY means return the total count of sub-folders.
- //
- // Parameters:
- // HANDLE hFolder The folder (or container) to query.
- // DWORD fType Which type of sub-folder we're
- // interested in. F_ANY means all types.
- // DWORD *pctFolders Receives the count.
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsGetFolderByID
- //
- // This API the retrieves from the folder a sub-folder of the specified
- // type and with a specified ID.
- // This method of folder retrieval is non-sequential. Once a sub-folder has
- // been retrieved it can be re-retrieved. It is always legal to open a
- // folder multiple times. Doing this will create multiple instances of a
- // folder. Thus, it is possible to retrieve a folder twice, close once
- // instance, and still have an instance of the folder available.
- // Note that a folder type of F_ANY is not accepted here, it will result
- // in a return code of SMS_INVALID_FOLDER_TYPE.
- // Note that a type of F_ANY is not allowed.
- //
- //
- // Parameters:
- // HANDLE hFolder The folder to query.
- // DWORD fType Which type of sub-folder we want to
- // retrieve (see GetFolderCount).
- // char *pszFolderID The sub-folder's ID (name).
- // HANDLE *phSubFolder Receives a handle to the sub-folder.
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsRewind
- //
- // This API resets the internal counts of either a container, a folder, or
- // a filter so that contained sub-folders and/or scalars can be re-
- // enumerated.
- // Because GetNextFolder and GetNextScalar are sequential, once thay have
- // been retrieved once they cannot be re-retrieved with these APIs.
- // The Rewind API enbles the retrieval to be restarted.
- // The options parameter allows the user to specify that either the folder
- // list or the scalar list or both be rewound.
- //
- //
- // Parameters:
- // HANDLE hObject The container, folder, or filter
- // to be rewound.
- // DWORD dwOptions Rewind options:-
- // RW_FOLDER: rewind folder lists.
- // RW_SCALAR: rewind scalar lists.
- // RW_ALL: both.
- //
- // If the object is a container or
- // folder, a particular type of sub-
- // folder list may be rewound by passing
- // the child folder type in the
- // dwOptions parameter.
- //
- // If the object is a filter container,
- // then a particular type of filter list
- // may be rewound by passing the filter
- // type in the dwOptions parameter.
- //
- // If the object is a filter then only
- // RW_SCALAR is valid.
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
-
- //===========================================================================
- //
- // SmsCloseFolder
- //
- // This API closes the specified folder.
- // Closing a folder causes sub-folders to be closed and deallocated UNLESS
- // they have already been retrieved by a GetSubFolder/GetFolderByID call
- // in which case they remain open.
- // A folder's scalars are always closed and their memory deallocated.
- //
- // Parameters:
- // HANDLE hFolder The folder to close.
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsLinkFolder
- //
- // This API inserts the specified folder into the in-memory list of folders
- // and causes it to be linked to its parent (must still be open).
- // The folder is not written back to the datasource until CommitFolder is
- // called.
- //
- // Parameters:
- // HANDLE hFolder The folder to insert.
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsUnlinkFolder
- //
- // This API deletes the specified folder from the in-memory list of folders.
- // All memory associated with the folder is deallocated. However, the
- // folder is not deleted from the datasource until CommitFolder is called.
- //
- // Parameters:
- // HANDLE hFolder The folder to delete.
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsCommitFolder
- //
- // This API causes any changes in the specified folder to be written back to
- // the datasource.
- // This should be called after LinkFolder and UnlinkFolder in order to make
- // the changes permanent.
- // Note that a Commit following an Unlink will render the specified folder
- // unavailable to all operations (other that SmsCloseFolder).
- //
- // Parameters:
- // HANDLE hFolder The folder to update (insert or delete).
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsDupFolder
- //
- // This API causes the folder (hFolder) to be copied (into hNewFolder)
- // in the context of the specified parent (hParent - container or folder).
- //
- // Parameters:
- // HANDLE hParent The parent folder in whose context
- // the new folder will be inserted.
- // HANDLE hFolder The folder to be duplicated
- // HANDLE *phNewFolder The handle to the new folder
- // is returned here.
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- // 5. Scalar APIs.
- //===========================================================================
- //
- // SmsGetScalarCount
- //
- // This API returns the count of scalars in this folder.
- //
- // Parameters:
- // HANDLE hFolder The folder to query.
- // DWORD *pctScalars Receives the count of scalars.
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsGetNextScalar
- //
- // This API retrieves the next scalar from the folder.
- // Scalars can either be retrieved in a sequential fashion (this API)
- // or by name (GetScalarByName). The RewindFolder API enables the sequential
- // enumeration of scalars to be restarted.
- //
- // Parameters:
- // HANDLE hFolder The folder to query.
- // SCALAR *pScalar Pointer to a SCALAR that has been
- // allocated by the caller.
- // See notes on SCALAR for a full
- // description of this structure and
- // its use.
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsGetScalarByName
- //
- // This API retrieves the scalar specified by its name.
- //
- // Parameters:
- // HANDLE hFolder The folder to query.
- // const char *pszName Name of the scalar.
- // SCALAR *pScalar Pointer to a SCALAR that has been
- // allocated by the caller.
- // See notes on SCALAR for a full
- // description of this structure and
- // its use.
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsSetScalar
- //
- // This API is used to set the value of a scalar. It is used when creating a
- // folder. In the future it will also be used to modify the value of a
- // scalar in an existing folder.
- // The set of scalars supported by a folder is always known at the time a
- // folder is opened, this is true even when a folder is being created.
- // Scalars have a name, a type, and a value. This API allows the value to
- // be set. Only values of the correct type are allowed. Attempting to set,
- // for instance, an integer value in a string scalar will result in a
- // SMS_SCALAR_WRONG_TYPE error return.
- // The API set supports the notion of access rights on folders and scalars,
- // in order for this API to succeed the caller must have the correct
- // access to both. Failure results in an error return of SMS_SCALAR_NO_UPDATE
- // or SMS_FOLDER_NO_UPDATE.
- //
- // Parameters:
- // HANDLE hFolder The folder containing the scalar.
- // SCALAR *pScalar Pointer to a SCALAR that has been
- // allocated and filled in by the caller.
- // See notes on SCALAR for a full
- // description of this structure and
- // its use.
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- // 6. Filter container APIs.
- //===========================================================================
- //
- // SmsOpenFilterContainer
- //
- // The filter container is a storage mechanism for persistent filters,
- // currently only Machine Filters (SMS Queries) fall into this category.
- //
- // Calling this API causes the filter container to be automatically populated
- // with all persistent filters in the system.
- //
- // Parameters:
- // HANDLE hConnection Which connection to use.
- // HANDLE *phFContainer Receives the handle to the opened
- // filter container.
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or an error code.
- // LIST POSSIBLE ERROR CODES HERE.
- //
- //===========================================================================
- //
- // SmsCloseFilterContainer
- //
- // Closes the filter container. All filters container herein that have
- // not been explicitly opened are closed and the memory associated with
- // them is freed.
- //
- // Parameters:
- // HANDLE hFContainer The handle to the filter container.
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or an error code.
- // LIST POSSIBLE ERROR CODES HERE.
- //
- //===========================================================================
- //
- // SmsGetNextFilter
- //
- // This returns (in *phFilter) a handle to the next sequential filter of
- // the specified type from the filter container (specified by hFContainer).
- // A filter type of F_ANY is not acceptable.
- //
- // Parameters:
- // HANDLE hFContainer Handle to the filter container.
- // DWORD frType Filter type.
- // HANDLE *phFilter Handle to the filter returned here.
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or an error code.
- // LIST POSSIBLE ERROR CODES HERE.
- //
- //===========================================================================
- //
- // SmsGetFilterByID
- //
- // The API will return (in *phFilter) a handle to the filter of the specified
- // type which has the specified ID.
- // As above, the handle to the filter container is also passed into the API.
- // A filter type of F_ANY is not acceptable.
- //
- // Parameters:
- // HANDLE hFContainer Handle to the filter container.
- // DWORD frType Filter type.
- // const char *pszID ID of the filter to retrieve.
- // HANDLE *phFilter Handle to the filter returned here.
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or an error code.
- // LIST POSSIBLE ERROR CODES HERE.
- //
- //===========================================================================
- //
- // SmsGetFilterID
- //
- // This returns, in pszID, the ID of the filter specified by the handle.
- //
- // Parameters:
- // HANDLE hFilter
- // char *pszID
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or an error code.
- // LIST POSSIBLE ERROR CODES HERE.
- //
- //===========================================================================
- //
- // SmsCommitFilter
- //
- // This API will attempt to make the specified filter persistent. The filter
- // must be of a type that supports persistence, and all manadatory scalars
- // for the filter must have been set.
- //
- // Parameters:
- // HANDLE hFilter
- // HANDLE hFContainer
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or an error code.
- // LIST POSSIBLE ERROR CODES HERE.
- //
- //===========================================================================
- //
- //===========================================================================
- // 7. Filter APIs.
- //===========================================================================
- //
- // SmsCreateFilter
- //
- // This API creates a filter of the specified type, initially empty. The
- // caller must then set tokens in this filter.
- // Filter types are listed above.
- //
- // Parameters:
- // DWORD fType Type of filter to create.
- // HANDLE hConnection Filters are associated with a
- // connection.
- // HANDLE *phFilter Receives a handle to the filter.
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //============================================================================
- //
- // SmsCloseFilter
- //
- // Close the specified filter and deallocate any memory asociated with it.
- // Once a filter has been applied to a container (SetFilter), the user is
- // free to close it. The API system has made it own copy which will be freed
- // when no longer necessary.
- //
- // Parameters:
- // HANDLE hFilter The filter to close.
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //============================================================================
- //
- // SmsGetFilterType
- //
- // This API gets the type for a particular filter. Using this type it is
- // possible to get the filter template.
- // Parameters:
- // HANDLE hFilter The filter to retrieve the type for.
- // DWORD *pfilterType The filter type is returned here.
- // char *pszTag The filter tag is returned here.
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsGetToken
- //
- // This API retrieves a token from the specified filter or folder. The token
- // to retrieve is given by the index parameter. See also SmsGetTokenCount.
- // The TOKEN structure is detailed in the file objectty.h.
- //
- // Parameters:
- // HANDLE hObject Handle to filter or folder.
- // INT iIndex
- // TOKEN *pTokenInfo
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsAddToken
- //
- // This API allows the caller to add a token into a filter (or folder). The
- // ANDOR parameter specifies if the token is to be ANDed or ORed with the
- // preceeding token. The index specifies whereabout in the filter expression
- // the token is to be inserted. The rules are as follows:
- // 1. index is AT_START (-1), the token will be inserted at the start of the
- // expression and the ANDOR operator will be postfixed.
- // 2. index is AT_END (-2), the token will be appended to the end of the
- // expression, the ANDOR operator will prefix the token.
- // 3. if index is anything else, if the expression is currently empty then
- // the token will be inserted at the start of the expression, and the
- // ANDOR operator is ignored. If the expression is not empty then the
- // token will be inserted at the given index and the operator prefixed.
- // The exception here is if the index is out of range, in this case the
- // token will be appended with the ANDOR being prefixed.
- // In all cases, if inserting the token would cause the resulting
- // expression to be illegal a status of SMS_RANGE_ERROR will be returned.
- //
- // Parameters:
- // HANDLE hObject Handle to filter or folder.
- // ANDOR opAndOr
- // TOKEN *pTokenInfo
- // INT iIndex
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsGetTokenCount
- //
- // This API will return (in *pctTokens) the number of tokens currently in
- // the filter or folder expression.
- //
- // Parameters:
- // HANDLE hObject Handle to either filter or folder.
- // DWORD *pctTokens
- //
- // Returns:
- // SMS_STATUS SMS_OK, or SMS_INVALID_HANDLE.
- //
- //===========================================================================
- //
- // SmsManipulateTokens
- //
- // This APIs allows for the manipulation of tokens within a filter or folder
- // expression in various ways, according to the flags parameter.
- // TOK_GROUP The tokens between the specified indicies are grouped
- // together to form a sub-expression, ie they are backeted by
- // parentheses.
- // TOK_UNGROUP The tokens between the specified indicies have their
- // parenthesis removed. This undoes the action of TOK_GROUP.
- // TOK_DELETE The tokens within the specified indecies are deleted.
- // In this case the tokens must not form a legal sub-
- // expression.
- // TOK_GROUP_NOT This is applicable only to persistent filters. At the
- // moment that means only machine filters.
- // This flag is applied to a range of one or more tokens that
- // form a legal sub-expression. That is, a range of tokens
- // that can ge grouped. The action performed by this is to
- // group these tokens and preceed them with a 'NOT IN'
- // token. This has the effect of specifying exclusion.
- //
- // The user may use the manifests AT_START and AT_END to indicate
- // the full range of tokens within the filter or folder object.
- // The iStart and iEnd may be one of the following:
- // 1. AT_START (-1), the index will be at the start of the expression.
- // 2. AT_END (-2), the index will be at the end of the expression.
- // 3. For any other valid indexes, the tokens will be manipulated within the given indexes
- //
- // Parameters:
- // HANDLE hObject Handle to either filter or folder.
- // DWORD dwFlags
- // INT iStart
- // INT iEnd
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsGetAllFilters
- //
- // This API retrieves from the specified container a list of filter handles
- // that have been applied to that container.
- // It is important to note that once this has been called, the API
- // SmsCloseFilter must be called for each of the filters in the array.
- //
- // Calling this with NULL for the array of filters will cause the *pctFilters
- // parameter to be set with the number of filters, in this case the API
- // will return a status of SMS_MORE_DATA.
- // The user should then allocate sufficient memory and call the API again.
- //
- // Note that the container specified here is a normal (ie folder) container
- // and not a filter container.
- //
- // Parameters:
- // HANDLE hContainer
- // HANDLE *pahFilters
- // DWORD *pctFilters
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- //===========================================================================
- // 8. Object enumeration APIs.
- //===========================================================================
- //
- // SmsEnumObjectTypes
- //
- // This API returns a list of first-class objects that are known to the
- // API.
- // These objects do not have a direct existence in the container hierarchy,
- // but play an important part in the API. The objects of major concern are
- // architectures and their descendents, but Platforms are also supported.
- //
- // A first-class object is one that is known directly to the APIs and which
- // does not require any additional informaion. Thus the system knows
- // directly about architectures and platforms, while it cannot know about,
- // for instance, attributes, without first knowing about an architecture
- // and a groupclass.
- //
- // The 'pObjects' parameter is an array of SMSBUFF objects. On successful
- // completion of the API this array will be filled with the names of
- // each first-class object known to the system.
- //
- // On entry the 'pCtObjects' parameter tells the API the size of the
- // pObjects array. On exit it contains the actual number of objects
- // known to the system.
- // If this parameter is less than the number of objects known to the system
- // then it is still set to the total, but no information will have been
- // copied to the pObjects array, and a status of SMS_MORE_DATA will be
- // returned.
- //
- // Parameters:
- // HANDLE hConnection Handle to a connection that has been
- // established via SmsDataSourceConnect.
- // SMSBUFF *pObjects
- // DWORD *pCtObjects
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
- //
- // SmsEnumObjects
- //
- // This object actually does the work of enumerating objects. For first-
- // class objects (see above) the 'pPredecessor' parameter is not used,
- // in this case it may be set to NULL. For non first-class objects this
- // list states the predecessor objects that must be given to the system
- // in order for it to locate the requested object.
- //
- // The 'ctPredecessors' parameter tells the API the number of entries in the
- // predecessor list.
- //
- // 'pszObjectType' tells the API what object type the user is interested in.
- //
- // 'pObjects' is an array of OBJDESCRIPTORS, this array will be filled in
- // with details of the requested object type.
- //
- // 'pCtObjects' is a pointer to a DWORD. On entry it tells the API the number
- // of entries in 'pObjects'. On exit it is always set to then count of
- // objects of the specified type. If the entry value is less than the actual
- // number of objects then no data is copied and a status of SMS_NMO_MORE_DATA
- // is returned.
- //
- // Consider an example.
- // If we want to enumerate the attributes in the 'MICROSOFT|IDENTIFICATION|1.0'
- // groupclass for 'Personal Computer' objects then we would set the parameters
- // as follows:
- // pszObjectType = "MICROSOFT|IDENTIFICATION|1.0"
- // pPredecessors[0] = "Architectures"
- // pPredecessors[1] = "Personal Computer"
- // ctPredecessors = 2
- // pObjects - you can declare it as 'OBJDESCRIPTOR pObjects[SOME_SIZE]'
- // *pCtObjects = SOME_SIZE
- //
- // On exit the pObjects array would have 9 entries (as currently defined,
- // this can change). The first entry would look like this:
- // pObjects[0].objType = OT_ATTRIBUTE
- // pObjects[0].szName = 'Name"
- // pObjects[0].szFriendlyName - unused
- // pObjects[0].bGotFriendlyName = FALSE
- // pObjects[0].dwRelopMin = QOP_STR_EQ
- // pObjects[0].dwRelopMax = QOP_UPCASE_NOTLIKE
- // pObjects[0].bGotRelops = TRUE
-
- // Parameters:
- // HANDLE hConn
- // char *pszObjectType
- // SMSBUFF *pPredecessors
- // DWORD ctPredecessors
- // OBJDESCRIPTOR *pObjects
- // DWORD *pCtObjects
- //
- // Returns:
- // SMS_STATUS Status. Either SMS_OK or one of the
- // error codes listed above.
- //
- //===========================================================================
-
-
-
- // ====================================================================
- // Version number API.
- // ====================================================================
- __declspec (dllexport) SMS_STATUS SmsAPIVer( char **ppVersion );
-
-
- // ====================================================================
- // Engine APIs.
- // ====================================================================
-
- __declspec (dllexport) SMS_STATUS SmsEnumContainers(
- FOLDER_INFO **pData,
- DWORD *pCount );
-
- __declspec (dllexport) SMS_STATUS SmsEnumFilters(
- FILTER_INFO *paFI,
- DWORD *pCount );
-
- __declspec (dllexport) SMS_STATUS SmsEnumFolders(
- FOLDER_INFO **pData,
- DWORD *pCount );
-
- __declspec (dllexport) SMS_STATUS SmsDescribeFolder(
- BASETYPE tObjectity, // T_CONTAINER or T_FOLDER.
- DWORD dwTag, // folder type (or F_ANY)
- FOLDER_INFO **ppFInfo ); // We store the FOLDER_INFO here.
-
-
- // ====================================================================
- // Connection APIs.
- // ====================================================================
- __declspec (dllexport) SMS_STATUS SmsDataSourceConnect(
- DATASOURCE *pd,
- HANDLE *phConn );
-
- __declspec (dllexport) SMS_STATUS SmsDataSourceDisconnect(
- HANDLE hConn );
-
-
- // ====================================================================
- // Container APIS.
- // ====================================================================
- __declspec (dllexport) SMS_STATUS SmsOpenContainer(
- DWORD cType,
- HANDLE hConnection,
- HANDLE *phContainer );
-
- __declspec (dllexport) SMS_STATUS SmsSetFilter(
- HANDLE hContainer,
- HANDLE hFilter );
-
- __declspec (dllexport) SMS_STATUS SmsPopulate(
- HANDLE hContainer,
- DWORD dwOptions,
- NOTIFY *pNotify );
-
- __declspec (dllexport) SMS_STATUS SmsGetNextFolder(
- HANDLE hParent,
- DWORD fType,
- HANDLE *phFolder );
-
- __declspec (dllexport) SMS_STATUS SmsCloseContainer(
- HANDLE hContainer );
-
- // ====================================================================
- // Folder (collection) APIs.
- // A collection contains other things, that is it can have embedded
- // collections and it can also have properties (scalars).
- // ====================================================================
-
- __declspec (dllexport) SMS_STATUS SmsCreateFolder(
- HANDLE hParent,
- DWORD fType,
- const char *pszFolderID,
- HANDLE *phFolder );
-
- __declspec (dllexport) SMS_STATUS SmsGetFolderID(
- HANDLE hFolder,
- char *pszFolderID );
-
- __declspec (dllexport) SMS_STATUS SmsGetFolderType(
- HANDLE hFolder,
- DWORD *pfType,
- char *pszfType );
-
- __declspec (dllexport) SMS_STATUS SmsEnumFolderTypes(
- HANDLE hFolder,
- DWORD *pfTypes,
- DWORD *pctFolderTypes );
-
- __declspec (dllexport) SMS_STATUS SmsGetFolderCount(
- HANDLE hFolder,
- DWORD fType,
- DWORD *pctFolders );
-
- __declspec (dllexport) SMS_STATUS SmsGetFolderByID(
- HANDLE hFolder,
- DWORD fType,
- char *pszFolderID,
- HANDLE *phSubFolder );
-
- __declspec (dllexport) SMS_STATUS SmsRewind(
- HANDLE hObject,
- DWORD dwOptions );
-
- __declspec (dllexport) SMS_STATUS SmsCloseFolder(
- HANDLE hFolder );
-
- __declspec (dllexport) SMS_STATUS SmsLinkFolder(
- HANDLE hFolder );
-
- __declspec (dllexport) SMS_STATUS SmsUnlinkFolder(
- HANDLE hFolder );
-
- __declspec (dllexport) SMS_STATUS SmsCommitFolder(
- HANDLE hFolder );
-
- __declspec (dllexport) SMS_STATUS SmsDupFolder(
- HANDLE hParent,
- HANDLE hFolder,
- HANDLE *phNewFolder );
-
- // ====================================================================
- // Scalar APIs.
- // ====================================================================
-
- __declspec (dllexport) SMS_STATUS SmsGetScalarCount(
- HANDLE hFolder,
- DWORD *pctScalars );
-
- __declspec (dllexport) SMS_STATUS SmsGetNextScalar(
- HANDLE hFolder,
- SCALAR *pScalarStruct );
-
- __declspec (dllexport) SMS_STATUS SmsGetScalarByName(
- HANDLE hFolder,
- const char *pszName,
- SCALAR *pScalarStruct );
-
- __declspec (dllexport) SMS_STATUS SmsSetScalar(
- HANDLE hFolder,
- SCALAR *pScalarStruct );
-
-
-
- // ====================================================================
- //
- // FilterContainer APIs
- //
- // ====================================================================
-
- __declspec (dllexport) SMS_STATUS SmsOpenFilterContainer(
- HANDLE hConnection,
- HANDLE *phFContainer );
-
- __declspec (dllexport) SMS_STATUS SmsCloseFilterContainer(
- HANDLE hFContainer );
-
- __declspec (dllexport) SMS_STATUS SmsGetNextFilter(
- HANDLE hFContainer,
- DWORD frType,
- HANDLE *phFilter );
-
- __declspec (dllexport) SMS_STATUS SmsGetFilterByID(
- HANDLE hFContainer,
- DWORD frType,
- const char *pszID,
- HANDLE *phFilter );
-
- __declspec (dllexport) SMS_STATUS SmsGetFilterID(
- HANDLE hFilter,
- char *pszID );
-
- __declspec (dllexport) SMS_STATUS SmsCommitFilter(
- HANDLE hFilter,
- HANDLE hFContainer );
-
-
-
- // ====================================================================
- //
- // Filter APIs
- //
- // ====================================================================
-
- __declspec (dllexport) SMS_STATUS SmsCreateFilter(
- DWORD frType,
- HANDLE hConnection,
- HANDLE *phFilter );
-
- __declspec (dllexport) SMS_STATUS SmsCloseFilter(
- HANDLE hFilter );
-
- __declspec (dllexport) SMS_STATUS SmsGetFilterType(
- HANDLE hFilter,
- DWORD *pfilterType,
- char *pszTag );
-
- __declspec (dllexport) SMS_STATUS SmsGetToken(
- HANDLE hObject,
- INT iIndex,
- TOKEN *pTokenInfo);
-
- __declspec (dllexport) SMS_STATUS SmsAddToken(
- HANDLE hObject,
- ANDOR opAndOr,
- TOKEN *pTokenInfo,
- INT iIndex );
-
- __declspec (dllexport) SMS_STATUS SmsGetTokenCount(
- HANDLE hObject,
- DWORD *pctTokens );
-
- __declspec (dllexport) SMS_STATUS SmsManipulateTokens(
- HANDLE hObject,
- DWORD dwFlags,
- INT iStart,
- INT iEnd );
-
- __declspec (dllexport) SMS_STATUS SmsGetAllFilters(
- HANDLE hContainer,
- HANDLE *pahFilters,
- DWORD *pctFilters );
-
-
- __declspec (dllexport) SMS_STATUS SmsEnumObjectTypes(
- HANDLE hConnection,
- SMSBUFF *pObjects,
- DWORD *pCtObjects );
-
- __declspec (dllexport) SMS_STATUS SmsEnumObjects(
- HANDLE hConn,
- char *pszObjectType,
- SMSBUFF *pPredecessors,
- DWORD ctPredecessors,
- OBJDESCRIPTOR *pObjects,
- DWORD *pCtObjects );
-
-
- #ifdef __cplusplus
- }
- #endif
-
- #pragma option pop /*P_O_Pop*/
- #endif // _SMSAPI_H_
-
- /* EOF: smsapi.h */
-
-