/*++ Copyright (c) 1995-1999 Microsoft Corporation Module Name: stm.h Abstract: This module contains the definitions of the IPX Service Table Manger APIs Author: Revision History: --*/ #ifndef __ROUTING_STM_H__ #define __ROUTING_STM_H__ #if _MSC_VER > 1000 #pragma once #endif #if _MSC_VER >= 1200 #pragma warning(push) #endif #pragma warning(disable:4201) ////////////////////////////////////////////////////////////////////////////// // // // Supported functionality flags // // // // ROUTING Imports Routing Table Manager APIs // // SERVICES Exports Service Table Manager APIs // // DEMAND_UPDATE_ROUTES IP and IPX RIP support for Autostatic // // DEMAND_UPDATE_SERVICES IPX SAP, NLSP support for Autostatic // // // ////////////////////////////////////////////////////////////////////////////// #define SERVICES 0x00000002 #define DEMAND_UPDATE_SERVICES 0x00000008 // // Server Entry // typedef struct _IPX_SERVER_ENTRY { USHORT Type; UCHAR Name[48]; UCHAR Network[4]; UCHAR Node[6]; UCHAR Socket[2]; USHORT HopCount; } IPX_SERVER_ENTRY, *PIPX_SERVER_ENTRY; typedef struct _IPX_SERVICE { ULONG InterfaceIndex; ULONG Protocol; // protocol from which knowledge of the service was obatined IPX_SERVER_ENTRY Server; } IPX_SERVICE, *PIPX_SERVICE; // Function which returns TRUE if the service exists typedef BOOL (WINAPI * PIS_SERVICE)( IN USHORT Type, IN PUCHAR Name, OUT PIPX_SERVICE Service OPTIONAL ); // Exclusion flags. Limit enumeration to only servers that // have same values of the specified by flags parameter(s) as those of // criterea service. #define STM_ONLY_THIS_INTERFACE 0x00000001 #define STM_ONLY_THIS_PROTOCOL 0x00000002 #define STM_ONLY_THIS_TYPE 0x00000004 #define STM_ONLY_THIS_NAME 0x00000008 // Ordering methods. Specify the order in which services should be // retreived (methods are mutually exclusive). #define STM_ORDER_BY_TYPE_AND_NAME 0 #define STM_ORDER_BY_INTERFACE_TYPE_NAME 1 // Create handle to start enumeration of the services in the STM table. // Returns handle to be used for enumerations or NULL if operation failed // GetLastError () returns the follwing error codes in case of failure: // ERROR_CAN_NOT_COMPLETE // ERROR_NOT_ENOUGH_MEMORY typedef HANDLE (WINAPI * PCREATE_SERVICE_ENUMERATION_HANDLE)( IN DWORD ExclusionFlags, // Flags to limit enumeration to certain // types of servers IN PIPX_SERVICE CriteriaService // Criteria for exclusion flags ); // Get next service in the enumeration started by CreateServiceEnumerationHandle // Returns NO_ERROR if next service was placed in provided buffer or // ERROR_NO_MORE_ITEMS when there are no more services to be // returned in the enumeration; ERROR_CAN_NOT_COMPLETE will be // returned if operation failed. typedef DWORD (WINAPI * PENUMERATE_GET_NEXT_SERVICE)( IN HANDLE EnumerationHandle, // Handle that identifies this // enumeration OUT PIPX_SERVICE Service // buffer to place parameters of next service entry // to be returned by enumeration ); // Frees resources associated with enumeration. // Returns NO_ERROR if operation succeded, ERROR_CAN_NOT_COMPLETE // otherwise typedef DWORD (WINAPI * PCLOSE_SERVICE_ENUMERATION_HANDLE)( IN HANDLE EnumerationHandle ); // Get total number of known services typedef ULONG (WINAPI * PGET_SERVICE_COUNT)( VOID ); // Add service of IPX_PROTOCOL_STATIC to the table typedef DWORD (WINAPI * PCREATE_STATIC_SERVICE)(IN ULONG InterfaceIndex, IN PIPX_SERVER_ENTRY ServerEntry); // Delete service of IPX_PROTOCOL_STATIC from the table typedef DWORD (WINAPI * PDELETE_STATIC_SERVICE)(IN ULONG InterfaceIndex, IN PIPX_SERVER_ENTRY ServerEntry); // Converts protocol of all services associated with given interface to // IPX_PROTOCOL_STATIC typedef DWORD (WINAPI * PBLOCK_CONVERT_SERVICES_TO_STATIC) ( IN ULONG InterfaceIndex ); // Delete all services of IPX_PROTOCOL_STATIC // associated with given interface from the table typedef DWORD (WINAPI * PBLOCK_DELETE_STATIC_SERVICES)( IN ULONG InterfaceIndex ); // Find and return first service in the order specified by the ordering method. // Search is limited only to ceratin types of services as specified by the // exclusion flags end corresponding fields in Service parameter. // Returns ERROR_NO_MORE_ITEMS if there are no services in the // table that meet specified criteria. typedef DWORD (WINAPI * PGET_FIRST_ORDERED_SERVICE)( IN DWORD OrderingMethod, // What ordering to use IN DWORD ExclusionFlags, // Flags to limit search to ceratin // types of servers IN OUT PIPX_SERVICE Service // On input: criteria for exclusion // flags // On output: first service entry // in the specified order ); // Find and return next service in the order specified by the ordering method. // Search starts from specified service and is limited only to ceratin types // of services as specified by the exclusion flags and corresponding fields // in Service parameter. // Returns ERROR_NO_MORE_ITEMS if there are no services in table // table that meet specified criteria. typedef DWORD (WINAPI * PGET_NEXT_ORDERED_SERVICE)( IN DWORD OrderingMethod, // What ordering to use IN DWORD ExclusionFlags, // Flags to limit search to ceratin // types of servers IN OUT PIPX_SERVICE Service // On input: service to start the // search from and // criteria for exclusion // flags // On output: next service entry // in the specified order ); typedef DWORD (WINAPI * PDO_UPDATE_SERVICES) ( IN ULONG InterfaceIndex ); typedef BOOL (WINAPI * PGET_SERVICE_ID)( IN USHORT Type, IN PUCHAR Name, OUT PULONG ServiceID ); typedef BOOL (WINAPI * PGET_SERVICE_FROM_ID)( IN ULONG ServiceID, OUT PIPX_SERVICE Service ); typedef DWORD (WINAPI * PGET_NEXT_SERVICE_FROM_ID)( IN ULONG ServiceID, OUT PIPX_SERVICE NextService, OUT PULONG NextServiceID ); typedef struct _MPR40_SERVICE_CHARACTERISTICS { DWORD dwVersion; DWORD dwProtocolId; DWORD fSupportedFunctionality; PIS_SERVICE pfnIsService; PDO_UPDATE_SERVICES pfnUpdateServices; PCREATE_SERVICE_ENUMERATION_HANDLE pfnCreateServiceEnumerationHandle; PENUMERATE_GET_NEXT_SERVICE pfnEnumerateGetNextService; PCLOSE_SERVICE_ENUMERATION_HANDLE pfnCloseServiceEnumerationHandle; PGET_SERVICE_COUNT pfnGetServiceCount; PCREATE_STATIC_SERVICE pfnCreateStaticService; PDELETE_STATIC_SERVICE pfnDeleteStaticService; PBLOCK_CONVERT_SERVICES_TO_STATIC pfnBlockConvertServicesToStatic; PBLOCK_DELETE_STATIC_SERVICES pfnBlockDeleteStaticServices; PGET_FIRST_ORDERED_SERVICE pfnGetFirstOrderedService; PGET_NEXT_ORDERED_SERVICE pfnGetNextOrderedService; }MPR40_SERVICE_CHARACTERISTICS; typedef struct _MPR50_SERVICE_CHARACTERISTICS { #ifdef __cplusplus MPR40_SERVICE_CHARACTERISTICS mscMpr40ServiceChars; #else MPR40_SERVICE_CHARACTERISTICS; #endif }MPR50_SERVICE_CHARACTERISTICS; #if MPR50 typedef MPR50_SERVICE_CHARACTERISTICS MPR_SERVICE_CHARACTERISTICS; #else #if MPR40 typedef MPR40_SERVICE_CHARACTERISTICS MPR_SERVICE_CHARACTERISTICS; #endif #endif typedef MPR_SERVICE_CHARACTERISTICS *PMPR_SERVICE_CHARACTERISTICS; #if _MSC_VER >= 1200 #pragma warning(pop) #else #pragma warning(default:4201) #endif #endif