windows-nt/Source/XPSP1/NT/termsrv/reskit/smc/tclient/lib/scfuncsa.c
2020-09-26 16:20:57 +08:00

299 lines
5.9 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
* File name:
* scfuncsa.c
* Contents:
* Ascii version of the functions exported by scfuncs.c
* Used by the perl extension
*
* Copyright (C) 1998-1999 Microsoft Corp.
*
--*/
#include <windows.h>
#include <string.h>
#include <malloc.h>
#define PROTOCOLAPI
#include "protocol.h"
#include "tclient.h"
/*
* External functions definitions
*/
#include "extraexp.h"
/*
* Internal functions definitions
*/
LPWSTR _Ascii2Wide(char *ascii);
/*++
* Function:
* SCConnectExA
* Description:
* Ascii version of SCConnectEx. Converts LPSTR params to LPWSTR
* Arguments:
* same as SCConnect
* Return value:
* the return value of SCConnect
* Called by:
* unknown (exported)
--*/
PROTOCOLAPI
LPCSTR
SMCAPI
SCConnectExA (
char *lpszServerName,
char *lpszUserName,
char *lpszPassword,
char *lpszDomain,
char *lpszShell,
int xResolution,
int yResolution,
int ConnectinFlags,
void **ppConnectData)
{
LPWSTR wszServerName, wszUserName, wszPassword, wszDomain;
LPWSTR wszShell;
LPCSTR rv = NULL;
wszServerName = _Ascii2Wide(lpszServerName);
wszUserName = _Ascii2Wide(lpszUserName);
wszPassword = _Ascii2Wide(lpszPassword);
wszDomain = _Ascii2Wide(lpszDomain);
wszShell = _Ascii2Wide(lpszShell);
if (wszServerName &&
wszUserName &&
wszPassword &&
wszDomain)
rv = SCConnectEx(wszServerName,
wszUserName,
wszPassword,
wszDomain,
wszShell, // NULL is default shell
xResolution,
yResolution,
ConnectinFlags,
ppConnectData);
else
rv = ERR_ALLOCATING_MEMORY;
if (wszServerName)
free(wszServerName);
if (wszUserName)
free(wszUserName);
if (wszPassword)
free(wszPassword);
if (wszDomain)
free(wszDomain);
if (wszShell)
free(wszShell);
return rv;
}
/*++
* Function:
* SCConnectA
* Description:
* Ascii version of SCConnect. Converts LPSTR params to LPWSTR
* Arguments:
* same as SCConnect
* Return value:
* the return value of SCConnect
* Called by:
* !tclntpll.xs
--*/
PROTOCOLAPI
LPCSTR
SMCAPI
SCConnectA (char *lpszServerName,
char *lpszUserName,
char *lpszPassword,
char *lpszDomain,
int xResolution,
int yResolution,
void **ppConnectData)
{
LPWSTR wszServerName, wszUserName, wszPassword, wszDomain;
LPCSTR rv = NULL;
wszServerName = _Ascii2Wide(lpszServerName);
wszUserName = _Ascii2Wide(lpszUserName);
wszPassword = _Ascii2Wide(lpszPassword);
wszDomain = _Ascii2Wide(lpszDomain);
if (wszServerName &&
wszUserName &&
wszPassword &&
wszDomain)
rv = SCConnect(wszServerName,
wszUserName,
wszPassword,
wszDomain,
xResolution,
yResolution,
ppConnectData);
else
rv = ERR_ALLOCATING_MEMORY;
if (wszServerName)
free(wszServerName);
if (wszUserName)
free(wszUserName);
if (wszPassword)
free(wszPassword);
if (wszDomain)
free(wszDomain);
return rv;
}
/*++
* Function:
* SCStartA
* Description:
* Ascii version of SCStart
* Arguments:
* same as SCStart
* Return value:
* return value from SCStart
* Called by:
* !tclntpll.xs
--*/
PROTOCOLAPI
LPCSTR
SMCAPI
SCStartA(void *pConnectData, char *command)
{
LPWSTR wcmd;
LPCSTR rv = NULL;
wcmd = _Ascii2Wide(command);
if (wcmd)
{
rv = SCStart(pConnectData, wcmd);
} else {
rv = ERR_ALLOCATING_MEMORY;
}
if (wcmd)
free(wcmd);
return rv;
}
/*++
* Function:
* SCCheckA
* Description:
* Ascii version of SCCheck
* Arguments:
* same as SCCheck
* Return value:
* return value from SCCheck
* Called by:
* !tclntpll.xs
--*/
PROTOCOLAPI
LPCSTR
SMCAPI
SCCheckA(void *pConnectData, char *command, char *param)
{
LPWSTR wparam;
LPCSTR rv = NULL;
wparam = _Ascii2Wide(param);
if (wparam)
{
rv = SCCheck(pConnectData, command, wparam);
} else {
rv = ERR_ALLOCATING_MEMORY;
}
if (wparam)
free(wparam);
return rv;
}
/*++
* Function:
* SCSendtextAsMsgsA
* Description:
* Ascii version of SCSendtextAsMsgs
* Arguments:
* same as SCSendtextAsMsgs
* Return value:
* return value from SCSendtextAsMsgs
* Called by:
* !tclntpll.xs
--*/
PROTOCOLAPI
LPCSTR
SMCAPI
SCSendtextAsMsgsA(void *pConnectData, char *line)
{
LPWSTR wline;
LPCSTR rv = NULL;
wline = _Ascii2Wide(line);
if (wline)
rv = SCSendtextAsMsgs(pConnectData, wline);
else
rv = ERR_ALLOCATING_MEMORY;
if (wline)
free(wline);
return rv;
}
/*++
* Function:
* _Ascii2Wide
* Description:
* Allocates buffer and converts an ascii string
* to unicode
* Arguments:
* ascii - the input string
* Return value:
* pointer to converted string
* Called by:
* SCConnectA, SCStartA, SCCheckA, SCSendtextAsMsgsA
--*/
LPWSTR _Ascii2Wide(char *ascii)
{
LPWSTR wszWide = NULL;
int wsize, ccLen;
if (!ascii)
goto exitpt;
ccLen = strlen(ascii);
wsize = (ccLen + 1) * sizeof(WCHAR);
wszWide = malloc(wsize);
if (wszWide)
MultiByteToWideChar(
CP_UTF8,
0,
ascii,
-1,
wszWide,
ccLen + 1);
exitpt:
return wszWide;
}