895 lines
18 KiB
C
895 lines
18 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1991 Microsoft Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
winsstub.c
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
Client stubs of the WINS server service APIs.
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
Pradeep Bahl (pradeepb) Apr-1993
|
|||
|
|
|||
|
Environment:
|
|||
|
|
|||
|
User Mode - Win32
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
#include "windows.h"
|
|||
|
#include "rpc.h"
|
|||
|
#include "winsif.h"
|
|||
|
#include "esent.h"
|
|||
|
#include "winscnst.h"
|
|||
|
//#include "winsintf.h"
|
|||
|
|
|||
|
//
|
|||
|
// prototypes
|
|||
|
//
|
|||
|
DWORD
|
|||
|
WinsRestoreC(
|
|||
|
LPBYTE pBackupPath,
|
|||
|
DbVersion Version
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
DWORD
|
|||
|
WinsRecordAction(
|
|||
|
WINSIF2_HANDLE ServerHdl,
|
|||
|
PWINSINTF_RECORD_ACTION_T *ppRecAction
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsRecordAction(
|
|||
|
ServerHdl,
|
|||
|
ppRecAction
|
|||
|
);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
DWORD
|
|||
|
WinsStatus(
|
|||
|
WINSIF2_HANDLE ServerHdl,
|
|||
|
WINSINTF_CMD_E Cmd_e,
|
|||
|
PWINSINTF_RESULTS_T pResults
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsStatus(
|
|||
|
//pWinsAddStr,
|
|||
|
ServerHdl,
|
|||
|
Cmd_e,
|
|||
|
pResults
|
|||
|
);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
}
|
|||
|
|
|||
|
DWORD
|
|||
|
WinsStatusNew(
|
|||
|
WINSIF2_HANDLE ServerHdl,
|
|||
|
WINSINTF_CMD_E Cmd_e,
|
|||
|
PWINSINTF_RESULTS_NEW_T pResults
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsStatusNew(
|
|||
|
ServerHdl,
|
|||
|
Cmd_e,
|
|||
|
pResults
|
|||
|
);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
}
|
|||
|
|
|||
|
DWORD
|
|||
|
WinsStatusWHdl(
|
|||
|
WINSIF_HANDLE ServerHdl,
|
|||
|
WINSINTF_CMD_E Cmd_e,
|
|||
|
PWINSINTF_RESULTS_NEW_T pResults
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsStatusWHdl(
|
|||
|
ServerHdl,
|
|||
|
Cmd_e,
|
|||
|
pResults
|
|||
|
);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
DWORD
|
|||
|
WinsTrigger(
|
|||
|
WINSIF2_HANDLE ServerHdl,
|
|||
|
PWINSINTF_ADD_T pWinsAdd,
|
|||
|
WINSINTF_TRIG_TYPE_E TrigType_e
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsTrigger(
|
|||
|
ServerHdl,
|
|||
|
pWinsAdd,
|
|||
|
TrigType_e
|
|||
|
);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
}
|
|||
|
DWORD
|
|||
|
WinsDoStaticInit(
|
|||
|
WINSIF2_HANDLE ServerHdl,
|
|||
|
LPWSTR pDataFilePath,
|
|||
|
DWORD fDel
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsDoStaticInit(
|
|||
|
ServerHdl,
|
|||
|
pDataFilePath, fDel);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
DWORD
|
|||
|
WinsDoScavenging(
|
|||
|
WINSIF2_HANDLE ServerHdl
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsDoScavenging(
|
|||
|
ServerHdl
|
|||
|
);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
|
|||
|
}
|
|||
|
DWORD
|
|||
|
WinsDoScavengingNew(
|
|||
|
WINSIF2_HANDLE ServerHdl,
|
|||
|
PWINSINTF_SCV_REQ_T pScvReq
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsDoScavengingNew(
|
|||
|
ServerHdl,
|
|||
|
pScvReq);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
DWORD
|
|||
|
WinsGetDbRecs(
|
|||
|
WINSIF2_HANDLE ServerHdl,
|
|||
|
PWINSINTF_ADD_T pWinsAdd,
|
|||
|
WINSINTF_VERS_NO_T MinVersNo,
|
|||
|
WINSINTF_VERS_NO_T MaxVersNo,
|
|||
|
PWINSINTF_RECS_T pRecs
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsGetDbRecs(
|
|||
|
ServerHdl,
|
|||
|
pWinsAdd, MinVersNo, MaxVersNo, pRecs);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
|
|||
|
}
|
|||
|
DWORD
|
|||
|
WinsTerm(
|
|||
|
handle_t ServerHdl,
|
|||
|
short fAbruptTerm
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsTerm(
|
|||
|
ServerHdl,
|
|||
|
fAbruptTerm);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
}
|
|||
|
|
|||
|
DWORD
|
|||
|
WinsBackup(
|
|||
|
WINSIF2_HANDLE ServerHdl,
|
|||
|
LPBYTE pBackupPath,
|
|||
|
short fIncremental
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsBackup(
|
|||
|
ServerHdl,
|
|||
|
pBackupPath, fIncremental);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
}
|
|||
|
|
|||
|
DWORD
|
|||
|
WinsDelDbRecs(
|
|||
|
WINSIF2_HANDLE ServerHdl,
|
|||
|
PWINSINTF_ADD_T pWinsAdd,
|
|||
|
WINSINTF_VERS_NO_T MinVersNo,
|
|||
|
WINSINTF_VERS_NO_T MaxVersNo
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsDelDbRecs(
|
|||
|
ServerHdl,
|
|||
|
pWinsAdd, MinVersNo, MaxVersNo);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
}
|
|||
|
|
|||
|
DWORD
|
|||
|
WinsPullRange(
|
|||
|
WINSIF2_HANDLE ServerHdl,
|
|||
|
PWINSINTF_ADD_T pWinsAdd,
|
|||
|
PWINSINTF_ADD_T pOwnAdd,
|
|||
|
WINSINTF_VERS_NO_T MinVersNo,
|
|||
|
WINSINTF_VERS_NO_T MaxVersNo
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsPullRange(
|
|||
|
ServerHdl,
|
|||
|
pWinsAdd, pOwnAdd, MinVersNo, MaxVersNo);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
}
|
|||
|
DWORD
|
|||
|
WinsSetPriorityClass(
|
|||
|
WINSIF2_HANDLE ServerHdl,
|
|||
|
WINSINTF_PRIORITY_CLASS_E PrCls_e
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsSetPriorityClass(
|
|||
|
ServerHdl,
|
|||
|
PrCls_e);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
DWORD
|
|||
|
WinsResetCounters(
|
|||
|
WINSIF2_HANDLE ServerHdl
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsResetCounters(
|
|||
|
ServerHdl
|
|||
|
);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
}
|
|||
|
|
|||
|
DWORD
|
|||
|
WinsRestoreEx(
|
|||
|
LPBYTE pBackupPath,
|
|||
|
DbVersion Version
|
|||
|
)
|
|||
|
{
|
|||
|
return(WinsRestoreC(pBackupPath, Version));
|
|||
|
}
|
|||
|
|
|||
|
DWORD
|
|||
|
WinsRestore(
|
|||
|
LPBYTE pBackupPath
|
|||
|
)
|
|||
|
{
|
|||
|
return(WinsRestoreC(pBackupPath, DbVersion5 ));
|
|||
|
}
|
|||
|
|
|||
|
DWORD
|
|||
|
ConvertUnicodeStringToAscii(
|
|||
|
LPWSTR pUnicodeString,
|
|||
|
LPBYTE pAsciiString,
|
|||
|
DWORD MaxSz
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD RetVal;
|
|||
|
RetVal = WideCharToMultiByte(
|
|||
|
CP_ACP,
|
|||
|
0,
|
|||
|
pUnicodeString,
|
|||
|
-1,
|
|||
|
pAsciiString,
|
|||
|
MaxSz,
|
|||
|
NULL,
|
|||
|
NULL
|
|||
|
);
|
|||
|
if (0 == RetVal ) {
|
|||
|
return GetLastError();
|
|||
|
} else {
|
|||
|
return ERROR_SUCCESS;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
DWORD
|
|||
|
WinsReadLogPath(
|
|||
|
PCHAR *pLogPath
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD Error;
|
|||
|
static TCHAR Buf[WINSINTF_MAX_NAME_SIZE];
|
|||
|
static TCHAR ExpandBuf[WINSINTF_MAX_NAME_SIZE];
|
|||
|
static char AsciiBuf[WINSINTF_MAX_NAME_SIZE];
|
|||
|
WCHAR *pTempPath,*pExpandTempPath;
|
|||
|
HKEY sParamKey;
|
|||
|
DWORD ValTyp;
|
|||
|
DWORD Sz;
|
|||
|
#define WINS_PARAM_KEY TEXT("System\\CurrentControlSet\\Services\\Wins\\Parameters")
|
|||
|
#define DEFAULT_LOG_FILE_PATH TEXT("%SystemRoot%\\System32\\wins")
|
|||
|
|
|||
|
Error = RegOpenKeyEx(
|
|||
|
HKEY_LOCAL_MACHINE,
|
|||
|
WINS_PARAM_KEY,
|
|||
|
0 ,
|
|||
|
KEY_READ,
|
|||
|
&sParamKey
|
|||
|
);
|
|||
|
|
|||
|
if (ERROR_SUCCESS != Error) {
|
|||
|
return Error;
|
|||
|
}
|
|||
|
|
|||
|
pTempPath = Buf;
|
|||
|
Error = RegQueryValueEx(
|
|||
|
sParamKey,
|
|||
|
WINSCNF_LOG_FILE_PATH_NM,
|
|||
|
NULL, //reserved; must be NULL
|
|||
|
&ValTyp,
|
|||
|
(LPBYTE)pTempPath,
|
|||
|
&Sz
|
|||
|
);
|
|||
|
|
|||
|
if (ERROR_SUCCESS != Error || pTempPath[0] == L'\0') {
|
|||
|
pTempPath = DEFAULT_LOG_FILE_PATH;
|
|||
|
}
|
|||
|
pExpandTempPath = ExpandBuf;
|
|||
|
Error = ExpandEnvironmentStrings(
|
|||
|
pTempPath,
|
|||
|
pExpandTempPath,
|
|||
|
WINSINTF_MAX_NAME_SIZE);
|
|||
|
if (0 == Error || Error > WINSINTF_MAX_NAME_SIZE) {
|
|||
|
RegCloseKey(sParamKey);
|
|||
|
return GetLastError();
|
|||
|
}
|
|||
|
*pLogPath = AsciiBuf;
|
|||
|
Error = ConvertUnicodeStringToAscii(
|
|||
|
pExpandTempPath,
|
|||
|
*pLogPath,
|
|||
|
WINSINTF_MAX_NAME_SIZE
|
|||
|
);
|
|||
|
RegCloseKey(sParamKey);
|
|||
|
return Error;
|
|||
|
}
|
|||
|
|
|||
|
DWORD
|
|||
|
WinsRestoreC(
|
|||
|
LPBYTE pBackupPath,
|
|||
|
DbVersion Version
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This is not an RPC function. It is provided to do a restore of
|
|||
|
the database.
|
|||
|
Arguments:
|
|||
|
pBackupPath - Path to the backup directory
|
|||
|
|
|||
|
Externals Used:
|
|||
|
None
|
|||
|
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
Success status codes --
|
|||
|
Error status codes --
|
|||
|
|
|||
|
Error Handling:
|
|||
|
|
|||
|
Called by:
|
|||
|
|
|||
|
Side Effects:
|
|||
|
|
|||
|
Comments:
|
|||
|
None
|
|||
|
--*/
|
|||
|
{
|
|||
|
JET_ERR JetRetStat;
|
|||
|
HMODULE hExtension;
|
|||
|
FARPROC fRestoreFn;
|
|||
|
FARPROC fSetSystemParamFn;
|
|||
|
DWORD RetStat = WINSINTF_SUCCESS;
|
|||
|
DWORD ProcId = 0x9C; //ordinal value of JetRestore
|
|||
|
LPCSTR RestoreProcName;
|
|||
|
LPCSTR SetSystemParamProcName;
|
|||
|
BYTE BackupPath[WINSINTF_MAX_NAME_SIZE + sizeof(WINS_BACKUP_DIR_ASCII)];
|
|||
|
CHAR *pLogFilePath;
|
|||
|
DWORD Error;
|
|||
|
BOOL fDirCr;
|
|||
|
LPTSTR pDllName;
|
|||
|
|
|||
|
// static BOOL sLoaded = FALSE;
|
|||
|
|
|||
|
try {
|
|||
|
// if (!sLoaded)
|
|||
|
{
|
|||
|
|
|||
|
switch ( Version ) {
|
|||
|
case DbVersion351:
|
|||
|
pDllName = TEXT("jet.dll");
|
|||
|
RestoreProcName = (LPCSTR)0x9C;
|
|||
|
SetSystemParamProcName=(LPCSTR)165;
|
|||
|
break;
|
|||
|
case DbVersion4:
|
|||
|
pDllName = TEXT("jet500.dll");
|
|||
|
RestoreProcName = "JetRestore";
|
|||
|
SetSystemParamProcName="JetSetSystemParameter";
|
|||
|
break;
|
|||
|
case DbVersion5:
|
|||
|
pDllName = TEXT("esent.dll");
|
|||
|
RestoreProcName = "JetRestore";
|
|||
|
SetSystemParamProcName="JetSetSystemParameter";
|
|||
|
break;
|
|||
|
default:
|
|||
|
return WINSINTF_FAILURE;
|
|||
|
}
|
|||
|
|
|||
|
// load the extension agent dll and resolve the entry points...
|
|||
|
if ((hExtension = GetModuleHandle(pDllName)) == NULL)
|
|||
|
{
|
|||
|
if ((hExtension = LoadLibrary(pDllName)) == NULL)
|
|||
|
{
|
|||
|
return(GetLastError());
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if ((fRestoreFn = GetProcAddress(hExtension,RestoreProcName)) == (FARPROC)NULL)
|
|||
|
{
|
|||
|
RetStat = GetLastError();
|
|||
|
}
|
|||
|
|
|||
|
if ((RetStat == ERROR_SUCCESS) && (Version != DbVersion351) )
|
|||
|
{
|
|||
|
if ((fSetSystemParamFn = GetProcAddress(hExtension,
|
|||
|
SetSystemParamProcName)) == (FARPROC)NULL)
|
|||
|
{
|
|||
|
RetStat = GetLastError();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
// sLoaded = TRUE;
|
|||
|
//FUTURES("Change to lstrcpy and lstrcat when Jet starts supporting unicode")
|
|||
|
if (RetStat == WINSINTF_SUCCESS)
|
|||
|
{
|
|||
|
strcpy(BackupPath, pBackupPath);
|
|||
|
strcat(BackupPath, WINS_BACKUP_DIR_ASCII);
|
|||
|
fDirCr = CreateDirectoryA(BackupPath, NULL);
|
|||
|
|
|||
|
if (!fDirCr && ((Error = GetLastError()) == ERROR_ALREADY_EXISTS))
|
|||
|
{
|
|||
|
if (Version != DbVersion351)
|
|||
|
{
|
|||
|
JET_INSTANCE JetInstance=0;
|
|||
|
#define BASENAME "j50"
|
|||
|
//
|
|||
|
// first set the system parameter for basename
|
|||
|
//
|
|||
|
|
|||
|
//
|
|||
|
// Basename to use for jet*.log and jet.chk
|
|||
|
//
|
|||
|
// We should also specify the logfile path by checking WINS registry
|
|||
|
// but it is not essential.
|
|||
|
|
|||
|
//
|
|||
|
// When WINS comes up, if it gets an error indicating that there
|
|||
|
// was a bad log signature or log version, it will delete all log
|
|||
|
// files and restart again.
|
|||
|
//
|
|||
|
do {
|
|||
|
JetRetStat = (JET_ERR)(*fSetSystemParamFn)(
|
|||
|
&JetInstance,
|
|||
|
(JET_SESID)0, //SesId - ignored
|
|||
|
JET_paramBaseName,
|
|||
|
0,
|
|||
|
BASENAME
|
|||
|
);
|
|||
|
if (JetRetStat != JET_errSuccess) break;
|
|||
|
JetRetStat = (JET_ERR)(*fSetSystemParamFn)(
|
|||
|
&JetInstance,
|
|||
|
(JET_SESID)0, //SesId - ignored
|
|||
|
JET_paramLogFileSize,
|
|||
|
1024,
|
|||
|
NULL
|
|||
|
);
|
|||
|
|
|||
|
JetRetStat = WinsReadLogPath( &pLogFilePath );
|
|||
|
if (JetRetStat != JET_errSuccess) break;
|
|||
|
|
|||
|
JetRetStat = (JET_ERR)(*fSetSystemParamFn)(
|
|||
|
&JetInstance,
|
|||
|
(JET_SESID)0, //SesId - ignored
|
|||
|
JET_paramLogFilePath,
|
|||
|
0,
|
|||
|
pLogFilePath
|
|||
|
);
|
|||
|
} while (FALSE);
|
|||
|
if (JetRetStat == JET_errSuccess) {
|
|||
|
JetRetStat = (JET_ERR)(*fRestoreFn)((const char *)BackupPath, NULL);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
JetRetStat = (JET_ERR)(*fRestoreFn)((const char *)BackupPath, 0, NULL, (JET_PFNSTATUS)NULL);
|
|||
|
}
|
|||
|
if (JetRetStat != JET_errSuccess)
|
|||
|
{
|
|||
|
RetStat = WINSINTF_FAILURE;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
//
|
|||
|
// If CreateDirectoryA was successful, renove the directory
|
|||
|
//
|
|||
|
if (fDirCr)
|
|||
|
{
|
|||
|
RemoveDirectoryA(BackupPath);
|
|||
|
RetStat = WINSINTF_FAILURE;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
RetStat = Error;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
except(EXCEPTION_EXECUTE_HANDLER) {
|
|||
|
RetStat = WINSINTF_FAILURE;
|
|||
|
}
|
|||
|
if (!FreeLibrary(hExtension))
|
|||
|
{
|
|||
|
RetStat = GetLastError();
|
|||
|
}
|
|||
|
return(RetStat);
|
|||
|
}
|
|||
|
|
|||
|
DWORD
|
|||
|
WinsWorkerThdUpd(
|
|||
|
WINSIF2_HANDLE ServerHdl,
|
|||
|
DWORD NewNoOfNbtThds
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsWorkerThdUpd(
|
|||
|
ServerHdl,
|
|||
|
NewNoOfNbtThds);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
}
|
|||
|
|
|||
|
DWORD
|
|||
|
WinsSyncUp(
|
|||
|
WINSIF2_HANDLE ServerHdl,
|
|||
|
PWINSINTF_ADD_T pWinsAdd,
|
|||
|
PWINSINTF_ADD_T pOwnerAdd
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
WINSINTF_VERS_NO_T MinVersNo, MaxVersNo;
|
|||
|
|
|||
|
//
|
|||
|
// Set both version numbers to zero
|
|||
|
//
|
|||
|
MinVersNo.LowPart = 0;
|
|||
|
MinVersNo.HighPart = 0;
|
|||
|
MaxVersNo = MinVersNo;
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsPullRange(
|
|||
|
ServerHdl,
|
|||
|
pWinsAdd, pOwnerAdd, MinVersNo, MaxVersNo);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
}
|
|||
|
|
|||
|
DWORD
|
|||
|
WinsGetNameAndAdd(
|
|||
|
WINSIF2_HANDLE ServerHdl,
|
|||
|
PWINSINTF_ADD_T pWinsAdd,
|
|||
|
LPBYTE pUncName
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsGetNameAndAdd(
|
|||
|
ServerHdl,
|
|||
|
pWinsAdd, pUncName);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
}
|
|||
|
|
|||
|
DWORD
|
|||
|
WinsDeleteWins(
|
|||
|
WINSIF2_HANDLE ServerHdl,
|
|||
|
PWINSINTF_ADD_T pWinsAdd)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsDeleteWins(
|
|||
|
ServerHdl,
|
|||
|
pWinsAdd);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
}
|
|||
|
|
|||
|
DWORD
|
|||
|
WinsSetFlags(
|
|||
|
WINSIF2_HANDLE ServerHdl,
|
|||
|
DWORD fFlags)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsSetFlags(
|
|||
|
ServerHdl,
|
|||
|
fFlags);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
}
|
|||
|
DWORD
|
|||
|
WinsGetDbRecsByName(
|
|||
|
WINSIF2_HANDLE ServerHdl,
|
|||
|
PWINSINTF_ADD_T pWinsAdd,
|
|||
|
DWORD Location,
|
|||
|
LPBYTE pName,
|
|||
|
DWORD NameLen,
|
|||
|
DWORD NoOfRecsDesired,
|
|||
|
DWORD fOnlyStatic,
|
|||
|
PWINSINTF_RECS_T pRecs
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsGetDbRecsByName(
|
|||
|
ServerHdl,
|
|||
|
pWinsAdd,
|
|||
|
Location,
|
|||
|
pName,
|
|||
|
NameLen,
|
|||
|
NoOfRecsDesired,
|
|||
|
fOnlyStatic,
|
|||
|
pRecs);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
}
|
|||
|
|
|||
|
DWORD
|
|||
|
WinsTombstoneDbRecs(
|
|||
|
WINSIF2_HANDLE ServerHdl,
|
|||
|
PWINSINTF_ADD_T pWinsAdd,
|
|||
|
WINSINTF_VERS_NO_T MinVersNo,
|
|||
|
WINSINTF_VERS_NO_T MaxVersNo
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsTombstoneDbRecs(ServerHdl, pWinsAdd, MinVersNo, MaxVersNo);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
}
|
|||
|
|
|||
|
DWORD
|
|||
|
WinsCheckAccess(
|
|||
|
WINSIF2_HANDLE ServerHdl,
|
|||
|
DWORD *Access
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD status;
|
|||
|
RpcTryExcept {
|
|||
|
|
|||
|
status = R_WinsCheckAccess(ServerHdl, Access);
|
|||
|
|
|||
|
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
|
|||
|
|
|||
|
status = RpcExceptionCode();
|
|||
|
|
|||
|
} RpcEndExcept
|
|||
|
|
|||
|
return status;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|