windows-nt/Source/XPSP1/NT/net/config/tools/rasbindc/rasbindc.c
2020-09-26 16:20:57 +08:00

232 lines
5 KiB
C

// Private nt headers.
//
//#include <nt.h>
//#include <ntrtl.h>
//#include <nturtl.h>
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <rasapip.h>
#define SZ_CMD_COUNT L"count"
#define SZ_CMD_ADD L"add"
#define SZ_CMD_REMOVE L"remove"
#define SZ_PARAM_IPOUT L"ipout="
#define SZ_PARAM_NBFIN L"nbfin="
#define SZ_PARAM_NBFOUT L"nbfout="
typedef enum _COMMAND
{
CMD_INVALID = 0,
CMD_COUNT,
CMD_ADD,
CMD_REMOVE,
} COMMAND;
typedef struct _OPTIONS
{
COMMAND Command;
UINT cIpOut;
UINT cNbfIn;
UINT cNbfOut;
} OPTIONS;
VOID
ExecuteCommand (
IN const OPTIONS* pOptions)
{
HRESULT hr;
UINT cIpOut, cNbfIn, cNbfOut;
switch (pOptions->Command)
{
case CMD_COUNT:
hr = RasCountBindings (
&cIpOut,
&cNbfIn,
&cNbfOut);
printf (
"TCP/IP Dial-Out: %u\n"
"NetBEUI Dial-In: %u\n"
"NetBEUI Dial-Out: %u\n",
cIpOut, cNbfIn, cNbfOut);
break;
case CMD_ADD:
cIpOut = pOptions->cIpOut;
cNbfIn = pOptions->cNbfIn;
cNbfOut = pOptions->cNbfOut;
hr = RasAddBindings (
&cIpOut,
&cNbfIn,
&cNbfOut);
if (SUCCEEDED(hr))
{
printf (
"TCP/IP Dial-Out: %u\n"
"NetBEUI Dial-In: %u\n"
"NetBEUI Dial-Out: %u\n",
cIpOut, cNbfIn, cNbfOut);
}
break;
case CMD_REMOVE:
printf ("Net yet implemented.\n");
break;
default:
break;
}
}
BOOL
ParseCounts (
IN INT argc,
IN PCWSTR argv[],
OUT OPTIONS* pOptions)
{
BOOL fRet;
INT i;
// We must have an even number of parameters if we have a chance
// of being correct. (We're parsing 'param= value' pairs.)
//
if (!argc || (argc % 2 != 0))
{
return FALSE;
}
fRet = TRUE;
for (i = 0; i < argc - 1; i++)
{
if (0 == _wcsicmp (argv[i], SZ_PARAM_IPOUT))
{
pOptions->cIpOut = wcstoul (argv[++i], NULL, 10);
}
else if (0 == _wcsicmp (argv[i], SZ_PARAM_NBFIN))
{
pOptions->cNbfIn = wcstoul (argv[++i], NULL, 10);
}
else if (0 == _wcsicmp (argv[i], SZ_PARAM_NBFOUT))
{
pOptions->cNbfOut = wcstoul (argv[++i], NULL, 10);
}
else
{
fRet = FALSE;
}
}
return fRet;
}
VOID
Usage (
IN PCWSTR pszProgramName,
IN COMMAND Command)
{
switch (Command)
{
case CMD_COUNT:
printf (
"%S count\n",
pszProgramName);
break;
case CMD_ADD:
printf (
"\n"
"%S add [ipout= i] [nbfin= j] [nbfout= k]\n"
"\n"
" add 'i' TCP/IP Dial-Out bindings\n"
" 'j' NetBEUI Dial-In bindings\n"
" 'k' NetBEUI Dial-Out bindings\n"
"\n"
" (i, j, and k all default to zero)\n"
"\n",
pszProgramName);
break;
case CMD_REMOVE:
printf (
"\n"
"%S remove [ipout= i] [nbfin= j] [nbfout= k]\n"
"\n"
" remove 'i' TCP/IP Dial-Out bindings\n"
" 'j' NetBEUI Dial-In bindings\n"
" 'k' NetBEUI Dial-Out bindings\n"
"\n"
" (i, j, and k all default to zero)\n"
"\n",
pszProgramName);
break;
default:
printf (
"\n"
"RAS Binding Configuration (shaunco)\n"
" View or change RAS bindings.\n"
"\n"
"%S [count | add | remove]\n",
pszProgramName);
break;
}
}
VOID
__cdecl
wmain (
IN INT argc,
IN PCWSTR argv[])
{
HRESULT hr;
OPTIONS Options;
ZeroMemory (&Options, sizeof(Options));
Options.Command = CMD_INVALID;
if (argc < 2)
{
Usage (argv[0], Options.Command);
return;
}
if (0 == _wcsicmp (argv[1], SZ_CMD_COUNT))
{
Options.Command = CMD_COUNT;
}
else if (0 == _wcsicmp (argv[1], SZ_CMD_ADD))
{
Options.Command = CMD_ADD;
if (!ParseCounts (argc-2, &argv[2], &Options))
{
Usage (argv[0], CMD_ADD);
return;
}
}
else if (0 == _wcsicmp (argv[1], SZ_CMD_REMOVE))
{
Options.Command = CMD_REMOVE;
if (!ParseCounts (argc-2, &argv[2], &Options))
{
Usage (argv[0], CMD_REMOVE);
return;
}
}
else
{
Usage (argv[0], Options.Command);
return;
}
ExecuteCommand (&Options);
}