windows-nt/Source/XPSP1/NT/public/sdk/inc/stm.h
2020-09-26 16:20:57 +08:00

291 lines
8.5 KiB
C

/*++
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