|
|
/*******************************************************************************
* * apisub.c * * RegApi helpers and convertion routines * * Copyright Microsoft Corporation, 1998 * * *******************************************************************************/
/*
* Includes */ #include <windows.h>
#include <stdio.h>
#include <winstaw.h>
#include <regapi.h>
#include <ntsecapi.h>
/*
* General purpose UNICODE <==> ANSI functions */ VOID UnicodeToAnsi( CHAR *, ULONG, WCHAR * ); VOID AnsiToUnicode( WCHAR *, ULONG, CHAR * );
/*
* Reg Create helpers */ LONG SetNumValue( BOOLEAN, HKEY, LPWSTR, DWORD ); LONG SetNumValueEx( BOOLEAN, HKEY, LPWSTR, DWORD, DWORD ); LONG SetStringValue( BOOLEAN, HKEY, LPWSTR, LPWSTR ); LONG SetStringValueEx( BOOLEAN, HKEY, LPWSTR, DWORD, LPWSTR ); DWORD SetStringInLSA( LPWSTR, LPWSTR );
/*
* Reg Query helpers */ DWORD GetNumValue( HKEY, LPWSTR, DWORD ); DWORD GetNumValueEx( HKEY, LPWSTR, DWORD, DWORD ); LONG GetStringValue( HKEY, LPWSTR, LPWSTR, LPWSTR, DWORD ); LONG GetStringValueEx( HKEY, LPWSTR, DWORD, LPWSTR, LPWSTR, DWORD ); DWORD GetStringFromLSA( LPWSTR, LPWSTR, DWORD );
/*
* LSA helpers */ void InitLsaString(LPWSTR String, PLSA_UNICODE_STRING lusString); NTSTATUS GetLSAPolicyHandle(DWORD , PLSA_HANDLE );
/*
* Pd conversion helpers. */ VOID PdConfigU2A( PPDCONFIGA, PPDCONFIGW ); VOID PdConfigA2U( PPDCONFIGW, PPDCONFIGA ); VOID PdConfig2U2A( PPDCONFIG2A, PPDCONFIG2W ); VOID PdConfig2A2U( PPDCONFIG2W, PPDCONFIG2A ); VOID PdConfig3U2A( PPDCONFIG3A, PPDCONFIG3W ); VOID PdConfig3A2U( PPDCONFIG3W, PPDCONFIG3A ); VOID PdParamsU2A( PPDPARAMSA, PPDPARAMSW ); VOID PdParamsA2U( PPDPARAMSW, PPDPARAMSA ); VOID AsyncConfigU2A ( PASYNCCONFIGA, PASYNCCONFIGW ); VOID AsyncConfigA2U ( PASYNCCONFIGW, PASYNCCONFIGA ); VOID NetworkConfigU2A ( PNETWORKCONFIGA, PNETWORKCONFIGW ); VOID NetworkConfigA2U ( PNETWORKCONFIGW, PNETWORKCONFIGA ); VOID NasiConfigU2A ( PNASICONFIGA, PNASICONFIGW ); VOID NasiConfigA2U ( PNASICONFIGW, PNASICONFIGA ); VOID OemTdConfigU2A ( POEMTDCONFIGA, POEMTDCONFIGW ); VOID OemTdConfigA2U ( POEMTDCONFIGW, POEMTDCONFIGA );
/*
* WinStation conversion helpers (regapi). */ VOID WinStationCreateU2A( PWINSTATIONCREATEA, PWINSTATIONCREATEW ); VOID WinStationCreateA2U( PWINSTATIONCREATEW, PWINSTATIONCREATEA ); VOID WinStationConfigU2A( PWINSTATIONCONFIGA, PWINSTATIONCONFIGW ); VOID WinStationConfigA2U( PWINSTATIONCONFIGW, PWINSTATIONCONFIGA ); VOID UserConfigU2A( PUSERCONFIGA, PUSERCONFIGW ); VOID UserConfigA2U( PUSERCONFIGW, PUSERCONFIGA );
/*
* WinStation conversion helpers (winstapi). */ VOID WinStationPrinterU2A( PWINSTATIONPRINTERA, PWINSTATIONPRINTERW ); VOID WinStationPrinterA2U( PWINSTATIONPRINTERW, PWINSTATIONPRINTERA ); VOID WinStationInformationU2A( PWINSTATIONINFORMATIONA, PWINSTATIONINFORMATIONW ); VOID WinStationInformationA2U( PWINSTATIONINFORMATIONW, PWINSTATIONINFORMATIONA ); VOID WinStationClientU2A( PWINSTATIONCLIENTA, PWINSTATIONCLIENTW ); VOID WinStationProductIdU2A( PWINSTATIONPRODIDA, PWINSTATIONPRODIDW );
/*
* Wd conversion helpers. */ VOID WdConfigU2A( PWDCONFIGA, PWDCONFIGW ); VOID WdConfigA2U( PWDCONFIGW, PWDCONFIGA );
/*
* Cd conversion helpers. */ VOID CdConfigU2A( PCDCONFIGA, PCDCONFIGW ); VOID CdConfigA2U( PCDCONFIGW, PCDCONFIGA );
/*
* procedures used (not defined here) */ VOID RtlUnicodeToMultiByteN( LPSTR, ULONG, PULONG, LPWSTR, ULONG ); VOID RtlMultiByteToUnicodeN( LPWSTR, ULONG, PULONG, LPSTR, ULONG );
/*******************************************************************************
* * UnicodeToAnsi * * convert a UNICODE (WCHAR) string into an ANSI (CHAR) string * * ENTRY: * * pAnsiString (output) * buffer to place ANSI string into * lAnsiMax (input) * maximum number of BYTES to write into pAnsiString (sizeof the * pAnsiString buffer) * pUnicodeString (input) * UNICODE string to convert * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID UnicodeToAnsi( CHAR * pAnsiString, ULONG lAnsiMax, WCHAR * pUnicodeString ) { ULONG ByteCount;
RtlUnicodeToMultiByteN( pAnsiString, lAnsiMax, &ByteCount, pUnicodeString, ((wcslen(pUnicodeString) + 1) << 1) ); }
/*******************************************************************************
* * AnsiToUnicode * * convert an ANSI (CHAR) string into a UNICODE (WCHAR) string * * ENTRY: * * pUnicodeString (output) * buffer to place UNICODE string into * lUnicodeMax (input) * maximum number of BYTES to write into pUnicodeString (sizeof the * pUnicodeString buffer). * pAnsiString (input) * ANSI string to convert * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID AnsiToUnicode( WCHAR * pUnicodeString, ULONG lUnicodeMax, CHAR * pAnsiString ) { ULONG ByteCount;
RtlMultiByteToUnicodeN( pUnicodeString, lUnicodeMax, &ByteCount, pAnsiString, (strlen(pAnsiString) + 1) ); }
/*******************************************************************************
* * SetNumValue * * Set numeric (DWORD) value in registry * * ENTRY: * * bSetValue (input) * TRUE to set value; FALSE to delete from registry * Handle (input) * registry handle * ValueName (input) * name of registry value to set * ValueData (input) * data (DWORD) for registry value to set * * EXIT: * status from RegDeleteValue or RegSetValueEx * ******************************************************************************/
LONG SetNumValue( BOOLEAN bSetValue, HKEY Handle, LPWSTR ValueName, DWORD ValueData ) { if ( bSetValue ) return( RegSetValueEx( Handle, ValueName, 0, REG_DWORD, (BYTE *)&ValueData, sizeof(DWORD) ) ); else return( RegDeleteValue( Handle, ValueName ) ); }
/*******************************************************************************
* * SetNumValueEx * * Set numeric (DWORD) value in registry (for use with arrays) * * ENTRY: * * bSetValue (input) * TRUE to set value; FALSE to delete from registry * Handle (input) * registry handle * ValueName (input) * name of registry value to set * Index (input) * Index of value (array index) * ValueData (input) * data (DWORD) for registry value to set * * EXIT: * status from SetNumValue * ******************************************************************************/
LONG SetNumValueEx( BOOLEAN bSetValue, HKEY Handle, LPWSTR ValueName, DWORD Index, DWORD ValueData ) { WCHAR Name[MAX_REGKEYWORD];
if ( Index > 0 ) swprintf( Name, L"%s%u", ValueName, Index ); else wcscpy( Name, ValueName );
return( SetNumValue( bSetValue, Handle, Name, ValueData ) ); }
/*******************************************************************************
* * SetStringValue * * Set string value in registry * * ENTRY: * * bSetValue (input) * TRUE to set value; FALSE to delete from registry * Handle (input) * registry handle * ValueName (input) * name of registry value to set * pValueData (input) * data (string) for registry value to set * * EXIT: * status from RegDeleteValue or RegSetValueEx * ******************************************************************************/
LONG SetStringValue( BOOLEAN bSetValue, HKEY Handle, LPWSTR ValueName, LPWSTR pValueData ) { if ( bSetValue ) return( RegSetValueEx( Handle, ValueName, 0, REG_SZ, (BYTE *)pValueData, (wcslen(pValueData)+1)<<1 ) ); else return( RegDeleteValue( Handle, ValueName ) ); }
/*******************************************************************************
* * SetStringValueEx * * Set string value in registry (for use with arrays) * * ENTRY: * * bSetValue (input) * TRUE to set value; FALSE to delete from registry * Handle (input) * registry handle * ValueName (input) * name of registry value to set * Index (input) * Index of value (array index) * pValueData (input) * data (string) for registry value to set * * EXIT: * status from SetStringValue * ******************************************************************************/
LONG SetStringValueEx( BOOLEAN bSetValue, HKEY Handle, LPWSTR ValueName, DWORD Index, LPWSTR pValueData ) { WCHAR Name[MAX_REGKEYWORD];
if ( Index > 0 ) swprintf( Name, L"%s%u", ValueName, Index ); else wcscpy( Name, ValueName );
return( SetStringValue( bSetValue, Handle, Name, pValueData ) ); }
/*******************************************************************************
* * SetStringInLSA * * Set password in LSA secret * * ENTRY: * * pwszString (input) * password (string) secret to be stored in LSA, it's ok if this is NULL * * EXIT: * status from LsaStorePrivateData * ******************************************************************************/
DWORD SetStringInLSA(LPWSTR pwszStringKeyName, LPWSTR pwszString) { LSA_HANDLE hLSAPolicy = NULL; LSA_UNICODE_STRING lusName; LSA_UNICODE_STRING lusSecret; NTSTATUS ntsResult;
// Get the policy handle
ntsResult = GetLSAPolicyHandle(POLICY_CREATE_SECRET, &hLSAPolicy); if (ntsResult != ERROR_SUCCESS) { goto Cleanup; }
// Create UNICODE string for the secret key name
InitLsaString(pwszStringKeyName, &lusName);
// Create UNICODE string for the secret
InitLsaString(pwszString, &lusSecret);
// Store the secret in LSA
ntsResult = LsaStorePrivateData(hLSAPolicy, &lusName, &lusSecret);
Cleanup: // close lsa handle
if (hLSAPolicy != NULL) LsaClose(hLSAPolicy);
// Convert NTSTATUS result to Windows error code
return LsaNtStatusToWinError(ntsResult); }
/*******************************************************************************
* * InitLsaString * * Initialize LSA unicode string. * * ENTRY: * * String : (IN) String to initialize LsaString. * lusString (IN/OUT): Pointer to LSA_UNICODE_STRING to be initialized. * * EXIT: * status from LsaStorePrivateData * ******************************************************************************/
void InitLsaString(LPWSTR String, PLSA_UNICODE_STRING lusString) { // Create UNICODE string for the passed in string
if (String == NULL) { lusString->Buffer = NULL; lusString->Length = 0; lusString->MaximumLength = 0; } else { lusString->Buffer = String; lusString->Length = wcslen(String) * sizeof(WCHAR); lusString->MaximumLength = lusString->Length + (2 * sizeof(WCHAR)); } }
/*******************************************************************************
* * GetLSAPolicyHandle * * Create/return a LSA policy handle. * * ENTRY: * * ServerName : Name of server, refer to LsaOpenPolicy(). * DesiredAccess : Desired access level, refer to LsaOpenPolicy(). * PolicyHandle : Return PLSA_HANDLE. * * EXIT: * ERROR_SUCCESS or LSA error code * ******************************************************************************/
NTSTATUS GetLSAPolicyHandle(DWORD dwDesiredAccess, PLSA_HANDLE phLSAPolicy) { NTSTATUS ntsResult; LSA_OBJECT_ATTRIBUTES ObjectAttributes; ZeroMemory(&ObjectAttributes, sizeof(ObjectAttributes)); // Open handle to the Policy object for the local system
ntsResult = LsaOpenPolicy(NULL, &ObjectAttributes, dwDesiredAccess, phLSAPolicy); return ntsResult; }
/*******************************************************************************
* * GetStringFromLSA * * Get password secret from LSA * * ENTRY: * * pwszString (output) * string stored in LSA * DWORD dwBuffLen (in) * length of passed in buffer size * * EXIT: * status from LsaRetrievePrivateData * ******************************************************************************/
DWORD GetStringFromLSA(LPWSTR pwszStringKeyName, LPWSTR pwszString, DWORD dwBuffLen) { LSA_HANDLE hLSAPolicy = NULL; LSA_UNICODE_STRING lusName; PLSA_UNICODE_STRING plusSecret = NULL; NTSTATUS ntsResult; DWORD dwStatus = S_OK;
// Get the policy handle
ntsResult = GetLSAPolicyHandle(POLICY_GET_PRIVATE_INFORMATION, &hLSAPolicy); if (ntsResult != ERROR_SUCCESS) { // Convert result to a window status
dwStatus = LsaNtStatusToWinError(ntsResult); goto Cleanup; }
// Create UNICODE string for the secret key name
InitLsaString(pwszStringKeyName, &lusName);
// Retrieve the secret from LSA
ntsResult = LsaRetrievePrivateData(hLSAPolicy, &lusName, &plusSecret); if (ntsResult != ERROR_SUCCESS) { // Convert result to a window status
dwStatus = LsaNtStatusToWinError(ntsResult); goto Cleanup; } // It's possible the return string is NULL (this means there is no
// current value) so we'll set the return string to NULL and leave
if (plusSecret == NULL) { pwszString = NULL; goto Cleanup; }
// Make sure the size of buffer is large enough
if (dwBuffLen > (plusSecret->Length / sizeof(WCHAR))) { dwBuffLen = plusSecret->Length / sizeof(WCHAR); }
// Copy over the password to the output buffer and null terminate it
wcsncpy(pwszString, plusSecret->Buffer, dwBuffLen); pwszString[dwBuffLen] = L'\0';
Cleanup: if (plusSecret != NULL) LsaFreeMemory(plusSecret);
// close lsa handle
if (hLSAPolicy != NULL) LsaClose(hLSAPolicy);
return dwStatus; }
/*******************************************************************************
* * GetNumValue * * get numeric (DWORD) value from registry * * ENTRY: * * Handle (input) * registry handle * ValueName (input) * name of registry value to query * DefaultData (input) * default value to return if registry value name does not exist * * EXIT: * registry value (DWORD) * ******************************************************************************/
DWORD GetNumValue( HKEY Handle, LPWSTR ValueName, DWORD DefaultData ) { LONG Status; DWORD ValueType; DWORD ValueData; DWORD ValueSize = sizeof(DWORD);
Status = RegQueryValueEx( Handle, ValueName, NULL, &ValueType, (LPBYTE) &ValueData, &ValueSize ); if ( Status != ERROR_SUCCESS ) ValueData = DefaultData;
return( ValueData ); }
/*******************************************************************************
* * GetNumValueEx * * get numeric (DWORD) value from registry (for use with arrays) * * ENTRY: * * Handle (input) * registry handle * ValueName (input) * name of registry value to query * Index (input) * Index of value (array index) * DefaultData (input) * default value to return if registry value name does not exist * * EXIT: * registry value (DWORD) * ******************************************************************************/
DWORD GetNumValueEx( HKEY Handle, LPWSTR ValueName, DWORD Index, DWORD DefaultData ) { WCHAR Name[MAX_REGKEYWORD];
if ( Index > 0 ) swprintf( Name, L"%s%u", ValueName, Index ); else wcscpy( Name, ValueName );
return( GetNumValue( Handle, Name, DefaultData ) ); }
/*******************************************************************************
* * GetStringValue * * get string value from registry * * ENTRY: * * Handle (input) * registry handle * ValueName (input) * name of registry value to query * DefaultData (input) * default value to return if registry value name does not exist * pValueData (output) * pointer to buffer to store returned string * MaxValueSize (input) * max length of pValueData buffer * * EXIT: * nothing * ******************************************************************************/
LONG GetStringValue( HKEY Handle, LPWSTR ValueName, LPWSTR DefaultData, LPWSTR pValueData, DWORD MaxValueSize ) { LONG Status; DWORD ValueType; DWORD ValueSize = MaxValueSize << 1;
Status = RegQueryValueEx( Handle, ValueName, NULL, &ValueType, (LPBYTE) pValueData, &ValueSize ); if ( Status != ERROR_SUCCESS || ValueSize == sizeof(UNICODE_NULL) ) { if ( DefaultData ) wcscpy( pValueData, DefaultData ); else pValueData[0] = 0; } else { if ( ValueType != REG_SZ ) { pValueData[0] = 0; return( ERROR_INVALID_DATATYPE ); } } return( ERROR_SUCCESS ); }
/*******************************************************************************
* * GetStringValueEx * * get string value from registry (for use with arrays) * * ENTRY: * * Handle (input) * registry handle * ValueName (input) * name of registry value to query * Index (input) * Index of value (array index) * DefaultData (input) * default value to return if registry value name does not exist * pValueData (output) * pointer to buffer to store returned string * MaxValueSize (input) * max length of pValueData buffer * * EXIT: * nothing * ******************************************************************************/
LONG GetStringValueEx( HKEY Handle, LPWSTR ValueName, DWORD Index, LPWSTR DefaultData, LPWSTR pValueData, DWORD MaxValueSize ) { WCHAR Name[MAX_REGKEYWORD];
if ( Index > 0 ) swprintf( Name, L"%s%u", ValueName, Index ); else wcscpy( Name, ValueName );
return( GetStringValue( Handle, Name, DefaultData, pValueData, MaxValueSize ) ); }
/*******************************************************************************
* * PdConfigU2A (UNICODE to ANSI) * * copies PDCONFIGW elements to PDCONFIGA elements * * ENTRY: * pPdConfigA (output) * points to PDCONFIGA structure to copy to * * pPdConfigW (input) * points to PDCONFIGW structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID PdConfigU2A( PPDCONFIGA pPdConfigA, PPDCONFIGW pPdConfigW ) { PdConfig2U2A( &(pPdConfigA->Create), &(pPdConfigW->Create) ); PdParamsU2A( &(pPdConfigA->Params), &(pPdConfigW->Params) ); }
/*******************************************************************************
* * PdConfigA2U (ANSI to UNICODE) * * copies PDCONFIGA elements to PDCONFIGW elements * * ENTRY: * pPdConfigW (output) * points to PDCONFIGW structure to copy to * * pPdConfigA (input) * points to PDCONFIGA structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID PdConfigA2U( PPDCONFIGW pPdConfigW, PPDCONFIGA pPdConfigA ) { PdConfig2A2U( &(pPdConfigW->Create), &(pPdConfigA->Create) ); PdParamsA2U( &(pPdConfigW->Params), &(pPdConfigA->Params) ); }
/*******************************************************************************
* * PdConfig2U2A (UNICODE to ANSI) * * copies PDCONFIG2W elements to PDCONFIG2A elements * * ENTRY: * pPdConfig2A (output) * points to PDCONFIG2A structure to copy to * * pPdConfig2W (input) * points to PDCONFIG2W structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID PdConfig2U2A( PPDCONFIG2A pPdConfig2A, PPDCONFIG2W pPdConfig2W ) { UnicodeToAnsi( pPdConfig2A->PdName, sizeof(pPdConfig2A->PdName), pPdConfig2W->PdName );
pPdConfig2A->SdClass = pPdConfig2W->SdClass;
UnicodeToAnsi( pPdConfig2A->PdDLL, sizeof(pPdConfig2A->PdDLL), pPdConfig2W->PdDLL );
pPdConfig2A->PdFlag = pPdConfig2W->PdFlag;
pPdConfig2A->OutBufLength = pPdConfig2W->OutBufLength; pPdConfig2A->OutBufCount = pPdConfig2W->OutBufCount; pPdConfig2A->OutBufDelay = pPdConfig2W->OutBufDelay; pPdConfig2A->InteractiveDelay = pPdConfig2W->InteractiveDelay; pPdConfig2A->PortNumber = pPdConfig2W->PortNumber; pPdConfig2A->KeepAliveTimeout = pPdConfig2W->KeepAliveTimeout; }
/*******************************************************************************
* * PdConfig2A2U (ANSI to UNICODE) * * copies PDCONFIG2A elements to PDCONFIG2W elements * * ENTRY: * pPdConfig2W (output) * points to PDCONFIG2W structure to copy to * * pPdConfig2A (input) * points to PDCONFIG2A structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID PdConfig2A2U( PPDCONFIG2W pPdConfig2W, PPDCONFIG2A pPdConfig2A ) { AnsiToUnicode( pPdConfig2W->PdName, sizeof(pPdConfig2W->PdName), pPdConfig2A->PdName );
pPdConfig2W->SdClass = pPdConfig2A->SdClass;
AnsiToUnicode( pPdConfig2W->PdDLL, sizeof(pPdConfig2W->PdDLL), pPdConfig2A->PdDLL );
pPdConfig2W->PdFlag = pPdConfig2A->PdFlag;
pPdConfig2W->OutBufLength = pPdConfig2A->OutBufLength; pPdConfig2W->OutBufCount = pPdConfig2A->OutBufCount; pPdConfig2W->OutBufDelay = pPdConfig2A->OutBufDelay; pPdConfig2W->InteractiveDelay = pPdConfig2A->InteractiveDelay; pPdConfig2W->PortNumber = pPdConfig2A->PortNumber; pPdConfig2W->KeepAliveTimeout = pPdConfig2A->KeepAliveTimeout; }
/*******************************************************************************
* * PdConfig3U2A (UNICODE to ANSI) * * copies PDCONFIG3W elements to PDCONFIG3A elements * * ENTRY: * pPdConfig3A (output) * points to PDCONFIG3A structure to copy to * * pPdConfig3W (input) * points to PDCONFIG3W structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID PdConfig3U2A( PPDCONFIG3A pPdConfig3A, PPDCONFIG3W pPdConfig3W ) { PdConfig2U2A( &(pPdConfig3A->Data), &(pPdConfig3W->Data) );
UnicodeToAnsi( pPdConfig3A->ServiceName, sizeof(pPdConfig3A->ServiceName), pPdConfig3W->ServiceName );
UnicodeToAnsi( pPdConfig3A->ConfigDLL, sizeof(pPdConfig3A->ConfigDLL), pPdConfig3W->ConfigDLL ); }
/*******************************************************************************
* * PdConfig3A2U (ANSI to UNICODE) * * copies PDCONFIG3A elements to PDCONFIG3W elements * * ENTRY: * pPdConfig3W (output) * points to PDCONFIG3W structure to copy to * * pPdConfig3A (input) * points to PDCONFIG3A structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID PdConfig3A2U( PPDCONFIG3W pPdConfig3W, PPDCONFIG3A pPdConfig3A ) { PdConfig2A2U( &(pPdConfig3W->Data), &(pPdConfig3A->Data) );
AnsiToUnicode( pPdConfig3W->ServiceName, sizeof(pPdConfig3W->ServiceName), pPdConfig3A->ServiceName );
AnsiToUnicode( pPdConfig3W->ConfigDLL, sizeof(pPdConfig3W->ConfigDLL), pPdConfig3A->ConfigDLL ); }
/*******************************************************************************
* * PdParamsU2A (UNICODE to ANSI) * * copies PDPARAMSW elements to PDPARAMSA elements * * ENTRY: * pPdParamsA (output) * points to PDPARAMSA structure to copy to * * pPdParamsW (input) * points to PDPARAMSW structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID PdParamsU2A( PPDPARAMSA pPdParamsA, PPDPARAMSW pPdParamsW ) { pPdParamsA->SdClass = pPdParamsW->SdClass;
switch ( pPdParamsW->SdClass ) {
case SdNetwork: NetworkConfigU2A( &(pPdParamsA->Network), &(pPdParamsW->Network) ); break;
case SdNasi: NasiConfigU2A( &(pPdParamsA->Nasi), &(pPdParamsW->Nasi) ); break;
case SdAsync: AsyncConfigU2A( &(pPdParamsA->Async), &(pPdParamsW->Async) ); break;
case SdOemTransport: OemTdConfigU2A( &(pPdParamsA->OemTd), &(pPdParamsW->OemTd) ); break; } }
/*******************************************************************************
* * PdParamsA2U (ANSI to UNICODE) * * copies PDPARAMSA elements to PDPARAMSW elements * * ENTRY: * pPdParamsW (output) * points to PDPARAMSW structure to copy to * * pPdParamsA (input) * points to PDPARAMSA structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID PdParamsA2U( PPDPARAMSW pPdParamsW, PPDPARAMSA pPdParamsA ) { pPdParamsW->SdClass = pPdParamsA->SdClass;
switch ( pPdParamsA->SdClass ) {
case SdNetwork: NetworkConfigA2U( &(pPdParamsW->Network), &(pPdParamsA->Network) ); break;
case SdNasi: NasiConfigA2U( &(pPdParamsW->Nasi), &(pPdParamsA->Nasi) ); break;
case SdAsync: AsyncConfigA2U( &(pPdParamsW->Async), &(pPdParamsA->Async) ); break;
case SdOemTransport: OemTdConfigA2U( &(pPdParamsW->OemTd), &(pPdParamsA->OemTd) ); break; } }
/*******************************************************************************
* * NetworkConfigU2A (UNICODE to ANSI) * * copies NETWORKCONFIGW elements to NETWORKCONFIGA elements * * ENTRY: * pNetworkConfigA (output) * points to NETWORKCONFIGA structure to copy to * * pNetworkConfigW (input) * points to NETWORKCONFIGW structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID NetworkConfigU2A( PNETWORKCONFIGA pNetworkConfigA, PNETWORKCONFIGW pNetworkConfigW ) { pNetworkConfigA->LanAdapter = pNetworkConfigW->LanAdapter;
UnicodeToAnsi( pNetworkConfigA->NetworkName, sizeof(pNetworkConfigA->NetworkName), pNetworkConfigW->NetworkName );
pNetworkConfigA->Flags = pNetworkConfigW->Flags; }
/*******************************************************************************
* * NetworkConfigA2U (ANSI to UNICODE) * * copies NETWORKCONFIGA elements to NETWORKCONFIGW elements * * ENTRY: * pNetworkConfigW (output) * points to NETWORKCONFIGW structure to copy to * * pNetworkConfigW (input) * points to NETWORKCONFIGA structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID NetworkConfigA2U( PNETWORKCONFIGW pNetworkConfigW, PNETWORKCONFIGA pNetworkConfigA ) { pNetworkConfigW->LanAdapter = pNetworkConfigA->LanAdapter;
AnsiToUnicode( pNetworkConfigW->NetworkName, sizeof(pNetworkConfigW->NetworkName), pNetworkConfigA->NetworkName );
pNetworkConfigW->Flags = pNetworkConfigA->Flags; }
/*******************************************************************************
* * AsyncConfigU2A (UNICODE to ANSI) * * copies ASYNCCONFIGW elements to ASYNCCONFIGA elements * * ENTRY: * pAsyncConfigA (output) * points to ASYNCCONFIGA structure to copy to * * pAsyncConfigW (input) * points to ASYNCCONFIGW structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID AsyncConfigU2A( PASYNCCONFIGA pAsyncConfigA, PASYNCCONFIGW pAsyncConfigW ) { UnicodeToAnsi( pAsyncConfigA->DeviceName, sizeof(pAsyncConfigA->DeviceName), pAsyncConfigW->DeviceName );
UnicodeToAnsi( pAsyncConfigA->ModemName, sizeof(pAsyncConfigA->ModemName), pAsyncConfigW->ModemName );
pAsyncConfigA->BaudRate = pAsyncConfigW->BaudRate; pAsyncConfigA->Parity = pAsyncConfigW->Parity; pAsyncConfigA->StopBits = pAsyncConfigW->StopBits; pAsyncConfigA->ByteSize = pAsyncConfigW->ByteSize; pAsyncConfigA->fEnableDsrSensitivity = pAsyncConfigW->fEnableDsrSensitivity; pAsyncConfigA->fConnectionDriver = pAsyncConfigW->fConnectionDriver;
pAsyncConfigA->FlowControl = pAsyncConfigW->FlowControl;
pAsyncConfigA->Connect = pAsyncConfigW->Connect; }
/*******************************************************************************
* * AsyncConfigA2U (ANSI to UNICODE) * * copies ASYNCCONFIGA elements to ASYNCCONFIGW elements * * ENTRY: * pAsyncConfigW (output) * points to ASYNCCONFIGW structure to copy to * * pAsyncConfigA (input) * points to ASYNCCONFIGA structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID AsyncConfigA2U( PASYNCCONFIGW pAsyncConfigW, PASYNCCONFIGA pAsyncConfigA ) { AnsiToUnicode( pAsyncConfigW->DeviceName, sizeof(pAsyncConfigW->DeviceName), pAsyncConfigA->DeviceName );
AnsiToUnicode( pAsyncConfigW->ModemName, sizeof(pAsyncConfigW->ModemName), pAsyncConfigA->ModemName );
pAsyncConfigW->BaudRate = pAsyncConfigA->BaudRate; pAsyncConfigW->Parity = pAsyncConfigA->Parity; pAsyncConfigW->StopBits = pAsyncConfigA->StopBits; pAsyncConfigW->ByteSize = pAsyncConfigA->ByteSize; pAsyncConfigW->fEnableDsrSensitivity = pAsyncConfigA->fEnableDsrSensitivity;
pAsyncConfigW->FlowControl = pAsyncConfigA->FlowControl;
pAsyncConfigW->Connect = pAsyncConfigA->Connect; }
/*******************************************************************************
* * NasiConfigU2A (UNICODE to ANSI) * * copies NASICONFIGW elements to NASICONFIGA elements * * ENTRY: * pNasiConfigA (output) * points to NASICONFIGA structure to copy to * * pNasiConfigW (input) * points to NASICONFIGW structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID NasiConfigU2A( PNASICONFIGA pNasiConfigA, PNASICONFIGW pNasiConfigW ) { UnicodeToAnsi( pNasiConfigA->SpecificName, sizeof(pNasiConfigA->SpecificName), pNasiConfigW->SpecificName ); UnicodeToAnsi( pNasiConfigA->UserName, sizeof(pNasiConfigA->UserName), pNasiConfigW->UserName ); UnicodeToAnsi( pNasiConfigA->PassWord, sizeof(pNasiConfigA->PassWord), pNasiConfigW->PassWord ); UnicodeToAnsi( pNasiConfigA->SessionName, sizeof(pNasiConfigA->SessionName), pNasiConfigW->SessionName ); UnicodeToAnsi( pNasiConfigA->FileServer, sizeof(pNasiConfigA->FileServer), pNasiConfigW->FileServer );
pNasiConfigA->GlobalSession = pNasiConfigW->GlobalSession; }
/*******************************************************************************
* * NasiConfigA2U (ANSI to UNICODE) * * copies NASICONFIGA elements to NASICONFIGW elements * * ENTRY: * pNasiConfigW (output) * points to NASICONFIGW structure to copy to * * pNasiConfigA (input) * points to NASICONFIGA structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID NasiConfigA2U( PNASICONFIGW pNasiConfigW, PNASICONFIGA pNasiConfigA ) { AnsiToUnicode( pNasiConfigW->SpecificName, sizeof(pNasiConfigW->SpecificName), pNasiConfigA->SpecificName ); AnsiToUnicode( pNasiConfigW->UserName, sizeof(pNasiConfigW->UserName), pNasiConfigA->UserName ); AnsiToUnicode( pNasiConfigW->PassWord, sizeof(pNasiConfigW->PassWord), pNasiConfigA->PassWord ); AnsiToUnicode( pNasiConfigW->SessionName, sizeof(pNasiConfigW->SessionName), pNasiConfigA->SessionName ); AnsiToUnicode( pNasiConfigW->FileServer, sizeof(pNasiConfigW->FileServer), pNasiConfigA->FileServer );
pNasiConfigW->GlobalSession = pNasiConfigA->GlobalSession; }
/*******************************************************************************
* * OemTdConfigU2A (UNICODE to ANSI) * * copies OEMTDCONFIGW elements to OEMTDCONFIGA elements * * ENTRY: * pOemTdConfigA (output) * points to OEMTDCONFIGA structure to copy to * * pOemTdConfigW (input) * points to OEMTDCONFIGW structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID OemTdConfigU2A( POEMTDCONFIGA pOemTdConfigA, POEMTDCONFIGW pOemTdConfigW ) { pOemTdConfigA->Adapter = pOemTdConfigW->Adapter;
UnicodeToAnsi( pOemTdConfigA->DeviceName, sizeof(pOemTdConfigA->DeviceName), pOemTdConfigW->DeviceName );
pOemTdConfigA->Flags = pOemTdConfigW->Flags; }
/*******************************************************************************
* * OemTdConfigA2U (ANSI to Unicode) * * copies OEMTDCONFIGA elements to OEMTDCONFIGW elements * * ENTRY: * pOemTdConfigW (output) * points to OEMTDCONFIGW structure to copy to * * pOemTdConfigA (input) * points to OEMTDCONFIGA structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID OemTdConfigA2U( POEMTDCONFIGW pOemTdConfigW, POEMTDCONFIGA pOemTdConfigA ) { pOemTdConfigW->Adapter = pOemTdConfigA->Adapter;
AnsiToUnicode( pOemTdConfigW->DeviceName, sizeof(pOemTdConfigW->DeviceName), pOemTdConfigA->DeviceName );
pOemTdConfigW->Flags = pOemTdConfigA->Flags; }
/*******************************************************************************
* * WdConfigU2A (UNICODE to ANSI) * * copies WDCONFIGW elements to WDCONFIGA elements * * ENTRY: * pWdConfigA (output) * points to WDCONFIGA structure to copy to * * pWdConfigW (input) * points to WDCONFIGW structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID WdConfigU2A( PWDCONFIGA pWdConfigA, PWDCONFIGW pWdConfigW ) { UnicodeToAnsi( pWdConfigA->WdName, sizeof(pWdConfigA->WdName), pWdConfigW->WdName );
UnicodeToAnsi( pWdConfigA->WdDLL, sizeof(pWdConfigA->WdDLL), pWdConfigW->WdDLL );
UnicodeToAnsi( pWdConfigA->WsxDLL, sizeof(pWdConfigA->WsxDLL), pWdConfigW->WsxDLL );
pWdConfigA->WdFlag = pWdConfigW->WdFlag;
pWdConfigA->WdInputBufferLength = pWdConfigW->WdInputBufferLength;
UnicodeToAnsi( pWdConfigA->CfgDLL, sizeof(pWdConfigA->CfgDLL), pWdConfigW->CfgDLL );
UnicodeToAnsi( pWdConfigA->WdPrefix, sizeof(pWdConfigA->WdPrefix), pWdConfigW->WdPrefix );
}
/*******************************************************************************
* * WdConfigA2U (ANSI to UNICODE) * * copies WDCONFIGA elements to WDCONFIGW elements * * ENTRY: * pWdConfigW (output) * points to WDCONFIGW structure to copy to * * pWdConfigA (input) * points to WDCONFIGA structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID WdConfigA2U( PWDCONFIGW pWdConfigW, PWDCONFIGA pWdConfigA ) { AnsiToUnicode( pWdConfigW->WdName, sizeof(pWdConfigW->WdName), pWdConfigA->WdName );
AnsiToUnicode( pWdConfigW->WdDLL, sizeof(pWdConfigW->WdDLL), pWdConfigA->WdDLL );
AnsiToUnicode( pWdConfigW->WsxDLL, sizeof(pWdConfigW->WsxDLL), pWdConfigA->WsxDLL );
pWdConfigW->WdFlag = pWdConfigA->WdFlag;
pWdConfigW->WdInputBufferLength = pWdConfigA->WdInputBufferLength;
AnsiToUnicode( pWdConfigW->CfgDLL, sizeof(pWdConfigW->CfgDLL), pWdConfigA->CfgDLL );
AnsiToUnicode( pWdConfigW->WdPrefix, sizeof(pWdConfigW->WdPrefix), pWdConfigA->WdPrefix );
}
/*******************************************************************************
* * CdConfigU2A (UNICODE to ANSI) * * copies CDCONFIGW elements to CDCONFIGA elements * * ENTRY: * pCdConfigA (output) * points to CDCONFIGA structure to copy to * * pCdConfigW (input) * points to CDCONFIGW structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID CdConfigU2A( PCDCONFIGA pCdConfigA, PCDCONFIGW pCdConfigW ) { pCdConfigA->CdClass = pCdConfigW->CdClass;
UnicodeToAnsi( pCdConfigA->CdName, sizeof(pCdConfigA->CdName), pCdConfigW->CdName );
UnicodeToAnsi( pCdConfigA->CdDLL, sizeof(pCdConfigA->CdDLL), pCdConfigW->CdDLL );
pCdConfigA->CdFlag = pCdConfigW->CdFlag; }
/*******************************************************************************
* * CdConfigA2U (ANSI to UNICODE) * * copies CDCONFIGA elements to CDCONFIGW elements * * ENTRY: * pCdConfigW (output) * points to CDCONFIGW structure to copy to * * pCdConfigA (input) * points to CDCONFIGA structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID CdConfigA2U( PCDCONFIGW pCdConfigW, PCDCONFIGA pCdConfigA ) { pCdConfigW->CdClass = pCdConfigA->CdClass;
AnsiToUnicode( pCdConfigW->CdName, sizeof(pCdConfigW->CdName), pCdConfigA->CdName );
AnsiToUnicode( pCdConfigW->CdDLL, sizeof(pCdConfigW->CdDLL), pCdConfigA->CdDLL );
pCdConfigW->CdFlag = pCdConfigA->CdFlag; }
/*******************************************************************************
* * WinStationCreateU2A (UNICODE to ANSI) * * copies WINSTATIONCREATEW elements to WINSTATIONCREATEA elements * * ENTRY: * pWinStationCreateA (output) * points to WINSTATIONCREATEA structure to copy to * * pWinStationCreateW (input) * points to WINSTATIONCREATEW structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID WinStationCreateU2A( PWINSTATIONCREATEA pWinStationCreateA, PWINSTATIONCREATEW pWinStationCreateW ) { pWinStationCreateA->fEnableWinStation = pWinStationCreateW->fEnableWinStation; pWinStationCreateA->MaxInstanceCount = pWinStationCreateW->MaxInstanceCount; }
/*******************************************************************************
* * WinStationCreateA2U (ANSI to UNICODE) * * copies WINSTATIONCREATEA elements to WINSTATIONCREATEW elements * * ENTRY: * pWinStationCreateW (output) * points to WINSTATIONCREATEW structure to copy to * * pWinStationCreateA (input) * points to WINSTATIONCREATEA structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID WinStationCreateA2U( PWINSTATIONCREATEW pWinStationCreateW, PWINSTATIONCREATEA pWinStationCreateA ) { pWinStationCreateW->fEnableWinStation = pWinStationCreateA->fEnableWinStation; pWinStationCreateW->MaxInstanceCount = pWinStationCreateA->MaxInstanceCount; }
/*******************************************************************************
* * WinStationConfigU2A (UNICODE to ANSI) * * copies WINSTATIONCONFIGW elements to WINSTATIONCONFIGA elements * * ENTRY: * pWinStationConfigA (output) * points to WINSTATIONCONFIGA structure to copy to * * pWinStationConfigW (input) * points to WINSTATIONCONFIGW structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID WinStationConfigU2A( PWINSTATIONCONFIGA pWinStationConfigA, PWINSTATIONCONFIGW pWinStationConfigW ) { UnicodeToAnsi( pWinStationConfigA->Comment, sizeof(pWinStationConfigA->Comment), pWinStationConfigW->Comment );
UserConfigU2A( &(pWinStationConfigA->User), &(pWinStationConfigW->User) );
RtlCopyMemory( pWinStationConfigA->OEMId, pWinStationConfigW->OEMId, sizeof(pWinStationConfigW->OEMId) ); }
/*******************************************************************************
* * WinStationConfigA2U (ANSI to UNICODE) * * copies WINSTATIONCONFIGA elements to WINSTATIONCONFIGW elements * * ENTRY: * pWinStationConfigW (output) * points to WINSTATIONCONFIGW structure to copy to * * pWinStationConfigA (input) * points to WINSTATIONCONFIGA structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID WinStationConfigA2U( PWINSTATIONCONFIGW pWinStationConfigW, PWINSTATIONCONFIGA pWinStationConfigA ) { AnsiToUnicode( pWinStationConfigW->Comment, sizeof(pWinStationConfigW->Comment), pWinStationConfigA->Comment );
UserConfigA2U( &(pWinStationConfigW->User), &(pWinStationConfigA->User) );
RtlCopyMemory( pWinStationConfigW->OEMId, pWinStationConfigA->OEMId, sizeof(pWinStationConfigA->OEMId) ); }
/*******************************************************************************
* * UserConfigU2A (UNICODE to ANSI) * * copies USERCONFIGW elements to USERCONFIGA elements * * ENTRY: * pUserConfigA (output) * points to USERCONFIGA structure to copy to * * pUserConfigW (input) * points to USERCONFIGW structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID UserConfigU2A( PUSERCONFIGA pUserConfigA, PUSERCONFIGW pUserConfigW ) { pUserConfigA->fInheritAutoLogon = pUserConfigW->fInheritAutoLogon; pUserConfigA->fInheritResetBroken = pUserConfigW->fInheritResetBroken; pUserConfigA->fInheritReconnectSame = pUserConfigW->fInheritReconnectSame; pUserConfigA->fInheritInitialProgram = pUserConfigW->fInheritInitialProgram; pUserConfigA->fInheritCallback = pUserConfigW->fInheritCallback; pUserConfigA->fInheritCallbackNumber = pUserConfigW->fInheritCallbackNumber; pUserConfigA->fInheritShadow = pUserConfigW->fInheritShadow; pUserConfigA->fInheritMaxSessionTime = pUserConfigW->fInheritMaxSessionTime; pUserConfigA->fInheritMaxDisconnectionTime = pUserConfigW->fInheritMaxDisconnectionTime; pUserConfigA->fInheritMaxIdleTime = pUserConfigW->fInheritMaxIdleTime; pUserConfigA->fInheritAutoClient = pUserConfigW->fInheritAutoClient; pUserConfigA->fInheritSecurity = pUserConfigW->fInheritSecurity;
pUserConfigA->fPromptForPassword = pUserConfigW->fPromptForPassword; pUserConfigA->fResetBroken = pUserConfigW->fResetBroken; pUserConfigA->fReconnectSame = pUserConfigW->fReconnectSame; pUserConfigA->fLogonDisabled = pUserConfigW->fLogonDisabled; pUserConfigA->fWallPaperDisabled = pUserConfigW->fWallPaperDisabled; pUserConfigA->fAutoClientDrives = pUserConfigW->fAutoClientDrives; pUserConfigA->fAutoClientLpts = pUserConfigW->fAutoClientLpts; pUserConfigA->fForceClientLptDef = pUserConfigW->fForceClientLptDef; pUserConfigA->fDisableEncryption = pUserConfigW->fDisableEncryption; pUserConfigA->fHomeDirectoryMapRoot = pUserConfigW->fHomeDirectoryMapRoot; pUserConfigA->fUseDefaultGina = pUserConfigW->fUseDefaultGina; pUserConfigA->fCursorBlinkDisabled = pUserConfigW->fCursorBlinkDisabled;
pUserConfigA->fDisableCpm = pUserConfigW->fDisableCpm; pUserConfigA->fDisableCdm = pUserConfigW->fDisableCdm; pUserConfigA->fDisableCcm = pUserConfigW->fDisableCcm; pUserConfigA->fDisableLPT = pUserConfigW->fDisableLPT; pUserConfigA->fDisableClip = pUserConfigW->fDisableClip; pUserConfigA->fDisableExe = pUserConfigW->fDisableExe; pUserConfigA->fDisableCam = pUserConfigW->fDisableCam;
UnicodeToAnsi( pUserConfigA->UserName, sizeof(pUserConfigA->UserName), pUserConfigW->UserName );
UnicodeToAnsi( pUserConfigA->Domain, sizeof(pUserConfigA->Domain), pUserConfigW->Domain );
UnicodeToAnsi( pUserConfigA->Password, sizeof(pUserConfigA->Password), pUserConfigW->Password );
UnicodeToAnsi( pUserConfigA->WorkDirectory, sizeof(pUserConfigA->WorkDirectory), pUserConfigW->WorkDirectory );
UnicodeToAnsi( pUserConfigA->InitialProgram, sizeof(pUserConfigA->InitialProgram), pUserConfigW->InitialProgram );
UnicodeToAnsi( pUserConfigA->CallbackNumber, sizeof(pUserConfigA->CallbackNumber), pUserConfigW->CallbackNumber );
pUserConfigA->Callback = pUserConfigW->Callback; pUserConfigA->Shadow = pUserConfigW->Shadow; pUserConfigA->MaxConnectionTime = pUserConfigW->MaxConnectionTime; pUserConfigA->MaxDisconnectionTime = pUserConfigW->MaxDisconnectionTime; pUserConfigA->MaxIdleTime = pUserConfigW->MaxIdleTime; pUserConfigA->KeyboardLayout = pUserConfigW->KeyboardLayout; pUserConfigA->MinEncryptionLevel = pUserConfigW->MinEncryptionLevel;
UnicodeToAnsi( pUserConfigA->WFProfilePath, sizeof(pUserConfigA->WFProfilePath), pUserConfigW->WFProfilePath );
UnicodeToAnsi( pUserConfigA->WFHomeDir, sizeof(pUserConfigA->WFHomeDir), pUserConfigW->WFHomeDir );
UnicodeToAnsi( pUserConfigA->WFHomeDirDrive, sizeof(pUserConfigA->WFHomeDirDrive), pUserConfigW->WFHomeDirDrive );
}
/*******************************************************************************
* * UserConfigA2U (ANSI to UNICODE) * * copies USERCONFIGA elements to USERCONFIGW elements * * ENTRY: * pUserConfigW (output) * points to USERCONFIGW structure to copy to * * pUserConfigA (input) * points to USERCONFIGA structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID UserConfigA2U( PUSERCONFIGW pUserConfigW, PUSERCONFIGA pUserConfigA ) { pUserConfigW->fInheritAutoLogon = pUserConfigA->fInheritAutoLogon; pUserConfigW->fInheritResetBroken = pUserConfigA->fInheritResetBroken; pUserConfigW->fInheritReconnectSame = pUserConfigA->fInheritReconnectSame; pUserConfigW->fInheritInitialProgram = pUserConfigA->fInheritInitialProgram; pUserConfigW->fInheritCallback = pUserConfigA->fInheritCallback; pUserConfigW->fInheritCallbackNumber = pUserConfigA->fInheritCallbackNumber; pUserConfigW->fInheritShadow = pUserConfigA->fInheritShadow; pUserConfigW->fInheritMaxSessionTime = pUserConfigA->fInheritMaxSessionTime; pUserConfigW->fInheritMaxDisconnectionTime = pUserConfigA->fInheritMaxDisconnectionTime; pUserConfigW->fInheritMaxIdleTime = pUserConfigA->fInheritMaxIdleTime; pUserConfigW->fInheritAutoClient = pUserConfigA->fInheritAutoClient; pUserConfigW->fInheritSecurity = pUserConfigA->fInheritSecurity;
pUserConfigW->fPromptForPassword = pUserConfigA->fPromptForPassword; pUserConfigW->fResetBroken = pUserConfigA->fResetBroken; pUserConfigW->fReconnectSame = pUserConfigA->fReconnectSame; pUserConfigW->fLogonDisabled = pUserConfigA->fLogonDisabled; pUserConfigW->fWallPaperDisabled = pUserConfigA->fWallPaperDisabled; pUserConfigW->fAutoClientDrives = pUserConfigA->fAutoClientDrives; pUserConfigW->fAutoClientLpts = pUserConfigA->fAutoClientLpts; pUserConfigW->fForceClientLptDef = pUserConfigA->fForceClientLptDef; pUserConfigW->fDisableEncryption = pUserConfigA->fDisableEncryption; pUserConfigW->fHomeDirectoryMapRoot = pUserConfigA->fHomeDirectoryMapRoot; pUserConfigW->fUseDefaultGina = pUserConfigA->fUseDefaultGina; pUserConfigW->fCursorBlinkDisabled = pUserConfigA->fCursorBlinkDisabled;
pUserConfigW->fDisableCpm = pUserConfigA->fDisableCpm; pUserConfigW->fDisableCdm = pUserConfigA->fDisableCdm; pUserConfigW->fDisableCcm = pUserConfigA->fDisableCcm; pUserConfigW->fDisableLPT = pUserConfigA->fDisableLPT; pUserConfigW->fDisableClip = pUserConfigA->fDisableClip; pUserConfigW->fDisableExe = pUserConfigA->fDisableExe; pUserConfigW->fDisableCam = pUserConfigA->fDisableCam;
AnsiToUnicode( pUserConfigW->UserName, sizeof(pUserConfigW->UserName), pUserConfigA->UserName );
AnsiToUnicode( pUserConfigW->Domain, sizeof(pUserConfigW->Domain), pUserConfigA->Domain );
AnsiToUnicode( pUserConfigW->Password, sizeof(pUserConfigW->Password), pUserConfigA->Password );
AnsiToUnicode( pUserConfigW->WorkDirectory, sizeof(pUserConfigW->WorkDirectory), pUserConfigA->WorkDirectory );
AnsiToUnicode( pUserConfigW->InitialProgram, sizeof(pUserConfigW->InitialProgram), pUserConfigA->InitialProgram );
AnsiToUnicode( pUserConfigW->CallbackNumber, sizeof(pUserConfigW->CallbackNumber), pUserConfigA->CallbackNumber );
pUserConfigW->Callback = pUserConfigA->Callback; pUserConfigW->Shadow = pUserConfigA->Shadow; pUserConfigW->MaxConnectionTime = pUserConfigA->MaxConnectionTime; pUserConfigW->MaxDisconnectionTime = pUserConfigA->MaxDisconnectionTime; pUserConfigW->MaxIdleTime = pUserConfigA->MaxIdleTime; pUserConfigW->KeyboardLayout = pUserConfigA->KeyboardLayout; pUserConfigW->MinEncryptionLevel = pUserConfigA->MinEncryptionLevel;
AnsiToUnicode( pUserConfigW->WFProfilePath, sizeof(pUserConfigW->WFProfilePath), pUserConfigA->WFProfilePath );
AnsiToUnicode( pUserConfigW->WFHomeDir, sizeof(pUserConfigW->WFHomeDir), pUserConfigA->WFHomeDir );
AnsiToUnicode( pUserConfigW->WFHomeDirDrive, sizeof(pUserConfigW->WFHomeDirDrive), pUserConfigA->WFHomeDirDrive );
}
/*******************************************************************************
* * WinStationPrinterU2A (UNICODE to ANSI) * * copies WINSTATIONPRINTERW elements to WINSTATIONPRINTERA elements * * ENTRY: * pWinStationPrinterA (output) * points to WINSTATIONPRINTERA structure to copy to * * pWinStationPrinterW (input) * points to WINSTATIONPRINTERW structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID WinStationPrinterU2A( PWINSTATIONPRINTERA pWinStationPrinterA, PWINSTATIONPRINTERW pWinStationPrinterW ) { UnicodeToAnsi( pWinStationPrinterA->Lpt1, sizeof(pWinStationPrinterA->Lpt1), pWinStationPrinterW->Lpt1 );
UnicodeToAnsi( pWinStationPrinterA->Lpt2, sizeof(pWinStationPrinterA->Lpt2), pWinStationPrinterW->Lpt2 );
UnicodeToAnsi( pWinStationPrinterA->Lpt3, sizeof(pWinStationPrinterA->Lpt3), pWinStationPrinterW->Lpt3 );
UnicodeToAnsi( pWinStationPrinterA->Lpt4, sizeof(pWinStationPrinterA->Lpt4), pWinStationPrinterW->Lpt4 );
}
/*******************************************************************************
* * WinStationPrinterA2U (ANSI to UNICODE) * * copies WINSTATIONPRINTERA elements to WINSTATIONPRINTERW elements * * ENTRY: * pWinStationPrinterW (output) * points to WINSTATIONPRINTERW structure to copy to * * pWinStationPrinterA (input) * points to WINSTATIONPRINTERA structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID WinStationPrinterA2U( PWINSTATIONPRINTERW pWinStationPrinterW, PWINSTATIONPRINTERA pWinStationPrinterA ) { AnsiToUnicode( pWinStationPrinterW->Lpt1, sizeof(pWinStationPrinterW->Lpt1), pWinStationPrinterA->Lpt1 );
AnsiToUnicode( pWinStationPrinterW->Lpt2, sizeof(pWinStationPrinterW->Lpt2), pWinStationPrinterA->Lpt2 );
AnsiToUnicode( pWinStationPrinterW->Lpt3, sizeof(pWinStationPrinterW->Lpt3), pWinStationPrinterA->Lpt3 );
AnsiToUnicode( pWinStationPrinterW->Lpt4, sizeof(pWinStationPrinterW->Lpt4), pWinStationPrinterA->Lpt4 );
}
/*******************************************************************************
* * WinStationInformationU2A (UNICODE to ANSI) * * copies WINSTATIONINFORMATIONW elements to WINSTATIONINFORMATIONA elements * * ENTRY: * pWinStationInformationA (output) * points to WINSTATIONINFORMATIONA structure to copy to * * pWinStationInformationW (input) * points to WINSTATIONINFORMATIONW structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID WinStationInformationU2A( PWINSTATIONINFORMATIONA pWinStationInformationA, PWINSTATIONINFORMATIONW pWinStationInformationW ) { pWinStationInformationA->ConnectState = pWinStationInformationW->ConnectState;
UnicodeToAnsi( pWinStationInformationA->WinStationName, sizeof(pWinStationInformationA->WinStationName), pWinStationInformationW->WinStationName );
pWinStationInformationA->LogonId = pWinStationInformationW->LogonId;
pWinStationInformationA->ConnectTime = pWinStationInformationW->ConnectTime; pWinStationInformationA->DisconnectTime = pWinStationInformationW->DisconnectTime; pWinStationInformationA->LastInputTime = pWinStationInformationW->LastInputTime; pWinStationInformationA->LogonTime = pWinStationInformationW->LogonTime;
pWinStationInformationA->Status = pWinStationInformationW->Status;
UnicodeToAnsi( pWinStationInformationA->Domain, sizeof(pWinStationInformationA->Domain), pWinStationInformationW->Domain );
UnicodeToAnsi( pWinStationInformationA->UserName, sizeof(pWinStationInformationA->UserName), pWinStationInformationW->UserName ); }
/*******************************************************************************
* * WinStationInformationA2U (ANSI to UNICODE) * * copies WINSTATIONINFORMATIONA elements to WINSTATIONINFORMATIONW elements * * ENTRY: * pWinStationInformationW (output) * points to WINSTATIONINFORMATIONW structure to copy to * * pWinStationInformationA (input) * points to WINSTATIONINFORMATIONA structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID WinStationInformationA2U( PWINSTATIONINFORMATIONW pWinStationInformationW, PWINSTATIONINFORMATIONA pWinStationInformationA ) { pWinStationInformationW->ConnectState = pWinStationInformationA->ConnectState;
AnsiToUnicode( pWinStationInformationW->WinStationName, sizeof(pWinStationInformationW->WinStationName), pWinStationInformationA->WinStationName );
pWinStationInformationW->LogonId = pWinStationInformationA->LogonId;
pWinStationInformationW->ConnectTime = pWinStationInformationA->ConnectTime; pWinStationInformationW->DisconnectTime = pWinStationInformationA->DisconnectTime; pWinStationInformationW->LastInputTime = pWinStationInformationA->LastInputTime; pWinStationInformationW->LogonTime = pWinStationInformationA->LogonTime;
pWinStationInformationW->Status = pWinStationInformationA->Status;
AnsiToUnicode( pWinStationInformationW->Domain, sizeof(pWinStationInformationW->Domain), pWinStationInformationA->Domain );
AnsiToUnicode( pWinStationInformationW->UserName, sizeof(pWinStationInformationW->UserName), pWinStationInformationA->UserName ); }
/*******************************************************************************
* * WinStationClientU2A (UNICODE to ANSI) * * copies WINSTATIONCLIENTW elements to WINSTATIONCLIENTA elements * * ENTRY: * pWinStationClientA (output) * points to WINSTATIONCLIENTA structure to copy to * * pWinStationClientW (input) * points to WINSTATIONCLIENTW structure to copy from * * EXIT: * nothing (VOID) * ******************************************************************************/
VOID WinStationClientU2A( PWINSTATIONCLIENTA pWinStationClientA, PWINSTATIONCLIENTW pWinStationClientW ) { pWinStationClientA->fTextOnly = pWinStationClientW->fTextOnly; pWinStationClientA->fDisableCtrlAltDel = pWinStationClientW->fDisableCtrlAltDel;
UnicodeToAnsi( pWinStationClientA->ClientName, sizeof(pWinStationClientA->ClientName), pWinStationClientW->ClientName );
UnicodeToAnsi( pWinStationClientA->Domain, sizeof(pWinStationClientA->Domain), pWinStationClientW->Domain );
UnicodeToAnsi( pWinStationClientA->UserName, sizeof(pWinStationClientA->UserName), pWinStationClientW->UserName );
UnicodeToAnsi( pWinStationClientA->Password, sizeof(pWinStationClientA->Password), pWinStationClientW->Password );
UnicodeToAnsi( pWinStationClientA->WorkDirectory, sizeof(pWinStationClientA->WorkDirectory), pWinStationClientW->WorkDirectory );
UnicodeToAnsi( pWinStationClientA->InitialProgram, sizeof(pWinStationClientA->InitialProgram), pWinStationClientW->InitialProgram );
UnicodeToAnsi( pWinStationClientA->clientDigProductId, sizeof( pWinStationClientA->clientDigProductId), pWinStationClientW->clientDigProductId );
pWinStationClientA->SerialNumber = pWinStationClientW->SerialNumber;
pWinStationClientA->EncryptionLevel = pWinStationClientW->EncryptionLevel;
UnicodeToAnsi( pWinStationClientA->ClientAddress, sizeof(pWinStationClientA->ClientAddress), pWinStationClientW->ClientAddress);
pWinStationClientA->HRes = pWinStationClientW->HRes;
pWinStationClientA->VRes = pWinStationClientW->VRes;
pWinStationClientA->ColorDepth = pWinStationClientW->ColorDepth;
pWinStationClientA->ProtocolType = pWinStationClientW->ProtocolType;
pWinStationClientA->KeyboardLayout = pWinStationClientW->KeyboardLayout;
UnicodeToAnsi( pWinStationClientA->ClientDirectory, sizeof(pWinStationClientA->ClientDirectory), pWinStationClientW->ClientDirectory);
UnicodeToAnsi( pWinStationClientA->ClientLicense, sizeof(pWinStationClientA->ClientLicense), pWinStationClientW->ClientLicense);
UnicodeToAnsi( pWinStationClientA->ClientModem, sizeof(pWinStationClientA->ClientModem), pWinStationClientW->ClientModem);
pWinStationClientA->ClientBuildNumber = pWinStationClientW->ClientBuildNumber;
pWinStationClientA->ClientHardwareId = pWinStationClientW->ClientHardwareId;
pWinStationClientA->ClientProductId = pWinStationClientW->ClientProductId;
pWinStationClientA->OutBufCountHost = pWinStationClientW->OutBufCountHost;
pWinStationClientA->OutBufCountClient = pWinStationClientW->OutBufCountClient;
pWinStationClientA->OutBufLength = pWinStationClientW->OutBufLength; }
VOID WinStationProductIdU2A( PWINSTATIONPRODIDA pWinStationProdIdA, PWINSTATIONPRODIDW pWinStationProdIdW) { UnicodeToAnsi( pWinStationProdIdA->DigProductId, sizeof(pWinStationProdIdA->DigProductId), pWinStationProdIdW->DigProductId); UnicodeToAnsi( pWinStationProdIdA->ClientDigProductId, sizeof(pWinStationProdIdA->ClientDigProductId), pWinStationProdIdW->ClientDigProductId); UnicodeToAnsi( pWinStationProdIdA->OuterMostDigProductId, sizeof(pWinStationProdIdA->OuterMostDigProductId), pWinStationProdIdW->OuterMostDigProductId); pWinStationProdIdA->curentSessionId = pWinStationProdIdW->curentSessionId; pWinStationProdIdA->ClientSessionId = pWinStationProdIdW->ClientSessionId; pWinStationProdIdA->OuterMostSessionId = pWinStationProdIdW->OuterMostSessionId; }
|