NT4/private/inc/winsintf.h
2020-09-30 17:12:29 +02:00

982 lines
18 KiB
C

#ifndef WINSINTF_H
#define WINSINTF_H
/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
winsintf.h
Abstract:
This is the header file to be included in a client of the WINS
Functions:
Portability:
This header is portable.
Author:
Pradeep Bahl (PradeepB) April-1993
Revision History:
Modification Date Person Description of Modification
------------------ ------- ---------------------------
--*/
/*
includes
*/
#include <winbase.h>
#if !defined(MIDL_PASS)
#include <rpc.h>
#include <winerror.h>
#endif
//#include <ntdef.h>
/*
defines
*/
#define WINSINTF_MAX_NAME_SIZE 255
#define WINSINTF_MAX_NO_RPL_PNRS 25
#define WINSINTF_SUCCESS ERROR_SUCCESS
#define WINSINTF_FAILURE ERROR_WINS_INTERNAL
#define WINSINTF_CAN_NOT_DEL_LOCAL_WINS ERROR_CAN_NOT_DEL_LOCAL_WINS
#define WINSINTF_STATIC_INIT_FAILED ERROR_STATIC_INIT
#define WINSINTF_INC_BACKUP_FAILED ERROR_INC_BACKUP
#define WINSINTF_FULL_BACKUP_FAILED ERROR_FULL_BACKUP
#define WINSINTF_REC_NOT_FOUND ERROR_REC_NON_EXISTENT
#define WINSINTF_RPL_NOT_ALLOWED ERROR_RPL_NOT_ALLOWED
#define WINSINTF_TOO_MANY_STATIC_INITS ERROR_TOO_MANY_OPEN_FILES
#define WINSINTF_LAST_FAILURE_CODE WINSINTF_TOO_MANY_STATIC_INITS
#define WINS_BACKUP_DIR_ASCII "\\wins_bak"
#define WINS_BACKUP_DIR TEXT(WINS_BACKUP_DIR_ASCII)
//
// Flags that can be set in WINS
//
#define WINSINTF_BS 0x01
#define WINSINTF_MEMORY_INFO_DUMP 0x02
#define WINSINTF_HEAP_INFO_DUMP 0x04
#define WINSINTF_QUE_ITEMS_DUMP 0x08
//
// Type of address families
//
#define WINSINTF_TCP_IP 0x0
//
// Type Of Recs to retrieve (WinsGetDbRecsByName)
//
// Note: There should be no ovelap of bit patterns
//
#define WINSINTF_STATIC 1
#define WINSINTF_DYNAMIC 2
#define WINSINTF_BOTH 4
//
// Max. members returned for a special group or a multihomed entry
//
#define WINSINTF_MAX_MEM 25
#define WINSINTF_MAX_ADD (WINSINTF_MAX_MEM * 2)
//
// used as argument of WinsGetDbRecsByName
//
#define WINSINTF_BEGINNING 0
#define WINSINTF_END 1
#if 0
#define WINSINTF_INC_RPC_THD_CNT \
{ \
EnterCrticalSection(&WinsIntfCrtSec); \
WinsIntfNoOfRpcThds++; \
LeaveCriticalSection(&WinsIntfCrtSec); \
}
#define WINSINTF_DEC_RPC_THD_CNT \
{ \
EnterCrticalSection(&WinsIntfCrtSec); \
WinsIntfNoOfRpcThds--; \
LeaveCriticalSection(&WinsIntfCrtSec); \
}
#endif
/*
macros
*/
//
// Pass the value of the field NameLen (WINSINTF_RECORD_ACTION_T) to get
// the actual length of the name
//
#define WINSINTF_NAME_LEN_M(NameLen) ((NameLen) - 1)
/*
externs
*/
struct _WINSINTF_STAT_T; //forward declaration
#if !defined(MIDL_PASS)
extern struct _WINSINTF_STAT_T WinsIntfStat;
extern CRITICAL_SECTION WinsIntfCrtSec;
extern CRITICAL_SECTION WinsIntfPotentiallyLongCrtSec;
#endif
extern DWORD WinsIntfNoOfNbtThds;
extern DWORD WinsIntfNoCncrntStaticInits;
//extern DWORD WinsIntfNoOfRpcThds;
#if 0
typedef struct _BOUNDED_STRING {
unsigned short size;
#if defined(MIDL_PASS)
[size_is(size), string] char *pString;
#else
char *pString;
#endif
} BOUNDED_STRING_T, *PBOUNDED_STRING_T;
#endif
#ifndef UNICODE
#define WinsBind WinsABind
#else
#define WinsBind WinsUBind
#endif
/*
* typedefs
*/
typedef LARGE_INTEGER WINSINTF_VERS_NO_T;
//
// NOTE NOTE NOTE
//
// When UNICODE is defined, the client should put a unicode string in
// the pServerAdd and pPipeName fields.
//
typedef struct _WINSINTF_BIND_DATA_T {
DWORD fTcpIp;
LPSTR pServerAdd; //IP address
LPSTR pPipeName; //unc name
} WINSINTF_BIND_DATA_T, *PWINSINTF_BIND_DATA_T;
typedef struct _WINSINTF_ADD_T {
BYTE Type;
DWORD Len;
DWORD IPAdd;
} WINSINTF_ADD_T, *PWINSINTF_ADD_T;
#if 0
//
// List of addresses
//
typedef struct _WINSINTF_ADD_LIST_T {
DWORD NoOfAdds;
#if defined(MIDL_PASS)
[size_is(NoOfAdds)] PWINSINTF_ADD_T pAddList;
#else
PWINSINTF_ADD_T pAddList;
#endif
} WINSINTF_ADD_LIST_T, *PWINSINTF_ADD_LIST_T;
#endif
/*
enum definitions. Have the enum types be of the same value as given
in nmsdb.h for the various types (otherwise modify winsintf.c code)
*/
//
// Wins Priority Class
//
typedef enum _WINSINTF_PRIORITY_CLASS_E {
WINSINTF_E_NORMAL = 0,
WINSINTF_E_HIGH
} WINSINTF_PRIORITY_CLASS_E, *PWINSINTF_PRIORITY_CLASS_E;
//
// same values as those defined in nmsdb.h
//
//
//NOTE NOTE NOTE
//
// For the enum below, WINSINTF_E_MULTIHOMED should be the last entry. If
// it is not, you should change WinsRecordAction (under MODIFY) in winsintf.c
//
// Do not disturb the order without changing wins.mib correspondingly
//
typedef enum _WINSINTF_RECTYPE_E {
WINSINTF_E_UNIQUE = 0,
WINSINTF_E_NORM_GROUP,
WINSINTF_E_SPEC_GROUP,
WINSINTF_E_MULTIHOMED
} WINSINTF_RECTYPE_E, *PWINSINTF_RECTYPE_E;
//
// Same values as those in NMSDB_STATE_E
//
//
//NOTE NOTE NOTE
//
// For the enum below, WINSINTF_E_DELETED should be the last entry. If
// it is not, you should change WinsRecordAction (under MODIFY) in winsintf.c
//
// NOTE NOTE NOTE
//
// Do not disturb the order without changing wins.mib correspondingly
//
typedef enum _WINSINTF_STATE_E {
WINSINTF_E_ACTIVE = 0,
WINSINTF_E_RELEASED,
WINSINTF_E_TOMBSTONE,
WINSINTF_E_DELETED
} WINSINTF_STATE_E, *PWINSINTF_STATE_E;
typedef enum _WINSINTF_NODE_TYPE_E {
WINSINTF_E_BNODE = 0,
WINSINTF_E_PNODE,
WINSINTF_E_HNODE = 3,
} WINSINTF_NODE_TYPE_E, *PWINSINTF_NODE_TYPE_E;
//
// Type of action to take on a record. This is passed as the "command" to
// WinsRecordAction.
//
typedef enum _WINSINTF_ACT_E {
WINSINTF_E_INSERT = 0,
WINSINTF_E_DELETE,
WINSINTF_E_RELEASE,
WINSINTF_E_MODIFY,
WINSINTF_E_QUERY
} WINSINTF_ACT_E, *PWINSINTF_ACT_E;
//
// Passed as argument to WinsIntfSetTime
//
typedef enum _WINSINTF_TIME_TYPE_E {
WINSINTF_E_PLANNED_PULL = 0,
WINSINTF_E_ADDCHG_TRIG_PULL,
WINSINTF_E_UPDCNT_TRIG_PULL,
WINSINTF_E_ADMIN_TRIG_PULL,
WINSINTF_E_NTWRK_TRIG_PULL,
WINSINTF_E_PLANNED_SCV,
WINSINTF_E_ADMIN_TRIG_SCV,
WINSINTF_E_TOMBSTONES_SCV,
WINSINTF_E_VERIFY_SCV,
WINSINTF_E_INIT_DB,
WINSINTF_E_WINS_START,
WINSINTF_E_COUNTER_RESET
} WINSINTF_TIME_TYPE_E, *PWINSINTF_TIME_TYPE_E;
//
// Type of trigger to send to a WINS
//
typedef enum _WINSINTF_TRIG_TYPE_E {
WINSINTF_E_PULL = 0,
WINSINTF_E_PUSH,
WINSINTF_E_PUSH_PROP
} WINSINTF_TRIG_TYPE_E, *PWINSINTF_TRIG_TYPE_E;
typedef struct _WINSINTF_RECORD_ACTION_T {
WINSINTF_ACT_E Cmd_e;
#if defined(MIDL_PASS)
[size_is(NameLen)] LPBYTE pName; //ansi form
#else
LPBYTE pName;
#endif
DWORD NameLen;
DWORD TypOfRec_e;
DWORD NoOfAdds;
#if defined(MIDL_PASS)
[unique, size_is(NoOfAdds)] PWINSINTF_ADD_T pAdd;
#else
PWINSINTF_ADD_T pAdd;
#endif
WINSINTF_ADD_T Add;
LARGE_INTEGER VersNo;
BYTE NodeTyp;
DWORD OwnerId;
DWORD State_e;
DWORD fStatic;
DWORD TimeStamp;
} WINSINTF_RECORD_ACTION_T, *PWINSINTF_RECORD_ACTION_T;
typedef struct _WINSINTF_RPL_COUNTERS_T {
WINSINTF_ADD_T Add;
DWORD NoOfRpls;
DWORD NoOfCommFails;
} WINSINTF_RPL_COUNTERS_T, *PWINSINTF_RPL_COUNTERS_T;
//
// Structure holds the various statistics collected by WINS
//
typedef struct _WINSINTF_STAT_T {
struct {
DWORD NoOfUniqueReg;
DWORD NoOfGroupReg;
DWORD NoOfQueries;
DWORD NoOfSuccQueries;
DWORD NoOfFailQueries;
DWORD NoOfUniqueRef;
DWORD NoOfGroupRef;
DWORD NoOfRel;
DWORD NoOfSuccRel;
DWORD NoOfFailRel;
DWORD NoOfUniqueCnf;
DWORD NoOfGroupCnf;
} Counters;
struct {
SYSTEMTIME WinsStartTime;
SYSTEMTIME LastPScvTime;
SYSTEMTIME LastATScvTime; //admin triggered
SYSTEMTIME LastTombScvTime;
SYSTEMTIME LastVerifyScvTime;
SYSTEMTIME LastPRplTime;
SYSTEMTIME LastATRplTime; //admin triggered
SYSTEMTIME LastNTRplTime; //network triggered
SYSTEMTIME LastACTRplTime; //address change triggered
SYSTEMTIME LastInitDbTime; //db initialization
SYSTEMTIME CounterResetTime; //counter reset time
} TimeStamps;
DWORD NoOfPnrs;
#if defined(MIDL_PASS)
[unique, size_is(NoOfPnrs)] PWINSINTF_RPL_COUNTERS_T pRplPnrs;
#else
PWINSINTF_RPL_COUNTERS_T pRplPnrs;
#endif
} WINSINTF_STAT_T, *PWINSINTF_STAT_T;
typedef struct _WINSINTF_ADD_VERS_MAP_T {
WINSINTF_ADD_T Add;
LARGE_INTEGER VersNo;
} WINSINTF_ADD_VERS_MAP_T, *PWINSINTF_ADD_VERS_MAP_T;
typedef struct _WINSINTF_RESULTS_T {
DWORD NoOfOwners;
WINSINTF_ADD_VERS_MAP_T AddVersMaps[WINSINTF_MAX_NO_RPL_PNRS];
LARGE_INTEGER MyMaxVersNo;
DWORD RefreshInterval;
DWORD TombstoneInterval;
DWORD TombstoneTimeout;
DWORD VerifyInterval;
DWORD WinsPriorityClass;
DWORD NoOfWorkerThds;
WINSINTF_STAT_T WinsStat;
} WINSINTF_RESULTS_T, *PWINSINTF_RESULTS_T;
typedef struct _WINSINTF_RESULTS_NEW_T {
DWORD NoOfOwners;
#if defined(MIDL_PASS)
[unique, size_is(NoOfOwners)] PWINSINTF_ADD_VERS_MAP_T pAddVersMaps;
#else
PWINSINTF_ADD_VERS_MAP_T pAddVersMaps;
#endif
LARGE_INTEGER MyMaxVersNo;
DWORD RefreshInterval;
DWORD TombstoneInterval;
DWORD TombstoneTimeout;
DWORD VerifyInterval;
DWORD WinsPriorityClass;
DWORD NoOfWorkerThds;
WINSINTF_STAT_T WinsStat;
} WINSINTF_RESULTS_NEW_T, *PWINSINTF_RESULTS_NEW_T;
typedef enum _WINSINTF_CMD_E {
WINSINTF_E_ADDVERSMAP = 0,
WINSINTF_E_CONFIG,
WINSINTF_E_STAT, //get statistics
WINSINTF_E_CONFIG_ALL_MAPS
} WINSINTF_CMD_E, *PWINSINTF_CMD_E;
#if 0
typedef struct _WINSINTF_RECS_T {
PWINSINTF_RECORD_ACTION_T pRow;
DWORD NoOfRecs;
DWORD TotalNoOfRecs;
} WINSINTF_RECS_T, *PWINSINTF_RECS_T;
typedef struct _WINSINTF_RECS_T {
DWORD BuffSize;
#if defined(MIDL_PASS)
[unique,size_is(BuffSize)] LPBYTE pRow; //will store a pointer to
//an array of
//WINSINTF_RECORD_ACTION_T
//recs
#else
LPBYTE pRow;
#endif
DWORD NoOfRecs;
DWORD TotalNoOfRecs;
} WINSINTF_RECS_T, *PWINSINTF_RECS_T;
#endif
typedef struct _WINSINTF_RECS_T {
DWORD BuffSize;
#if defined(MIDL_PASS)
[unique,size_is(NoOfRecs)] PWINSINTF_RECORD_ACTION_T pRow; //will store a pointer to
//an array of
//WINSINTF_RECORD_ACTION_T
//recs
#else
PWINSINTF_RECORD_ACTION_T pRow;
#endif
DWORD NoOfRecs;
DWORD TotalNoOfRecs;
} WINSINTF_RECS_T, *PWINSINTF_RECS_T;
//
// Provides information to the Pull thread for pulling the specfied range
// of records from a WINS server. This structure is passed with the
// QUE_E_CMD_PULL_RANGE cmd.
//
typedef struct _WINSINTF_PULL_RANGE_INFO_T {
LPVOID pPnr; //info of pnr to pull from
WINSINTF_ADD_T OwnAdd;
WINSINTF_VERS_NO_T MinVersNo;
WINSINTF_VERS_NO_T MaxVersNo;
} WINSINTF_PULL_RANGE_INFO_T, *PWINSINTF_PULL_RANGE_INFO_T;
//
// NOTE NOTE NOTE:
//
// This structure is exactly the same as SERVER_INFO_100_CONTAINER.
// IT SHOULD STAY THE SAME.
//
typedef struct _WINSINTF_BROWSER_INFO_T {
DWORD Id; //no use
#if defined(MIDL_PASS)
[string] LPBYTE pName;
#else
LPBYTE pName;
#endif
} WINSINTF_BROWSER_INFO_T, *PWINSINTF_BROWSER_INFO_T;
typedef struct _WINSINTF_BROWSER_NAMES_T {
DWORD EntriesRead; //no use
#if defined(MIDL_PASS)
[unique, size_is(EntriesRead)] PWINSINTF_BROWSER_INFO_T pInfo;
#else
PWINSINTF_BROWSER_INFO_T pInfo;
#endif
} WINSINTF_BROWSER_NAMES_T, *PWINSINTF_BROWSER_NAMES_T;
typedef enum _WINSINTF_SCV_OPC_E {
WINSINTF_E_SCV_GENERAL,
WINSINTF_E_SCV_VERIFY
} WINSINTF_SCV_OPC_E, *PWINSINTF_SCV_OPC_E;
//
// To send a scavenge request
//
typedef struct _WINSINTF_SCV_REQ_T {
WINSINTF_SCV_OPC_E Opcode_e;
DWORD Age;
DWORD fForce;
} WINSINTF_SCV_REQ_T, *PWINSINTF_SCV_REQ_T;
/*
* function declarations
*/
extern
handle_t
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsBind(
PWINSINTF_BIND_DATA_T pBindData
);
extern
VOID
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsUnbind(
PWINSINTF_BIND_DATA_T pBindData,
handle_t BindHdl
);
extern
DWORD
R_WinsRecordAction(
PWINSINTF_RECORD_ACTION_T *ppRecAction
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsRecordAction(
PWINSINTF_RECORD_ACTION_T *ppRecAction
);
extern
DWORD
R_WinsStatus(
//LPTSTR pWinsAddStr,
WINSINTF_CMD_E Cmd_e,
PWINSINTF_RESULTS_T pResults
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsStatus(
// LPTSTR pWinsAddStr,
WINSINTF_CMD_E Cmd_e,
LPVOID pResults
);
extern
DWORD
R_WinsStatusNew(
WINSINTF_CMD_E Cmd_e,
PWINSINTF_RESULTS_NEW_T pResults
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsStatusNew(
WINSINTF_CMD_E Cmd_e,
PWINSINTF_RESULTS_NEW_T pResults
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsStatusWHdl(
PWINSINTF_BIND_DATA_T pWinsHdl,
WINSINTF_CMD_E Cmd_e,
PWINSINTF_RESULTS_NEW_T pResults
);
extern
DWORD
R_WinsTrigger (
PWINSINTF_ADD_T pWinsAdd,
WINSINTF_TRIG_TYPE_E TrigType_e
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsTrigger (
PWINSINTF_ADD_T pWinsAdd,
WINSINTF_TRIG_TYPE_E TrigType_e
);
extern
DWORD
R_WinsDoStaticInit (
LPWSTR pDataFilePath,
DWORD fDel
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsDoStaticInit (
LPWSTR pDataFilePath,
DWORD fDel
);
extern
DWORD
R_WinsGetDbRecs (
PWINSINTF_ADD_T pWinsAdd,
WINSINTF_VERS_NO_T MinVersNo,
WINSINTF_VERS_NO_T MaxVersNo,
PWINSINTF_RECS_T pRecs
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsGetDbRecs (
PWINSINTF_ADD_T pWinsAdd,
WINSINTF_VERS_NO_T MinVersNo,
WINSINTF_VERS_NO_T MaxVersNo,
PWINSINTF_RECS_T pRecs
);
extern
DWORD
R_WinsGetDbRecsByName (
PWINSINTF_ADD_T pWinsAdd,
DWORD Location,
LPBYTE pName,
DWORD NameLen,
DWORD NoOfRecsDesired,
DWORD TypeOfRecs,
PWINSINTF_RECS_T pRecs
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsGetDbRecsByName (
PWINSINTF_ADD_T pWinsAdd,
DWORD Location,
LPBYTE pName,
DWORD NameLen,
DWORD NoOfRecsDesired,
DWORD TypeOfRecs,
PWINSINTF_RECS_T pRecs
);
extern
DWORD
R_WinsDoScavenging (
VOID
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsDoScavenging (
VOID
);
extern
DWORD
R_WinsDoScavengingNew (
PWINSINTF_SCV_REQ_T pScvReq
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsDoScavengingNew (
PWINSINTF_SCV_REQ_T pScvReq
);
extern
VOID
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsIntfSetTime(
IN OUT PSYSTEMTIME pTime,
IN WINSINTF_TIME_TYPE_E TimeType_e
);
extern
DWORD
R_WinsTerm (
IN handle_t ClientHdl,
IN short fAbruptTerm
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsTerm (
IN handle_t ClientHdl,
IN short fAbruptTerm
);
extern
DWORD
R_WinsBackup (
IN LPBYTE pBackupPath,
IN short fIncremental
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsBackup (
IN LPBYTE pBackupPath,
IN short fIncremental
);
extern
DWORD
R_WinsDelDbRecs (
PWINSINTF_ADD_T pWinsAdd,
WINSINTF_VERS_NO_T MinVersNo,
WINSINTF_VERS_NO_T MaxVersNo
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsDelDbRecs (
PWINSINTF_ADD_T pWinsAdd,
WINSINTF_VERS_NO_T MinVersNo,
WINSINTF_VERS_NO_T MaxVersNo
);
extern
DWORD
R_WinsPullRange (
PWINSINTF_ADD_T pWinsAdd,
PWINSINTF_ADD_T pOwnAdd,
WINSINTF_VERS_NO_T MinVersNo,
WINSINTF_VERS_NO_T MaxVersNo
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsPullRange (
PWINSINTF_ADD_T pWinsAdd,
PWINSINTF_ADD_T pOwnAdd,
WINSINTF_VERS_NO_T MinVersNo,
WINSINTF_VERS_NO_T MaxVersNo
);
extern
DWORD
R_WinsSetPriorityClass (
IN WINSINTF_PRIORITY_CLASS_E PrCls_e
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsSetPriorityClass (
IN WINSINTF_PRIORITY_CLASS_E PrCls_e
);
extern
DWORD
R_WinsResetCounters (
VOID
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsResetCounters (
VOID
);
extern
DWORD
R_WinsWorkerThdUpd (
DWORD NewNoOfNbtThds
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsWorkerThdUpd (
DWORD NewNoOfNbtThds
);
extern
DWORD
WinsRestore (
LPBYTE BackupPath
);
extern
DWORD
WinsRestoreO (
LPBYTE BackupPath
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsSyncUp (
PWINSINTF_ADD_T pWinsAdd,
PWINSINTF_ADD_T pOwnAdd
);
extern
DWORD
R_WinsGetNameAndAdd(
PWINSINTF_ADD_T pWinsAdd,
LPBYTE pUncName
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsGetNameAndAdd(
PWINSINTF_ADD_T pWinsAdd,
LPBYTE pUncName
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsGetBrowserNames(
PWINSINTF_BIND_DATA_T pWinsHdl,
PWINSINTF_BROWSER_NAMES_T pNames
);
extern
VOID
R_WinsGetBrowserNames_notify(
VOID
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsGetBrowserNames_Old(
PWINSINTF_BROWSER_NAMES_T pNames
);
extern
DWORD
R_WinsDeleteWins(
PWINSINTF_ADD_T pWinsAdd
);
extern
DWORD
R_WinsSetFlags(
DWORD fFlags
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsSetFlags(
DWORD fFlags
);
extern
DWORD
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsDeleteWins(
PWINSINTF_ADD_T pWinsAdd
);
extern
void
#if !defined(MIDL_PASS)
__RPC_FAR * __RPC_API
//void * __RPC_API
//void *
#endif // MIDL_PASS
midl_user_allocate(size_t cBytes);
extern
//void __RPC_FAR * __RPC_API
void
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
//void
//midl_user_free(void __RPC_FAR *pMem);
midl_user_free(void *pMem);
extern
VOID
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsFreeMem(LPVOID pMem);
extern
LPVOID
#if !defined(MIDL_PASS)
__RPC_API
#endif // MIDL_PASS
WinsAllocMem(size_t cBytes);
typedef struct _TREE_T {
#if defined(MIDL_PASS)
[unique] struct _TREE_T *fPtr;
[ignore, unique] struct _TREE_T *bPtr;
[unique, size_is(NameLen)] LPBYTE pName;
#else
struct _TREE_T *fPtr;
struct _TREE_T *bPtr;
LPBYTE pName;
#endif
unsigned short NameLen;
DWORD x;
} TREE_T, *PTREE_T;
#endif