235 lines
7.3 KiB
Plaintext
235 lines
7.3 KiB
Plaintext
// IDL source for WINSSNAP DLLs
|
|
//
|
|
|
|
#ifndef _WINSDB_IDL_
|
|
#define _WINSDB_IDL_
|
|
|
|
import "wtypes.idl";
|
|
|
|
typedef BYTE * PBYTE;
|
|
typedef PBYTE HROW;
|
|
typedef HROW * LPHROW;
|
|
|
|
// valid states for the database
|
|
typedef enum _WINSDB_STATE
|
|
{
|
|
WINSDB_NORMAL = 0x0001,
|
|
WINSDB_LOADING = 0x0002,
|
|
WINSDB_SORTING = 0x0003,
|
|
WINSDB_FILTERING = 0x0004
|
|
|
|
} WINSDB_STATE;
|
|
|
|
// possible sort types for the database
|
|
typedef enum _WINSDB_SORT_TYPE
|
|
{
|
|
WINSDB_SORT_BY_NAME,
|
|
WINSDB_SORT_BY_IP,
|
|
WINSDB_SORT_BY_VERSION,
|
|
WINSDB_SORT_BY_TYPE,
|
|
WINSDB_SORT_BY_EXPIRATION,
|
|
WINSDB_SORT_BY_STATE,
|
|
WINSDB_SORT_BY_STATIC,
|
|
WINSDB_SORT_BY_OWNER
|
|
|
|
} WINSDB_SORT_TYPE;
|
|
|
|
// possilble views for the database
|
|
typedef enum _WINSDB_VIEW_TYPE
|
|
{
|
|
WINSDB_VIEW_ENTIRE_DATABASE,
|
|
WINSDB_VIEW_FILTERED_DATABASE
|
|
|
|
} WINSDB_VIEW_TYPE;
|
|
|
|
|
|
typedef enum _WINSDB_SORT_OPTIONS
|
|
{
|
|
WINSDB_SORT_DESCENDING = 0x00,
|
|
WINSDB_SORT_ASCENDING = 0x01
|
|
|
|
} WINSDB_SORT_OPTIONS;
|
|
|
|
|
|
// possible Filter types for the database
|
|
typedef enum _WINSDB_FILTER_TYPE
|
|
{
|
|
WINSDB_FILTER_BY_TYPE,
|
|
WINSDB_FILTER_BY_OWNER,
|
|
WINSDB_FILTER_BY_IPADDR,
|
|
WINSDB_FILTER_BY_NAME
|
|
|
|
} WINSDB_FILTER_TYPE;
|
|
|
|
const ULONG WINS_RECNAME_MAX = 256;
|
|
|
|
#define MAX_IP_ADDRS 100
|
|
const ULONG WINSDB_MAX_NO_IPADDRS = MAX_IP_ADDRS;
|
|
|
|
// predefined
|
|
interface IWinsDatabase;
|
|
|
|
typedef IWinsDatabase * LPWINSDATABASE;
|
|
|
|
// flags for the dwState field
|
|
typedef enum _WINSDB_REC_TYPE
|
|
{
|
|
WINSDB_REC_ACTIVE = 0x00000001,
|
|
WINSDB_REC_STATIC = 0x00000002,
|
|
WINSDB_REC_TOMBSTONE = 0x00000004,
|
|
WINSDB_REC_RELEASED = 0x00000008,
|
|
WINSDB_REC_DELETED = 0x00000010,
|
|
WINSDB_REC_MULT_ADDRS = 0x00000020,
|
|
WINSDB_REC_UNIQUE = 0x00000040,
|
|
WINSDB_REC_NORM_GROUP = 0x00000080,
|
|
WINSDB_REC_SPEC_GROUP = 0x00000100,
|
|
WINSDB_REC_MULTIHOMED = 0x00000200,
|
|
WINSDB_REC_INTERNET_GROUP=0x00000400
|
|
} WINSDB_REC_TYPE;
|
|
|
|
// NOTE: the dwType field is broken up as follows:
|
|
// HIWORD(dwType) = record type defined in WINSINTF_RECTYPE_E
|
|
// LOBYTE(LOWORD(dwType)) = machine type (ie. 1B, 1C, etc)
|
|
typedef struct _WinsRecord
|
|
{
|
|
char szRecordName [WINS_RECNAME_MAX];
|
|
DWORD_PTR dwExpiration;
|
|
DWORD dwIpAdd[MAX_IP_ADDRS]; // extra space, just in case
|
|
DWORD dwNoOfAddrs;
|
|
LARGE_INTEGER liVersion;
|
|
DWORD dwNameLen;
|
|
DWORD dwOwner;
|
|
DWORD dwState;
|
|
DWORD dwType;
|
|
} WinsRecord, * LPWINSRECORD;
|
|
|
|
/*---------------------------------------------------------------------------
|
|
IWinsDatabase
|
|
---------------------------------------------------------------------------*/
|
|
[
|
|
object,
|
|
uuid(7B0C8BBF-3117-11d1-B981-00C04FBF914A),
|
|
local,
|
|
pointer_default(unique),
|
|
]
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Struct: WinsRecord
|
|
//
|
|
// Contains information applying to a particular Wins Record
|
|
//----------------------------------------------------------------------------
|
|
|
|
|
|
interface IWinsDatabase :IUnknown
|
|
{
|
|
import "unknwn.idl";
|
|
// all these need no parameters
|
|
HRESULT Init();
|
|
HRESULT Start();
|
|
HRESULT Stop();
|
|
HRESULT Clear();
|
|
|
|
// SortBy can be by record name, IP Address, Type, Expiration date,
|
|
// Version
|
|
HRESULT Sort([in] WINSDB_SORT_TYPE dwSortBy, [in] DWORD dwSortOptions);
|
|
|
|
// returns the pointer to the first record in the rows
|
|
// requested for
|
|
HRESULT GetRows([in] ULONG uNumberOfRows,
|
|
[in] ULONG uStartPos,
|
|
[out] LPHROW ppHRow,
|
|
[out] int * nNumberOfRowsReturned);
|
|
|
|
// fills in the WinsRecord structure
|
|
HRESULT GetData([in] HROW hRow,
|
|
[out] LPWINSRECORD pRecordData);
|
|
|
|
// fills in the row index in the chunk of memory
|
|
// finds the specified computer name
|
|
HRESULT FindRow([in, string] LPCOLESTR pszName,
|
|
[in] HROW hrowStart,
|
|
[out] LPHROW hRow);
|
|
|
|
// just places the handle at that point in the DB records
|
|
HRESULT GetHRow([in] UINT uIndex,
|
|
[in] LPHROW hRow);
|
|
|
|
HRESULT GetTotalCount([out] int * pTotalCount);
|
|
|
|
HRESULT GetCurrentCount([out] int * pCurrentCount);
|
|
|
|
HRESULT GetCurrentScanned([out] int * pCurrentScanned);
|
|
|
|
HRESULT AddRecord([in] const LPWINSRECORD RecordData);
|
|
|
|
HRESULT DeleteRecord([in] HROW hrowRecord);
|
|
|
|
HRESULT GetCurrentState( [out] WINSDB_STATE * pState);
|
|
|
|
HRESULT FilterRecords([in] WINSDB_FILTER_TYPE FilterType,
|
|
[in] DWORD dwParam1,
|
|
[in] DWORD dwParam2);
|
|
|
|
HRESULT AddFilter( [in] WINSDB_FILTER_TYPE FilterType,
|
|
[in] DWORD dwData1,
|
|
[in] DWORD dwData2,
|
|
[in] LPCOLESTR strData3);
|
|
|
|
HRESULT ClearFilter([in] WINSDB_FILTER_TYPE FilterType);
|
|
|
|
HRESULT Initialize([in, string] LPCOLESTR pszName,
|
|
[in, string] LPCOLESTR pszIP);
|
|
|
|
HRESULT GetName([out, string] LPOLESTR pszName,
|
|
[in] UINT cchMax);
|
|
|
|
HRESULT GetIP([out, string] LPOLESTR pszIP,
|
|
[in] UINT cchMax);
|
|
|
|
HRESULT GetLastError([out] HRESULT * pLastError);
|
|
|
|
HRESULT SetActiveView([in] WINSDB_VIEW_TYPE ViewType);
|
|
|
|
HRESULT SetApiInfo([in] DWORD dwOwner, [in] LPCOLESTR strPrefix, [in] BOOL bCache);
|
|
|
|
HRESULT GetCachingFlag([out] BOOL *pbCache);
|
|
|
|
HRESULT ReloadSuggested([in] DWORD dwOwner, [in] LPCOLESTR strPrefix, [out] BOOL *pbReload);
|
|
|
|
};
|
|
|
|
// a macro to help declare all of the methods
|
|
cpp_quote("#define DeclareIWinsDatabaseMembers(IPURE) \\")
|
|
cpp_quote(" STDMETHOD(Init)(THIS) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(Start)(THIS) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(Stop)(THIS) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(Clear)(THIS) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(GetLastError)(THIS_ HRESULT * pLastError) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(Sort)(THIS_ WINSDB_SORT_TYPE SortBy, DWORD dwSortOptions) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(GetRows)(THIS_ ULONG uNumberOfRows,ULONG uStartPos, HROW* ppHRow, int* nNumberOfRowsReturned) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(GetData)(THIS_ HROW hRow, WinsRecord* ppRecordData) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(FindRow)(THIS_ LPCOLESTR pszName, HROW hrowStart,HROW* hRow) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(GetHRow)(THIS_ UINT uIndex,HROW* hRow) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(GetTotalCount)(THIS_ int* pTotalCount) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(GetCurrentCount)(THIS_ int* pCurrentCount) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(GetCurrentScanned)(THIS_ int* pCurrentScanned) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(AddRecord)(THIS_ const LPWINSRECORD RecordData) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(DeleteRecord)(THIS_ HROW hrowRecord) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(GetCurrentState)(THIS_ WINSDB_STATE * pState) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(FilterRecords)(THIS_ WINSDB_FILTER_TYPE FilterType, DWORD dwParam1, DWORD dwParam2) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(AddFilter)(THIS_ WINSDB_FILTER_TYPE FilterType, DWORD dwParam1, DWORD dwParam2, LPCOLESTR strParam3) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(ClearFilter)(THIS_ WINSDB_FILTER_TYPE FilterType) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(Initialize)(THIS_ LPCOLESTR pszName, LPCOLESTR pszIP) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(GetName)(THIS_ LPOLESTR pszName, UINT cchMax) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(GetIP)(THIS_ LPOLESTR pszIP, UINT cchMax) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(SetActiveView)(THIS_ WINSDB_VIEW_TYPE ViewType) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(SetApiInfo)(THIS_ DWORD dwOwner, LPCOLESTR strPrefix, BOOL bCache) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(GetCachingFlag)(THIS_ BOOL *pbCache) IPURE; \\")
|
|
cpp_quote(" STDMETHOD(ReloadSuggested)(THIS_ DWORD dwOwner, LPCOLESTR strPrefix, BOOL *pbReload) IPURE; \\")
|
|
cpp_quote("")
|
|
|
|
#endif // _WINSDB__
|
|
|
|
|