/*++ Copyright (c) 1990 Microsoft Corporation Module Name: winsif.idl Abstract: Contains the WINS Server Service API. Also contains the RPC specific data structures for these API. Author: Pradeep Bahl Apr, 1993 Environment: User Mode - Win32 - MIDL Revision History: --*/ // // Interface Attributes // // // UUID for the winsif interface. This was generated by uuidgen /i on // pradeepb_486 at 10:22 am. // [ uuid(45F52C28-7F9F-101A-B52B-08002B2EFABE), version(1.0), #ifdef __midl ms_union, #endif // __midl pointer_default(unique) ] // // Interface Keyword // interface winsif // // Interface Body // { import "winsimp.idl"; // // ---------------------------------------------------------------// // // Note that there are two kinds of handles below. Originally, almost // all RPC apis did not take explicit handle as an argument. WinsBind // created an implicit handle and the same handle was used for making // rpc calls. There were few APIs ( GetBroserName and WinsStatusWHdl) // which tool explicit handle as an argument. This handle was a user // defined type WINSINTF_BIND_DATA_T. // // However, this original scheme had fundamental problem that multiple // threads could not call the apis simultaneously with binding to different // wins servers. (coz there was only one implicit binding common for all // the threads ) // // To get around this problem, a new handle was created WINSIF2_HANDLE. // The client stubs take this handle as an argument, but to keep the // rpc backward compatible, the server apis are kept the same as before. // i.e the server side stubs do not take handle as an argument. Since // the WINSIF2_HANDLE is defined as handle_t (primitive), it is not // passed on the wire and things work out ok. The makefil0 is modified // so that the client stubs and the server stubs generate different // signatures for the apis. DECLARE_WINS_HANDLE macro does the required // trick here. // // In future, if new APIs need to be added, pls. always pass WINSIF2_HANDLE // explicitly to both server and the client side. // typedef handle_t WINSIF2_HANDLE; typedef [handle] PWINSINTF_BIND_DATA_T WINSIF_HANDLE; // // WINS Server APIs // #ifdef WINS_CLIENT_APIS #define DECLARE_WINS_HANDLE( _hdl ) [in] WINSIF2_HANDLE _hdl, #define DECLARE_WINS_HANDLE0( _hdl ) [in] WINSIF2_HANDLE _hdl #else #define DECLARE_WINS_HANDLE( _hdl ) #define DECLARE_WINS_HANDLE0( _hdl ) #endif WINS_CLIENT_APIS // // APIs to // DWORD R_WinsRecordAction( DECLARE_WINS_HANDLE( ServerHdl ) [in, out, ref] PWINSINTF_RECORD_ACTION_T *ppRecAction ); DWORD R_WinsStatus( DECLARE_WINS_HANDLE( ServerHdl ) [in] WINSINTF_CMD_E Cmd_e, [in, out, ref] PWINSINTF_RESULTS_T pResults ); DWORD R_WinsTrigger( DECLARE_WINS_HANDLE( ServerHdl ) [in, ref] PWINSINTF_ADD_T pWinsAdd, [in] WINSINTF_TRIG_TYPE_E TrigType_e ); DWORD R_WinsDoStaticInit( DECLARE_WINS_HANDLE( ServerHdl ) [in, unique, string] LPWSTR pDataFilePath, [in] DWORD fDel ); DWORD R_WinsDoScavenging( DECLARE_WINS_HANDLE0( ServerHdl ) ); DWORD R_WinsGetDbRecs( DECLARE_WINS_HANDLE( ServerHdl ) [in, ref] PWINSINTF_ADD_T pWinsAdd, [in] WINSINTF_VERS_NO_T MinVersNo, [in] WINSINTF_VERS_NO_T MaxVersNo, [out] PWINSINTF_RECS_T pRecs ); DWORD R_WinsTerm( [in] handle_t ServerHdl, [in] short fAbruptTem ); DWORD R_WinsBackup( DECLARE_WINS_HANDLE( ServerHdl ) [in, string, ref] LPBYTE pBackupPath, [in] short fIncremental ); DWORD R_WinsDelDbRecs( DECLARE_WINS_HANDLE( ServerHdl ) [in, ref] PWINSINTF_ADD_T pWinsAdd, [in] WINSINTF_VERS_NO_T MinVersNo, [in] WINSINTF_VERS_NO_T MaxVersNo ); DWORD R_WinsPullRange( DECLARE_WINS_HANDLE( ServerHdl ) [in, ref] PWINSINTF_ADD_T pWinsAdd, [in, ref] PWINSINTF_ADD_T pOwnerAdd, [in] WINSINTF_VERS_NO_T MinVersNo, [in] WINSINTF_VERS_NO_T MaxVersNo ); DWORD R_WinsSetPriorityClass( DECLARE_WINS_HANDLE( ServerHdl ) [in] WINSINTF_PRIORITY_CLASS_E PrCls_e ); DWORD R_WinsResetCounters( DECLARE_WINS_HANDLE0( ServerHdl ) ); DWORD R_WinsWorkerThdUpd( DECLARE_WINS_HANDLE( ServerHdl ) [in] DWORD NewNoOfNbtThds ); // // Keep size_is value > MAX_COMPUTERNAME_LENGTH. Somehow, the idl parser // is not liking a symbol here. No time to investigate this more at this // time // DWORD R_WinsGetNameAndAdd( DECLARE_WINS_HANDLE( ServerHdl ) [out, ref] PWINSINTF_ADD_T pWinsAdd, [out, string, size_is(80)] LPBYTE pUncName ); DWORD R_WinsGetBrowserNames_Old( DECLARE_WINS_HANDLE( ServerHdl ) [out] PWINSINTF_BROWSER_NAMES_T pNames ); DWORD R_WinsDeleteWins( DECLARE_WINS_HANDLE( ServerHdl ) [in, ref] PWINSINTF_ADD_T pWinsAdd ); DWORD R_WinsSetFlags( DECLARE_WINS_HANDLE( ServerHdl ) [in] DWORD fFlags ); DWORD R_WinsGetBrowserNames( [in, ref] WINSIF_HANDLE ServerHdl, [out] PWINSINTF_BROWSER_NAMES_T pNames ); DWORD R_WinsGetDbRecsByName( DECLARE_WINS_HANDLE( ServerHdl ) [in, unique] PWINSINTF_ADD_T pWinsAdd, [in] DWORD Location, [in, unique, size_is(NameLen + 1)] LPBYTE pName, [in] DWORD NameLen, [in] DWORD NoOfRecsDesired, [in] DWORD fOnlyStatic, [out] PWINSINTF_RECS_T pRecs ); DWORD R_WinsStatusNew( DECLARE_WINS_HANDLE( ServerHdl ) [in] WINSINTF_CMD_E Cmd_e, [out] PWINSINTF_RESULTS_NEW_T pResults ); DWORD R_WinsStatusWHdl( [in, ref] WINSIF_HANDLE ServerHdl, [in] WINSINTF_CMD_E Cmd_e, [in, out, ref] PWINSINTF_RESULTS_NEW_T pResults ); DWORD R_WinsDoScavengingNew( DECLARE_WINS_HANDLE( ServerHdl ) [in, ref] PWINSINTF_SCV_REQ_T pScvReq ); }