213 lines
4.6 KiB
C
213 lines
4.6 KiB
C
/*++
|
|
|
|
Copyright (c) 1998 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
Routing\Netsh\wins\winshndl.c
|
|
|
|
Abstract:
|
|
|
|
WINS Server Command dispatcher.
|
|
|
|
Created by:
|
|
|
|
Shubho Bhattacharya(a-sbhatt) on 12/14/98
|
|
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
|
|
extern ULONG g_ulNumTopCmds;
|
|
extern ULONG g_ulNumSubContext;
|
|
|
|
extern WINSMON_SUBCONTEXT_TABLE_ENTRY g_WinsSubContextTable[];
|
|
extern CMD_ENTRY g_WinsCmds[];
|
|
|
|
DWORD
|
|
HandleWinsDump(
|
|
IN LPCWSTR pwszMachine,
|
|
IN OUT LPWSTR *ppwcArguments,
|
|
IN DWORD dwCurrentIndex,
|
|
IN DWORD dwArgCount,
|
|
IN DWORD dwFlags,
|
|
IN LPCVOID pvData,
|
|
OUT BOOL *pbDone
|
|
)
|
|
{
|
|
DWORD Status = NO_ERROR;
|
|
|
|
if( dwArgCount > dwCurrentIndex )
|
|
{
|
|
if( IsHelpToken(ppwcArguments[dwCurrentIndex]) is TRUE )
|
|
{
|
|
DisplayMessage(g_hModule,
|
|
HLP_WINS_DUMP_EX);
|
|
}
|
|
}
|
|
|
|
Status = WinsDump(NULL, ppwcArguments, dwArgCount, pvData);
|
|
|
|
if( Status is NO_ERROR )
|
|
DisplayMessage(g_hModule,
|
|
EMSG_WINS_ERROR_SUCCESS);
|
|
else if( Status is ERROR_FILE_NOT_FOUND )
|
|
DisplayMessage(g_hModule,
|
|
EMSG_WINS_NOT_CONFIGURED);
|
|
else
|
|
DisplayErrorMessage(EMSG_WINS_DUMP,
|
|
Status);
|
|
|
|
return Status;
|
|
|
|
|
|
}
|
|
|
|
|
|
DWORD
|
|
HandleWinsHelp(
|
|
IN LPCWSTR pwszMachine,
|
|
IN OUT LPWSTR *ppwcArguments,
|
|
IN DWORD dwCurrentIndex,
|
|
IN DWORD dwArgCount,
|
|
IN DWORD dwFlags,
|
|
IN LPCVOID pvData,
|
|
OUT BOOL *pbDone
|
|
)
|
|
{
|
|
DWORD i, j;
|
|
|
|
for(i = 0; i < g_ulNumTopCmds -2; i++)
|
|
{
|
|
if ((g_WinsCmds[i].dwCmdHlpToken == WINS_MSG_NULL)
|
|
|| !g_WinsCmds[i].pwszCmdToken[0] )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
DisplayMessage(g_hModule,
|
|
g_WinsCmds[i].dwShortCmdHelpToken);
|
|
}
|
|
|
|
for(i=0; i < g_ulNumSubContext; i++)
|
|
{
|
|
DisplayMessage(g_hModule, g_WinsSubContextTable[i].dwShortCmdHlpToken);
|
|
DisplayMessage(g_hModule, WINS_FORMAT_LINE);
|
|
}
|
|
|
|
DisplayMessage(g_hModule, WINS_FORMAT_LINE);
|
|
|
|
return NO_ERROR;
|
|
}
|
|
|
|
DWORD
|
|
HandleWinsAddServer(
|
|
IN LPCWSTR pwszMachine,
|
|
IN OUT LPWSTR *ppwcArguments,
|
|
IN DWORD dwCurrentIndex,
|
|
IN DWORD dwArgCount,
|
|
IN DWORD dwFlags,
|
|
IN LPCVOID pvData,
|
|
OUT BOOL *pbDone
|
|
)
|
|
{
|
|
DWORD dwError = NO_ERROR;
|
|
DWORD i, j, dwNumArg;
|
|
PDWORD pdwTagType = NULL;
|
|
TAG_TYPE pttTags[] = {{WINS_TOKEN_SERVER, TRUE, FALSE}};
|
|
|
|
|
|
if( dwArgCount < dwCurrentIndex + 1 )
|
|
{
|
|
DisplayMessage(g_hModule, HLP_WINS_ADD_SERVER_EX);
|
|
return ERROR_INVALID_PARAMETER;
|
|
}
|
|
|
|
dwNumArg = dwArgCount - dwCurrentIndex;
|
|
|
|
pdwTagType = WinsAllocateMemory(dwNumArg*sizeof(DWORD));
|
|
|
|
if( pdwTagType is NULL )
|
|
{
|
|
dwError = ERROR_NOT_ENOUGH_MEMORY;
|
|
goto ErrorReturn;
|
|
}
|
|
|
|
//See if the first argument has tag. If so, then assume all arguments have tag.
|
|
if( wcsstr(ppwcArguments[dwCurrentIndex], NETSH_ARG_DELIMITER) )
|
|
{
|
|
dwError = MatchTagsInCmdLine(g_hModule,
|
|
ppwcArguments,
|
|
dwCurrentIndex,
|
|
dwArgCount,
|
|
pttTags,
|
|
NUM_TAGS_IN_TABLE(pttTags),
|
|
pdwTagType);
|
|
|
|
if (dwError isnot NO_ERROR)
|
|
{
|
|
dwError = ERROR_INVALID_PARAMETER;
|
|
goto ErrorReturn;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// No tags in arguments. So assume order of arguments
|
|
//
|
|
|
|
for ( i = 0; i < dwNumArg; i++)
|
|
{
|
|
pdwTagType[i] = i;
|
|
}
|
|
}
|
|
|
|
CommonReturn:
|
|
if( dwError is NO_ERROR )
|
|
DisplayMessage(g_hModule, EMSG_WINS_ERROR_SUCCESS);
|
|
|
|
if( pdwTagType )
|
|
{
|
|
WinsFreeMemory(pdwTagType);
|
|
pdwTagType = NULL;
|
|
}
|
|
|
|
return dwError;
|
|
ErrorReturn:
|
|
DisplayErrorMessage(EMSG_WINS_ADD_SERVER,
|
|
dwError);
|
|
|
|
goto CommonReturn;
|
|
}
|
|
|
|
|
|
DWORD
|
|
HandleWinsDeleteServer(
|
|
IN LPCWSTR pwszMachine,
|
|
IN OUT LPWSTR *ppwcArguments,
|
|
IN DWORD dwCurrentIndex,
|
|
IN DWORD dwArgCount,
|
|
IN DWORD dwFlags,
|
|
IN LPCVOID pvData,
|
|
OUT BOOL *pbDone
|
|
)
|
|
{
|
|
return NO_ERROR;
|
|
}
|
|
|
|
|
|
DWORD
|
|
HandleWinsShowServer(
|
|
IN LPCWSTR pwszMachine,
|
|
IN OUT LPWSTR *ppwcArguments,
|
|
IN DWORD dwCurrentIndex,
|
|
IN DWORD dwArgCount,
|
|
IN DWORD dwFlags,
|
|
IN LPCVOID pvData,
|
|
OUT BOOL *pbDone
|
|
)
|
|
{
|
|
return NO_ERROR;
|
|
}
|