mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
508 lines
12 KiB
508 lines
12 KiB
/*++
|
|
|
|
Copyright (c) 1991 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
MCHDEV.C
|
|
|
|
Abstract:
|
|
|
|
Contains mapping functions to present netcmd with versions
|
|
of the Net32 APIs which use ASCII instead of Unicode.
|
|
|
|
This module maps the NetCharDev(Q) APIs.
|
|
|
|
Author:
|
|
|
|
Shanku Niyogi (W-ShankN) 14-Oct-1991
|
|
|
|
Environment:
|
|
|
|
User Mode - Win32
|
|
|
|
Revision History:
|
|
|
|
14-Oct-1991 W-ShankN
|
|
Created
|
|
|
|
--*/
|
|
|
|
// BUGBUG - These APIs aren't really implemented yet.
|
|
//
|
|
#ifdef DISABLE_ALL_MAPI
|
|
#define DISABLE_CHDEV_MAPI
|
|
#endif
|
|
|
|
//
|
|
// INCLUDES
|
|
//
|
|
|
|
#include <windef.h>
|
|
|
|
#include <time.h>
|
|
#include <string.h>
|
|
#include <malloc.h>
|
|
#include <stddef.h>
|
|
|
|
#include <lmcons.h>
|
|
#include <lmchdev.h>
|
|
#include <lmerr.h> // NERR_
|
|
|
|
#include <remdef.h> // REM structure descriptor strings
|
|
|
|
#include "port1632.h" // includes mchdev.h
|
|
|
|
// This allows everything to work until Unicode is used.
|
|
|
|
#ifdef UNICODE
|
|
|
|
// These declarations will save some space.
|
|
|
|
static const LPSTR pszDesc_chardev_info_0 = REM32_chardev_info_0;
|
|
static const LPSTR pszDesc_chardev_info_1 = REM32_chardev_info_1;
|
|
static const LPSTR pszDesc_chardevQ_info_0 = REM32_chardevQ_info_0;
|
|
static const LPSTR pszDesc_chardevQ_info_1 = REM32_chardevQ_info_1;
|
|
static const LPSTR pszDesc_chardevQ_info_1_setinfo
|
|
= REM32_chardevQ_info_1_setinfo;
|
|
WORD
|
|
MNetCharDevControl(
|
|
LPSTR pszServer,
|
|
LPSTR pszDevName,
|
|
DWORD wpOpCode )
|
|
{
|
|
#if defined(DISABLE_CHDEV_MAPI)
|
|
return PDummyApi(
|
|
"%s,%s,%lu",
|
|
"MNetCharDevControl",
|
|
pszServer,
|
|
pszDevName,
|
|
wpOpCode);
|
|
#else
|
|
UINT nErr; // error from mapping
|
|
DWORD nRes; // return from Netapi
|
|
LPWSTR apwsz[2];
|
|
|
|
nErr = MxMapParameters(2, apwsz, pszServer,
|
|
pszDevName);
|
|
if (nErr)
|
|
return (WORD)nErr;
|
|
|
|
nRes = NetCharDevControl(apwsz[0], apwsz[1], wpOpCode);
|
|
|
|
MxFreeUnicodeVector(apwsz, 2);
|
|
|
|
return LOWORD(nRes);
|
|
#endif
|
|
}
|
|
|
|
WORD
|
|
MNetCharDevEnum(
|
|
LPSTR pszServer,
|
|
DWORD nLevel,
|
|
LPBYTE * ppbBuffer,
|
|
DWORD * pcEntriesRead)
|
|
{
|
|
#if defined(DISABLE_CHDEV_MAPI)
|
|
return PDummyApi(
|
|
"%s,%lu,%lx,%lx",
|
|
"MNetCharDevEnum",
|
|
pszServer,
|
|
nLevel,
|
|
ppbBuffer,
|
|
pcEntriesRead);
|
|
#else
|
|
DWORD cTotalAvail;
|
|
UINT nErr; // error from mapping
|
|
DWORD nRes; // return from Netapi
|
|
LPWSTR pwszServer = NULL;
|
|
|
|
nErr = MxMapParameters(1, &pwszServer, pszServer);
|
|
if (nErr)
|
|
return (WORD)nErr;
|
|
|
|
nRes = NetCharDevEnum(pwszServer, nLevel,
|
|
ppbBuffer, MAXPREFERREDLENGTH,
|
|
pcEntriesRead, &cTotalAvail, NULL);
|
|
|
|
if (nRes == NERR_Success || nRes == ERROR_MORE_DATA)
|
|
{
|
|
CHAR * pszDesc;
|
|
switch (nLevel)
|
|
{
|
|
case 0:
|
|
default:
|
|
pszDesc = pszDesc_chardev_info_0;
|
|
break;
|
|
case 1:
|
|
pszDesc = pszDesc_chardev_info_1;
|
|
break;
|
|
}
|
|
nErr = MxAsciifyRpcBuffer(*ppbBuffer, *pcEntriesRead, pszDesc);
|
|
if (nErr)
|
|
{
|
|
// So close... yet so far.
|
|
MxFreeUnicode(pwszServer);
|
|
return (WORD)nErr;
|
|
}
|
|
}
|
|
|
|
MxFreeUnicode(pwszServer);
|
|
|
|
return LOWORD(nRes);
|
|
#endif
|
|
}
|
|
|
|
WORD
|
|
MNetCharDevGetInfo(
|
|
LPSTR pszServer,
|
|
LPSTR pszDevName,
|
|
DWORD nLevel,
|
|
LPBYTE * ppbBuffer)
|
|
{
|
|
#if defined(DISABLE_CHDEV_MAPI)
|
|
return PDummyApi(
|
|
"%s,%s,%lu,%lx",
|
|
"MNetCharDevGetInfo",
|
|
pszServer,
|
|
pszDevName,
|
|
nLevel,
|
|
ppbBuffer);
|
|
#else
|
|
UINT nErr; // error from mapping
|
|
DWORD nRes; // return from Netapi
|
|
LPWSTR apwsz[2];
|
|
|
|
nErr = MxMapParameters(2, apwsz, pszServer,
|
|
pszDevName);
|
|
if (nErr)
|
|
return (WORD)nErr;
|
|
|
|
nRes = NetCharDevGetInfo(apwsz[0], apwsz[1], nLevel, ppbBuffer);
|
|
|
|
if (nRes == NERR_Success || nRes == ERROR_MORE_DATA)
|
|
{
|
|
LPSTR pszDesc;
|
|
switch (nLevel)
|
|
{
|
|
case 0:
|
|
default:
|
|
pszDesc = pszDesc_chardev_info_0;
|
|
break;
|
|
case 1:
|
|
pszDesc = pszDesc_chardev_info_1;
|
|
break;
|
|
}
|
|
nErr = MxAsciifyRpcBuffer(*ppbBuffer, 1, pszDesc);
|
|
if (nErr)
|
|
{
|
|
// So close... yet so far.
|
|
MxFreeUnicodeVector(apwsz, 2);
|
|
return (WORD)nErr;
|
|
}
|
|
}
|
|
|
|
MxFreeUnicodeVector(apwsz, 2);
|
|
|
|
return LOWORD(nRes);
|
|
#endif
|
|
}
|
|
|
|
WORD
|
|
MNetCharDevQEnum(
|
|
LPSTR pszServer,
|
|
LPSTR pszUserName,
|
|
DWORD nLevel,
|
|
LPBYTE * ppbBuffer,
|
|
DWORD * pcEntriesRead)
|
|
{
|
|
#if defined(DISABLE_CHDEV_MAPI)
|
|
return PDummyApi(
|
|
"%s,%s,%lu,%lx,%lx",
|
|
"MNetCharDevQEnum",
|
|
pszServer,
|
|
pszUserName,
|
|
nLevel,
|
|
ppbBuffer,
|
|
pcEntriesRead);
|
|
#else
|
|
DWORD cTotalAvail;
|
|
UINT nErr; // error from mapping
|
|
DWORD nRes; // return from Netapi
|
|
LPWSTR apwsz[2];
|
|
|
|
nErr = MxMapParameters(2, apwsz, pszServer,
|
|
pszUserName);
|
|
if (nErr)
|
|
return (WORD)nErr;
|
|
|
|
nRes = NetCharDevQEnum(apwsz[0], apwsz[1], nLevel,
|
|
ppbBuffer, MAXPREFERREDLENGTH,
|
|
pcEntriesRead, &cTotalAvail, NULL);
|
|
|
|
if (nRes == NERR_Success || nRes == ERROR_MORE_DATA)
|
|
{
|
|
CHAR * pszDesc;
|
|
switch (nLevel)
|
|
{
|
|
case 0:
|
|
default:
|
|
pszDesc = pszDesc_chardevQ_info_0;
|
|
break;
|
|
case 1:
|
|
pszDesc = pszDesc_chardevQ_info_1;
|
|
break;
|
|
}
|
|
nErr = MxAsciifyRpcBuffer(*ppbBuffer, *pcEntriesRead, pszDesc);
|
|
if (nErr)
|
|
{
|
|
// So close... yet so far.
|
|
MxFreeUnicodeVector(apwsz, 2);
|
|
return (WORD)nErr;
|
|
}
|
|
}
|
|
|
|
MxFreeUnicodeVector(apwsz, 2);
|
|
|
|
return LOWORD(nRes);
|
|
#endif
|
|
}
|
|
|
|
WORD
|
|
MNetCharDevQGetInfo(
|
|
LPSTR pszServer,
|
|
LPSTR pszQueueName,
|
|
LPSTR pszUserName,
|
|
DWORD nLevel,
|
|
LPBYTE * ppbBuffer)
|
|
{
|
|
#if defined(DISABLE_CHDEV_MAPI)
|
|
return PDummyApi(
|
|
"%s,%s,%s,%lu,%lx",
|
|
"MNetCharDevQGetInfo",
|
|
pszServer,
|
|
pszQueueName,
|
|
pszUserName,
|
|
nLevel,
|
|
ppbBuffer);
|
|
#else
|
|
UINT nErr; // error from mapping
|
|
DWORD nRes; // return from Netapi
|
|
LPWSTR apwsz[3];
|
|
|
|
nErr = MxMapParameters(2, apwsz, pszServer,
|
|
pszQueueName,
|
|
pszUserName);
|
|
if (nErr)
|
|
return (WORD)nErr;
|
|
|
|
nRes = NetCharDevQGetInfo(apwsz[0], apwsz[1], apwsz[2], nLevel, ppbBuffer);
|
|
|
|
if (nRes == NERR_Success || nRes == ERROR_MORE_DATA)
|
|
{
|
|
LPSTR pszDesc;
|
|
switch (nLevel)
|
|
{
|
|
case 0:
|
|
default:
|
|
pszDesc = pszDesc_chardevQ_info_0;
|
|
break;
|
|
case 1:
|
|
pszDesc = pszDesc_chardevQ_info_1;
|
|
break;
|
|
}
|
|
nErr = MxAsciifyRpcBuffer(*ppbBuffer, 1, pszDesc);
|
|
if (nErr)
|
|
{
|
|
// So close... yet so far.
|
|
MxFreeUnicodeVector(apwsz, 3);
|
|
return (WORD)nErr;
|
|
}
|
|
}
|
|
|
|
MxFreeUnicodeVector(apwsz, 3);
|
|
|
|
return LOWORD(nRes);
|
|
#endif
|
|
}
|
|
|
|
WORD
|
|
MNetCharDevQPurge(
|
|
LPSTR pszServer,
|
|
LPSTR pszQueueName)
|
|
{
|
|
#if defined(DISABLE_CHDEV_MAPI)
|
|
return PDummyApi(
|
|
"%s,%s",
|
|
"MNetCharDevQPurge",
|
|
pszServer,
|
|
pszQueueName);
|
|
#else
|
|
UINT nErr; // error from mapping
|
|
DWORD nRes; // return from Netapi
|
|
LPWSTR apwsz[2];
|
|
|
|
nErr = MxMapParameters(2, apwsz, pszServer,
|
|
pszQueueName);
|
|
if (nErr)
|
|
return (WORD)nErr;
|
|
|
|
nRes = NetCharDevQPurge(apwsz[0], apwsz[1]);
|
|
|
|
MxFreeUnicodeVector(apwsz, 2);
|
|
|
|
return LOWORD(nRes);
|
|
#endif
|
|
}
|
|
|
|
WORD
|
|
MNetCharDevQPurgeSelf(
|
|
LPSTR pszServer,
|
|
LPSTR pszQueueName,
|
|
LPSTR pszComputerName)
|
|
{
|
|
#if defined(DISABLE_CHDEV_MAPI)
|
|
return PDummyApi(
|
|
"%s,%s,%s",
|
|
"MNetCharDevQPurgeSelf",
|
|
pszServer,
|
|
pszQueueName,
|
|
pszComputerName);
|
|
#else
|
|
UINT nErr; // error from mapping
|
|
DWORD nRes; // return from Netapi
|
|
LPWSTR apwsz[3];
|
|
|
|
nErr = MxMapParameters(3, apwsz, pszServer,
|
|
pszQueueName,
|
|
pszComputerName);
|
|
if (nErr)
|
|
return (WORD)nErr;
|
|
|
|
nRes = NetCharDevQPurgeSelf(apwsz[0], apwsz[1], apwsz[2]);
|
|
|
|
MxFreeUnicodeVector(apwsz, 3);
|
|
|
|
return LOWORD(nRes);
|
|
#endif
|
|
}
|
|
|
|
WORD
|
|
MNetCharDevQSetInfo(
|
|
LPSTR pszServer,
|
|
LPSTR pszQueueName,
|
|
DWORD nLevel,
|
|
LPBYTE pbBuffer,
|
|
DWORD cbBuffer,
|
|
DWORD nParmNum)
|
|
{
|
|
#if defined(DISABLE_CHDEV_MAPI)
|
|
return PDummyApi(
|
|
"%s,%s,%lu,%lx,%lu,%lu",
|
|
"MNetCharDevQSetInfo",
|
|
pszServer,
|
|
pszQueueName,
|
|
nLevel,
|
|
pbBuffer,
|
|
cbBuffer,
|
|
nParmNum);
|
|
#else
|
|
UINT nErr; // error from mapping
|
|
DWORD nRes; // return from Netapi
|
|
UINT nFieldInfo;
|
|
MXSAVELIST * pmxsavlst;
|
|
LPWSTR apwsz[2];
|
|
DWORD nLevelNew;
|
|
|
|
UNREFERENCED_PARAMETER(cbBuffer);
|
|
|
|
if (nLevel != 1)
|
|
return ERROR_INVALID_LEVEL;
|
|
|
|
nErr = MxMapParameters(2, apwsz, pszServer,
|
|
pszQueueName);
|
|
if (nErr)
|
|
return (WORD)nErr;
|
|
|
|
// Because of a dumbly non-conformist descriptor string, the ParmNum
|
|
// presented won't work with Rap. The Rap parmnum is one less.
|
|
|
|
nFieldInfo = (nParmNum == PARMNUM_ALL) ? nParmNum : nParmNum - 1;
|
|
|
|
nErr = MxMapSetinfoBuffer(&pbBuffer, &pmxsavlst,
|
|
pszDesc_chardevQ_info_1_setinfo,
|
|
pszDesc_chardevQ_info_1, nFieldInfo);
|
|
if (nErr)
|
|
{
|
|
MxFreeUnicodeVector(apwsz, 2);
|
|
return (WORD)nErr;
|
|
}
|
|
|
|
nLevelNew = MxCalcNewInfoFromOldParm(nLevel, nParmNum);
|
|
nRes = NetCharDevQSetInfo(apwsz[0], apwsz[1], nLevelNew, pbBuffer, nParmNum, NULL);
|
|
|
|
nErr = MxRestoreSetinfoBuffer(&pbBuffer, pmxsavlst,
|
|
pszDesc_chardevQ_info_1_setinfo, nFieldInfo);
|
|
if (nErr) // big trouble - restore may not have worked.
|
|
{
|
|
MxFreeUnicodeVector(apwsz, 2);
|
|
return (WORD)nErr;
|
|
}
|
|
pmxsavlst = NULL;
|
|
MxFreeUnicodeVector(apwsz, 2);
|
|
|
|
return LOWORD(nRes);
|
|
#endif
|
|
}
|
|
|
|
#else
|
|
|
|
WORD
|
|
MNetCharDevEnum(
|
|
LPSTR pszServer,
|
|
DWORD nLevel,
|
|
LPBYTE * ppbBuffer,
|
|
DWORD * pcEntriesRead)
|
|
{
|
|
#if defined(DISABLE_CHDEV_MAPI)
|
|
return PDummyApi(
|
|
"%s,%lu,%lx,%lx",
|
|
"MNetCharDevEnum",
|
|
pszServer,
|
|
nLevel,
|
|
ppbBuffer,
|
|
pcEntriesRead);
|
|
#else
|
|
DWORD cTotalAvail;
|
|
|
|
return(LOWORD(NetCharDevEnum(pszServer, pszLevel, ppbBuffer,
|
|
MAXPREFERREDLENGTH, pcEntriesRead, &cTotalAvail, NULL)));
|
|
#endif
|
|
}
|
|
|
|
WORD
|
|
MNetCharDevQEnum(
|
|
LPSTR pszServer,
|
|
LPSTR pszUserName,
|
|
DWORD nLevel,
|
|
LPBYTE * ppbBuffer,
|
|
DWORD * pcEntriesRead)
|
|
{
|
|
#if defined(DISABLE_CHDEV_MAPI)
|
|
return PDummyApi(
|
|
"%s,%s,%lu,%lx,%lx",
|
|
"MNetCharDevQEnum",
|
|
pszServer,
|
|
pszUserName,
|
|
nLevel,
|
|
ppbBuffer,
|
|
pcEntriesRead);
|
|
#else
|
|
DWORD cTotalAvail;
|
|
|
|
return(LOWORD(NetCharDevQEnum(pszServer, pszUserName, nLevel, ppbBuffer,
|
|
MAXPREFERREDLENGTH, pcEntriesRead, &cTotalAvail, NULL)));
|
|
#endif
|
|
}
|
|
|
|
#endif // def UNICODE
|