|
|
//*************************************************************
//
// Contains the A/W api stubs
//
// Microsoft Confidential
// Copyright (c) Microsoft Corporation 1995
// All rights reserved
//
//*************************************************************
#include "uenv.h"
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
BOOL WINAPI LoadUserProfileA (HANDLE hToken, LPPROFILEINFOA lpProfileInfoA) { PROFILEINFOW ProfileInfoW; BOOL bResult;
//
// Check Parameters
//
if (!lpProfileInfoA) { DebugMsg((DM_WARNING, TEXT("LoadUserProfileA: NULL lpProfileInfo"))); SetLastError(ERROR_INVALID_PARAMETER); return FALSE; }
if (lpProfileInfoA->dwSize != sizeof(PROFILEINFO)) { DebugMsg((DM_WARNING, TEXT("LoadUserProfileA: lpProfileInfo->dwSize != sizeof(PROFILEINFO)"))); SetLastError(ERROR_INVALID_PARAMETER); return FALSE; }
//
// Thunk ProfileInfoA to ProfileInfoW
//
memset(&ProfileInfoW, 0, sizeof(PROFILEINFOW)); ProfileInfoW.dwSize = sizeof(PROFILEINFOW); ProfileInfoW.dwFlags = lpProfileInfoA->dwFlags; ProfileInfoW.lpUserName = ProduceWFromA (lpProfileInfoA->lpUserName); ProfileInfoW.lpProfilePath = ProduceWFromA (lpProfileInfoA->lpProfilePath); ProfileInfoW.lpDefaultPath = ProduceWFromA (lpProfileInfoA->lpDefaultPath); ProfileInfoW.lpServerName = ProduceWFromA (lpProfileInfoA->lpServerName); if (ProfileInfoW.dwFlags & PI_APPLYPOLICY) { ProfileInfoW.lpPolicyPath = ProduceWFromA (lpProfileInfoA->lpPolicyPath); }
//
// Now call the real LoadUserProfile function.
//
bResult = LoadUserProfileW (hToken, &ProfileInfoW);
//
// Free memory allocated above and save the return
// values.
//
FreeProducedString (ProfileInfoW.lpUserName); FreeProducedString (ProfileInfoW.lpProfilePath); FreeProducedString (ProfileInfoW.lpDefaultPath); FreeProducedString (ProfileInfoW.lpServerName); if (ProfileInfoW.dwFlags & PI_APPLYPOLICY) { FreeProducedString (ProfileInfoW.lpPolicyPath); }
lpProfileInfoA->hProfile = ProfileInfoW.hProfile;
return bResult; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
BOOL WINAPI LoadUserProfileW (HANDLE hToken, LPPROFILEINFOW lpProfileInfoW) { SetLastError (ERROR_CALL_NOT_IMPLEMENTED); return FALSE; }
#endif // UNICODE
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
BOOL WINAPI CreateGroupA (LPCSTR lpGroupName, BOOL bCommonGroup) { LPWSTR lpGroupNameW; BOOL bResult;
//
// Convert the ANSI string to Unicode and call
// the real function.
//
if (!(lpGroupNameW = ProduceWFromA (lpGroupName))) { return FALSE; }
bResult = CreateGroupW (lpGroupNameW, bCommonGroup);
FreeProducedString (lpGroupNameW);
return bResult; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
BOOL WINAPI CreateGroupW (LPCWSTR lpGroupName, BOOL bCommonGroup) { SetLastError (ERROR_CALL_NOT_IMPLEMENTED); return FALSE; }
#endif // UNICODE
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
BOOL WINAPI CreateGroupExA(LPCSTR lpGroupName, BOOL bCommonGroup, LPCSTR lpResourceModuleName, UINT iResourceID) { LPWSTR lpGroupNameW; LPWSTR lpResourceModuleNameW; BOOL bResult;
//
// Convert the ANSI string to Unicode and call
// the real function.
//
if (!(lpGroupNameW = ProduceWFromA (lpGroupName))) { return FALSE; } if (!(lpResourceModuleNameW = ProduceWFromA (lpResourceModuleName))) { return FALSE; }
bResult = CreateGroupExW (lpGroupNameW, bCommonGroup, lpResourceModuleNameW, iResourceID);
FreeProducedString (lpGroupNameW); FreeProducedString (lpResourceModuleNameW);
return bResult; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
BOOL WINAPI CreateGroupExW(LPCWSTR lpGroupName, BOOL bCommonGroup, LPCWSTR lpResourceModuleName, UINT iResourceID) { SetLastError (ERROR_CALL_NOT_IMPLEMENTED); return FALSE; }
#endif // UNICODE
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
BOOL WINAPI DeleteGroupA (LPCSTR lpGroupName, BOOL bCommonGroup) { LPWSTR lpGroupNameW; BOOL bResult;
//
// Convert the ANSI string to Unicode and call
// the real function.
//
if (!(lpGroupNameW = ProduceWFromA (lpGroupName))) { return FALSE; }
bResult = DeleteGroupW (lpGroupNameW, bCommonGroup);
FreeProducedString (lpGroupNameW);
return bResult; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
BOOL WINAPI DeleteGroupW (LPCWSTR lpGroupName, BOOL bCommonGroup) { SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; }
#endif // UNICODE
//*************************************************************
BOOL WINAPI AddItemA (LPCSTR lpGroupName, BOOL bCommonGroup, LPCSTR lpFileName, LPCSTR lpCommandLine, LPCSTR lpIconPath, INT iIconIndex, LPCSTR lpWorkingDirectory, WORD wHotKey, INT iShowCmd) {
return CreateLinkFileA (bCommonGroup ? CSIDL_COMMON_PROGRAMS : CSIDL_PROGRAMS, lpGroupName, lpFileName, lpCommandLine, lpIconPath, iIconIndex, lpWorkingDirectory, wHotKey, iShowCmd, NULL); }
BOOL WINAPI AddItemW (LPCWSTR lpGroupName, BOOL bCommonGroup, LPCWSTR lpFileName, LPCWSTR lpCommandLine, LPCWSTR lpIconPath, int iIconIndex, LPCWSTR lpWorkingDirectory, WORD wHotKey, int iShowCmd) {
return CreateLinkFileW (bCommonGroup ? CSIDL_COMMON_PROGRAMS : CSIDL_PROGRAMS, lpGroupName, lpFileName, lpCommandLine, lpIconPath, iIconIndex, lpWorkingDirectory, wHotKey, iShowCmd, NULL); }
//*************************************************************
BOOL WINAPI DeleteItemA (LPCSTR lpGroupName, BOOL bCommonGroup, LPCSTR lpFileName, BOOL bDeleteGroup) {
return DeleteLinkFileA (bCommonGroup ? CSIDL_COMMON_PROGRAMS : CSIDL_PROGRAMS, lpGroupName, lpFileName, bDeleteGroup); }
BOOL WINAPI DeleteItemW (LPCWSTR lpGroupName, BOOL bCommonGroup, LPCWSTR lpFileName, BOOL bDeleteGroup) { return DeleteLinkFileW (bCommonGroup ? CSIDL_COMMON_PROGRAMS : CSIDL_PROGRAMS, lpGroupName, lpFileName, bDeleteGroup); }
//*************************************************************
BOOL WINAPI AddDesktopItemA (BOOL bCommonItem, LPCSTR lpFileName, LPCSTR lpCommandLine, LPCSTR lpIconPath, INT iIconIndex, LPCSTR lpWorkingDirectory, WORD wHotKey, INT iShowCmd)
{
return CreateLinkFileA (bCommonItem ? CSIDL_COMMON_DESKTOPDIRECTORY : CSIDL_DESKTOPDIRECTORY, NULL, lpFileName, lpCommandLine, lpIconPath, iIconIndex, lpWorkingDirectory, wHotKey, iShowCmd, NULL); }
BOOL WINAPI AddDesktopItemW (BOOL bCommonItem, LPCWSTR lpFileName, LPCWSTR lpCommandLine, LPCWSTR lpIconPath, int iIconIndex, LPCWSTR lpWorkingDirectory, WORD wHotKey, int iShowCmd)
{
return CreateLinkFileW (bCommonItem ? CSIDL_COMMON_DESKTOPDIRECTORY : CSIDL_DESKTOPDIRECTORY, NULL, lpFileName, lpCommandLine, lpIconPath, iIconIndex, lpWorkingDirectory, wHotKey, iShowCmd, NULL); }
//*************************************************************
BOOL WINAPI DeleteDesktopItemA (BOOL bCommonItem, LPCSTR lpFileName) { return DeleteLinkFileA (bCommonItem ? CSIDL_COMMON_DESKTOPDIRECTORY : CSIDL_DESKTOPDIRECTORY, NULL, lpFileName, FALSE); }
BOOL WINAPI DeleteDesktopItemW (BOOL bCommonItem, LPCWSTR lpFileName) { return DeleteLinkFileW (bCommonItem ? CSIDL_COMMON_DESKTOPDIRECTORY : CSIDL_DESKTOPDIRECTORY, NULL, lpFileName, FALSE); }
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
BOOL WINAPI CreateLinkFileA (INT csidl, LPCSTR lpSubDirectory, LPCSTR lpFileName, LPCSTR lpCommandLine, LPCSTR lpIconPath, INT iIconIndex, LPCSTR lpWorkingDirectory, WORD wHotKey, INT iShowCmd, LPCSTR lpDescription) { LPWSTR lpSubDirectoryW, lpFileNameW, lpCommandLineW; LPWSTR lpIconPathW, lpWorkingDirectoryW, lpDescriptionW; BOOL bResult;
//
// Convert the ANSI strings to Unicode and call
// the real function.
//
lpSubDirectoryW = ProduceWFromA(lpSubDirectory);
if (!(lpFileNameW = ProduceWFromA(lpFileName))) { FreeProducedString(lpSubDirectoryW); return FALSE; }
if (!(lpCommandLineW = ProduceWFromA(lpCommandLine))) { FreeProducedString(lpSubDirectoryW); FreeProducedString(lpFileNameW); return FALSE; }
lpIconPathW = ProduceWFromA(lpIconPath);
lpWorkingDirectoryW = ProduceWFromA(lpWorkingDirectory);
lpDescriptionW = ProduceWFromA(lpDescription);
bResult = CreateLinkFileW(csidl, lpSubDirectoryW, lpFileNameW, lpCommandLineW, lpIconPathW, iIconIndex, lpWorkingDirectoryW, wHotKey, iShowCmd, lpDescriptionW);
FreeProducedString(lpSubDirectoryW); FreeProducedString(lpFileNameW); FreeProducedString(lpCommandLineW); FreeProducedString(lpIconPathW); FreeProducedString(lpWorkingDirectoryW); FreeProducedString(lpDescriptionW);
return bResult; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
BOOL WINAPI CreateLinkFileW (INT csidl, LPCWSTR lpSubDirectory, LPCWSTR lpFileName, LPCWSTR lpCommandLine, LPCWSTR lpIconPath, INT iIconIndex, LPCWSTR lpWorkingDirectory, WORD wHotKey, INT iShowCmd, LPCWSTR lpDescription) { SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; }
#endif // UNICODE
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
BOOL WINAPI CreateLinkFileExA (INT csidl, LPCSTR lpSubDirectory, LPCSTR lpFileName, LPCSTR lpCommandLine, LPCSTR lpIconPath, INT iIconIndex, LPCSTR lpWorkingDirectory, WORD wHotKey, INT iShowCmd, LPCSTR lpDescription, LPCSTR lpResourceModuleName, UINT iResourceID) { LPWSTR lpSubDirectoryW, lpFileNameW, lpCommandLineW; LPWSTR lpIconPathW, lpWorkingDirectoryW, lpDescriptionW; LPWSTR lpResourceModuleNameW; BOOL bResult;
//
// Convert the ANSI strings to Unicode and call
// the real function.
//
lpSubDirectoryW = ProduceWFromA(lpSubDirectory);
if (!(lpFileNameW = ProduceWFromA(lpFileName))) { FreeProducedString(lpSubDirectoryW); return FALSE; }
if (!(lpCommandLineW = ProduceWFromA(lpCommandLine))) { FreeProducedString(lpSubDirectoryW); FreeProducedString(lpFileNameW); return FALSE; }
lpIconPathW = ProduceWFromA(lpIconPath);
lpWorkingDirectoryW = ProduceWFromA(lpWorkingDirectory);
lpDescriptionW = ProduceWFromA(lpDescription);
lpResourceModuleNameW = ProduceWFromA(lpResourceModuleName);
bResult = CreateLinkFileExW(csidl, lpSubDirectoryW, lpFileNameW, lpCommandLineW, lpIconPathW, iIconIndex, lpWorkingDirectoryW, wHotKey, iShowCmd, lpDescriptionW, lpResourceModuleNameW, iResourceID);
FreeProducedString(lpResourceModuleNameW); FreeProducedString(lpSubDirectoryW); FreeProducedString(lpFileNameW); FreeProducedString(lpCommandLineW); FreeProducedString(lpIconPathW); FreeProducedString(lpWorkingDirectoryW); FreeProducedString(lpDescriptionW);
return bResult; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
BOOL WINAPI CreateLinkFileExW (INT csidl, LPCWSTR lpSubDirectory, LPCWSTR lpFileName, LPCWSTR lpCommandLine, LPCWSTR lpIconPath, INT iIconIndex, LPCWSTR lpWorkingDirectory, WORD wHotKey, INT iShowCmd, LPCWSTR lpDescription, LPCSTR lpResourceModuleName, UINT iResourceID) { SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; }
#endif // UNICODE
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
BOOL WINAPI DeleteLinkFileA (INT csidl, LPCSTR lpSubDirectory, LPCSTR lpFileName, BOOL bDeleteSubDirectory) { LPWSTR lpSubDirectoryW, lpFileNameW; BOOL bResult;
//
// Convert the ANSI strings to Unicode and call
// the real function.
//
lpSubDirectoryW = ProduceWFromA(lpSubDirectory);
if (!(lpFileNameW = ProduceWFromA(lpFileName))) { FreeProducedString(lpSubDirectoryW); return FALSE; }
bResult = DeleteLinkFileW(csidl, lpSubDirectoryW, lpFileNameW, bDeleteSubDirectory);
FreeProducedString(lpSubDirectoryW); FreeProducedString(lpFileNameW);
return bResult; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
BOOL WINAPI DeleteLinkFileW (INT csidl, LPCWSTR lpSubDirectory, LPCWSTR lpFileName, BOOL bDeleteSubDirectory) { SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; }
#endif // UNICODE
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
BOOL WINAPI CreateUserProfileA (PSID pSid, LPCSTR lpUserNameA, LPCSTR lpUserHiveA, LPSTR lpProfileDirA, DWORD dwDirSize) { LPWSTR lpUserNameW, lpUserHiveW, lpProfileDirW = NULL; BOOL bResult;
//
// Convert the ANSI string to Unicode and call
// the real function.
//
if (!(lpUserNameW = ProduceWFromA(lpUserNameA))) { return FALSE; }
if (lpProfileDirA) { lpProfileDirW = (LPWSTR) LocalAlloc (LPTR, dwDirSize * sizeof(WCHAR));
if (!lpProfileDirW) { FreeProducedString(lpUserNameW); return FALSE; } }
lpUserHiveW = ProduceWFromA(lpUserHiveA);
bResult = CreateUserProfileW(pSid, lpUserNameW, lpUserHiveW, lpProfileDirW, dwDirSize);
FreeProducedString(lpUserNameW); FreeProducedString(lpUserHiveW);
if (lpProfileDirW) {
if (bResult) {
WideCharToMultiByte(CP_ACP, 0, lpProfileDirW, -1, lpProfileDirA, dwDirSize, NULL, NULL); }
LocalFree (lpProfileDirW); }
return bResult; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
BOOL WINAPI CreateUserProfileW (PSID pSid, LPCWSTR lpUserNameW, LPCWSTR lpUserHiveW, LPWSTR lpProfileDirW, DWORD dwDirSize) { SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; }
#endif // UNICODE
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
BOOL WINAPI CreateUserProfileExA (PSID pSid, LPCSTR lpUserNameA, LPCSTR lpUserHiveA, LPSTR lpProfileDirA, DWORD dwDirSize, BOOL bWin9xUpg) { LPWSTR lpUserNameW, lpUserHiveW, lpProfileDirW = NULL; BOOL bResult;
//
// Convert the ANSI string to Unicode and call
// the real function.
//
if (!(lpUserNameW = ProduceWFromA(lpUserNameA))) { return FALSE; }
if (lpProfileDirA) { lpProfileDirW = (LPWSTR) LocalAlloc (LPTR, dwDirSize * sizeof(WCHAR));
if (!lpProfileDirW) { FreeProducedString(lpUserNameW); return FALSE; } }
lpUserHiveW = ProduceWFromA(lpUserHiveA);
bResult = CreateUserProfileExW(pSid, lpUserNameW, lpUserHiveW, lpProfileDirW, dwDirSize, bWin9xUpg);
FreeProducedString(lpUserNameW); FreeProducedString(lpUserHiveW);
if (lpProfileDirW) {
if (bResult) {
WideCharToMultiByte(CP_ACP, 0, lpProfileDirW, -1, lpProfileDirA, dwDirSize, NULL, NULL); }
LocalFree (lpProfileDirW); }
return bResult; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
BOOL WINAPI CreateUserProfileExW (PSID pSid, LPCWSTR lpUserNameW, LPCWSTR lpUserHiveW, LPSTR lpProfileDirW, DWORD dwDirSize, BOOL bWin9xUpg) { SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; }
#endif // UNICODE
//*************************************************************
//
// Stubs for CopyProfileDirectoryA/W
//
BOOL WINAPI CopyProfileDirectoryA (LPCSTR lpSrcDir, LPCSTR lpDstDir, DWORD dwFlags) { return CopyProfileDirectoryExA (lpSrcDir, lpDstDir, dwFlags, NULL, NULL); }
BOOL WINAPI CopyProfileDirectoryW (LPCWSTR lpSrcDir, LPCWSTR lpDstDir, DWORD dwFlags) { return CopyProfileDirectoryExW (lpSrcDir, lpDstDir, dwFlags, NULL, NULL); }
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
BOOL WINAPI CopyProfileDirectoryExA (LPCSTR lpSrcDirA, LPCSTR lpDstDirA, DWORD dwFlags, LPFILETIME ftDelRefTime, LPCSTR lpExclusionListA) { LPWSTR lpSrcDirW, lpDstDirW, lpExclusionListW = NULL; BOOL bResult;
//
// Convert the ANSI strings to Unicode and call
// the real function.
//
if (!(lpSrcDirW = ProduceWFromA(lpSrcDirA))) { return FALSE; }
if (!(lpDstDirW = ProduceWFromA(lpDstDirA))) { FreeProducedString(lpSrcDirW); return FALSE; }
if (dwFlags & CPD_USEEXCLUSIONLIST) { lpExclusionListW = ProduceWFromA(lpExclusionListA); }
bResult = CopyProfileDirectoryExW(lpSrcDirW, lpDstDirW, dwFlags, ftDelRefTime, lpExclusionListW);
FreeProducedString(lpSrcDirW); FreeProducedString(lpDstDirW); FreeProducedString(lpExclusionListW);
return bResult; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
BOOL WINAPI CopyProfileDirectoryExW (LPCWSTR lpSrcDirW, LPCWSTR lpDstDirW, DWORD dwFlags, LPFILETIME ftDelRefTime, LPCWSTR lpExclusionListW) { SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; }
#endif // UNICODE
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
BOOL WINAPI GetProfilesDirectoryA (LPSTR lpProfilesDirA, LPDWORD lpcchSize) { LPWSTR lpProfilesDirW; BOOL bResult; DWORD cchOrgSize, cchReq;
if (!lpProfilesDirA) { DebugMsg((DM_WARNING, TEXT("GetProfilesDirectoryA : lpProfilesDirA is null"))); SetLastError(ERROR_INVALID_PARAMETER); return FALSE; }
if (!lpcchSize) { DebugMsg((DM_WARNING, TEXT("GetProfilesDirectoryA : lpcchSize is null"))); SetLastError(ERROR_INVALID_PARAMETER); return FALSE; }
//
// Allocate a buffer to match the ANSI buffer
//
if (!(lpProfilesDirW = GlobalAlloc(GPTR, (*lpcchSize) * sizeof(TCHAR)))) { return FALSE; }
cchOrgSize = *lpcchSize; // Store the original size passed to the function
bResult = GetProfilesDirectoryW(lpProfilesDirW, lpcchSize);
if (bResult) { cchReq = WideCharToMultiByte(CP_ACP, 0, lpProfilesDirW, -1, lpProfilesDirA, 0, NULL, NULL); *lpcchSize = cchReq; if (cchReq > cchOrgSize) { bResult = FALSE; } else { bResult = WideCharToMultiByte(CP_ACP, 0, lpProfilesDirW, -1, lpProfilesDirA, *lpcchSize, NULL, NULL); } }
GlobalFree(lpProfilesDirW);
return bResult; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
BOOL WINAPI GetProfilesDirectoryW (LPWSTR lpProfilesDirW, LPDWORD lpcchSize) { SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; }
#endif // UNICODE
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
BOOL WINAPI GetDefaultUserProfileDirectoryA (LPSTR lpProfileDirA, LPDWORD lpcchSize) { LPWSTR lpProfileDirW; BOOL bResult; DWORD cchOrgSize, cchReq;
if (!lpProfileDirA) { DebugMsg((DM_WARNING, TEXT("GetDefaultUserProfileDirectoryA : lpProfileDirA is null"))); SetLastError(ERROR_INVALID_PARAMETER); return FALSE; }
if (!lpcchSize) { DebugMsg((DM_WARNING, TEXT("GetDefaultUserProfileDirectoryA : lpcchSize is null"))); SetLastError(ERROR_INVALID_PARAMETER); return FALSE; }
//
// Allocate a buffer to match the ANSI buffer
//
if (!(lpProfileDirW = GlobalAlloc(GPTR, (*lpcchSize) * sizeof(TCHAR)))) { return FALSE; }
cchOrgSize = *lpcchSize; // Store the original size passed to the function
bResult = GetDefaultUserProfileDirectoryW(lpProfileDirW, lpcchSize);
if (bResult) { cchReq = WideCharToMultiByte(CP_ACP, 0, lpProfileDirW, -1, lpProfileDirA, 0, NULL, NULL); *lpcchSize = cchReq; if (cchReq > cchOrgSize) { bResult = FALSE; } else { bResult = WideCharToMultiByte(CP_ACP, 0, lpProfileDirW, -1, lpProfileDirA, *lpcchSize, NULL, NULL); } }
GlobalFree(lpProfileDirW);
return bResult; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
BOOL WINAPI GetDefaultUserProfileDirectoryW (LPWSTR lpProfileDirW, LPDWORD lpcchSize) { SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; }
#endif // UNICODE
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
BOOL WINAPI GetAllUsersProfileDirectoryA (LPSTR lpProfileDirA, LPDWORD lpcchSize) { LPWSTR lpProfileDirW; BOOL bResult; DWORD cchOrgSize, cchReq;
if (!lpProfileDirA) { DebugMsg((DM_WARNING, TEXT("GetAllUsersProfileDirectoryA : lpProfileDirA is null"))); SetLastError(ERROR_INVALID_PARAMETER); return FALSE; }
if (!lpcchSize) { DebugMsg((DM_WARNING, TEXT("GetAllUsersProfileDirectoryA : lpcchSize is null"))); SetLastError(ERROR_INVALID_PARAMETER); return FALSE; }
//
// Allocate a buffer to match the ANSI buffer
//
if (!(lpProfileDirW = GlobalAlloc(GPTR, (*lpcchSize) * sizeof(TCHAR)))) { return FALSE; }
cchOrgSize = *lpcchSize; // Store the original size passed to the function
bResult = GetAllUsersProfileDirectoryW(lpProfileDirW, lpcchSize);
if (bResult) { cchReq = WideCharToMultiByte(CP_ACP, 0, lpProfileDirW, -1, lpProfileDirA, 0, NULL, NULL); *lpcchSize = cchReq; if (cchReq > cchOrgSize) { bResult = FALSE; } else { bResult = WideCharToMultiByte(CP_ACP, 0, lpProfileDirW, -1, lpProfileDirA, *lpcchSize, NULL, NULL); } }
GlobalFree(lpProfileDirW);
return bResult; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
BOOL WINAPI GetAllUsersProfileDirectoryW (LPWSTR lpProfileDirW, LPDWORD lpcchSize) { SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; }
#endif // UNICODE
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
BOOL WINAPI GetUserProfileDirectoryA (HANDLE hToken, LPSTR lpProfileDirA, LPDWORD lpcchSize) { LPWSTR lpProfileDirW; BOOL bResult; DWORD cchOrgSize, cchReq;
if (!lpProfileDirA) { DebugMsg((DM_WARNING, TEXT("GetUserProfileDirectoryA : lpProfileDirA is null"))); SetLastError(ERROR_INVALID_PARAMETER); return FALSE; }
if (!lpcchSize) { DebugMsg((DM_WARNING, TEXT("GetUserProfileDirectoryA : lpcchSize is null"))); SetLastError(ERROR_INVALID_PARAMETER); return FALSE; }
//
// Allocate a buffer to match the ANSI buffer
//
if (!(lpProfileDirW = GlobalAlloc(GPTR, (*lpcchSize) * sizeof(TCHAR)))) { return FALSE; }
cchOrgSize = *lpcchSize; // Store the original size passed to the function
bResult = GetUserProfileDirectoryW(hToken, lpProfileDirW, lpcchSize);
if (bResult) { cchReq = WideCharToMultiByte(CP_ACP, 0, lpProfileDirW, -1, lpProfileDirA, 0, NULL, NULL); *lpcchSize = cchReq; if (cchReq > cchOrgSize) { bResult = FALSE; } else { bResult = WideCharToMultiByte(CP_ACP, 0, lpProfileDirW, -1, lpProfileDirA, *lpcchSize, NULL, NULL); } }
GlobalFree(lpProfileDirW);
return bResult; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
BOOL WINAPI GetUserProfileDirectoryW (HANDLE hToken, LPWSTR lpProfileDirW, LPDWORD lpcchSize) { SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; }
#endif // UNICODE
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
BOOL WINAPI GetUserProfileDirFromSidA (PSID pSid, LPSTR lpProfileDirA, LPDWORD lpcchSize) { LPWSTR lpProfileDirW; BOOL bResult; DWORD cchOrgSize, cchReq;
if (!lpProfileDirA) { DebugMsg((DM_WARNING, TEXT("GetUserProfileDirFromSidA : lpProfileDirA is null"))); SetLastError(ERROR_INVALID_PARAMETER); return FALSE; }
if (!lpcchSize) { DebugMsg((DM_WARNING, TEXT("GetUserProfileDirFromSidA : lpcchSize is null"))); SetLastError(ERROR_INVALID_PARAMETER); return FALSE; }
//
// Allocate a buffer to match the ANSI buffer
//
if (!(lpProfileDirW = GlobalAlloc(GPTR, (*lpcchSize) * sizeof(TCHAR)))) { return FALSE; }
cchOrgSize = *lpcchSize; // Store the original size passed to the function
bResult = GetUserProfileDirFromSidW(pSid, lpProfileDirW, lpcchSize);
if (bResult) { cchReq = WideCharToMultiByte(CP_ACP, 0, lpProfileDirW, -1, lpProfileDirA, 0, NULL, NULL); *lpcchSize = cchReq; if (cchReq > cchOrgSize) { bResult = FALSE; } else { bResult = WideCharToMultiByte(CP_ACP, 0, lpProfileDirW, -1, lpProfileDirA, *lpcchSize, NULL, NULL); } }
GlobalFree(lpProfileDirW);
return bResult; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
BOOL WINAPI GetUserProfileDirFromSidW (PSID pSid, LPWSTR lpProfileDirW, LPDWORD lpcchSize) { SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; }
#endif // UNICODE
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
BOOL WINAPI ExpandEnvironmentStringsForUserA (HANDLE hToken, LPCSTR lpSrcA, LPSTR lpDestA, DWORD dwSize) { LPWSTR lpSrcW, lpDestW; BOOL bResult;
if (!lpDestA) { DebugMsg((DM_WARNING, TEXT("ExpandEnvironmentStringsForUserA : lpDestA is null"))); SetLastError(ERROR_INVALID_PARAMETER); return FALSE; }
//
// Convert the ANSI strings to Unicode and call
// the real function.
//
if (!(lpSrcW = ProduceWFromA(lpSrcA))) { DebugMsg((DM_WARNING, TEXT("ExpandEnvircallonmentStringsForUserA : lpSrcA is null"))); SetLastError(ERROR_INVALID_PARAMETER); return FALSE; }
//
// Allocate a buffer to match the ANSI buffer
//
if (!(lpDestW = GlobalAlloc(GPTR, dwSize * sizeof(TCHAR)))) { FreeProducedString(lpSrcW); return FALSE; }
bResult = ExpandEnvironmentStringsForUserW(hToken, lpSrcW, lpDestW, dwSize);
if (bResult) { bResult = WideCharToMultiByte(CP_ACP, 0, lpDestW, -1, lpDestA, dwSize, NULL, NULL); }
GlobalFree(lpDestW); FreeProducedString(lpSrcW);
return bResult; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
BOOL WINAPI ExpandEnvironmentStringsForUserW (HANDLE hToken, LPCWSTR lpSrcW, LPWSTR lpDestW, DWORD dwSize) { SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; }
#endif // UNICODE
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
BOOL WINAPI GetSystemTempDirectoryA (LPSTR lpDirA, LPDWORD lpcchSize) { LPWSTR lpDirW; BOOL bResult; DWORD cchOrgSize, cchReq;
if (!lpcchSize) { DebugMsg((DM_WARNING, TEXT("GetSystemTempDirectoryA : lpcchSize is null"))); SetLastError(ERROR_INVALID_PARAMETER); return FALSE; }
//
// Allocate a buffer to match the ANSI buffer
//
if (!(lpDirW = GlobalAlloc (GPTR, (*lpcchSize) * sizeof(TCHAR)))) { return FALSE; }
cchOrgSize = *lpcchSize; // Store the original size passed to the function
bResult = GetSystemTempDirectoryW (lpDirW, lpcchSize);
if (bResult) { cchReq = WideCharToMultiByte(CP_ACP, 0, lpDirW, -1, lpDirA, 0, NULL, NULL); *lpcchSize = cchReq; if (cchReq > cchOrgSize) { bResult = FALSE; } else { WideCharToMultiByte (CP_ACP, 0, lpDirW, -1, lpDirA, *lpcchSize, NULL, NULL); } }
GlobalFree (lpDirW);
return bResult; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
BOOL WINAPI GetSystemTempDirectoryW (LPWSTR lpDirW, LPDWORD lpcchSize) { SetLastError (ERROR_CALL_NOT_IMPLEMENTED); return FALSE; }
#endif // UNICODE
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
BOOL WINAPI ConvertGPOListWToA( PGROUP_POLICY_OBJECTW pGPOListW, PGROUP_POLICY_OBJECTA *pGPOListA ) { LPSTR lpDSPathA, lpFileSysPathA, lpDisplayNameA, lpExtensionsA, lpLinkA; DWORD dwSize; PGROUP_POLICY_OBJECTA pGPOTempA = NULL, pNew, pTemp; PGROUP_POLICY_OBJECTW pGPO = pGPOListW;
while (pGPO) {
//
// Build an ANSI structure for this entry
//
lpDSPathA = ProduceAFromW(pGPO->lpDSPath); lpFileSysPathA = ProduceAFromW(pGPO->lpFileSysPath); lpDisplayNameA = ProduceAFromW(pGPO->lpDisplayName); lpExtensionsA = ProduceAFromW( pGPO->lpExtensions ); lpLinkA = ProduceAFromW( pGPO->lpLink );
//
// Calculate the size of the new GPO item
//
dwSize = sizeof (GROUP_POLICY_OBJECTA);
if (lpDSPathA) { dwSize += (lstrlenA(lpDSPathA) + 1); }
if (lpFileSysPathA) { dwSize += (lstrlenA(lpFileSysPathA) + 1); }
if (lpDisplayNameA) { dwSize += (lstrlenA(lpDisplayNameA) + 1); }
if (lpExtensionsA) { dwSize += (lstrlenA(lpExtensionsA) + 1); }
if (lpLinkA) { dwSize += (lstrlenA(lpLinkA) + 1); }
//
// Allocate space for it
//
pNew = (PGROUP_POLICY_OBJECTA) LocalAlloc (LPTR, dwSize);
if (!pNew) { DebugMsg((DM_WARNING, TEXT("ConvertGPOListWToA: Failed to allocate memory with %d"), GetLastError())); FreeProducedString(lpDSPathA); FreeProducedString(lpFileSysPathA); FreeProducedString(lpDisplayNameA); FreeProducedString(lpExtensionsA); FreeProducedString(lpLinkA); FreeGPOListW (pGPOListW); return FALSE; }
//
// Fill in item
//
pNew->dwOptions = pGPO->dwOptions; pNew->dwVersion = pGPO->dwVersion;
if (lpDSPathA) { pNew->lpDSPath = (LPSTR)(((LPBYTE)pNew) + sizeof(GROUP_POLICY_OBJECTA)); lstrcpyA (pNew->lpDSPath, lpDSPathA); }
if (lpFileSysPathA) { if (lpDSPathA) { pNew->lpFileSysPath = pNew->lpDSPath + lstrlenA (pNew->lpDSPath) + 1; } else { pNew->lpFileSysPath = (LPSTR)(((LPBYTE)pNew) + sizeof(GROUP_POLICY_OBJECTA)); }
lstrcpyA (pNew->lpFileSysPath, lpFileSysPathA); }
if (lpDisplayNameA) { if (lpFileSysPathA) { pNew->lpDisplayName = pNew->lpFileSysPath + lstrlenA (pNew->lpFileSysPath) + 1; } else {
if (lpDSPathA) { pNew->lpDisplayName = pNew->lpDSPath + lstrlenA (pNew->lpDSPath) + 1; } else { pNew->lpDisplayName = (LPSTR)(((LPBYTE)pNew) + sizeof(GROUP_POLICY_OBJECTA)); } }
lstrcpyA (pNew->lpDisplayName, lpDisplayNameA); }
if (lpExtensionsA) { if (lpDisplayNameA) { pNew->lpExtensions = pNew->lpDisplayName + lstrlenA(pNew->lpDisplayName) + 1; } else {
if (lpFileSysPathA) { pNew->lpExtensions = pNew->lpFileSysPath + lstrlenA(pNew->lpFileSysPath) + 1; } else {
if (lpDSPathA) { pNew->lpExtensions = pNew->lpDSPath + lstrlenA(pNew->lpDSPath) + 1; } else { pNew->lpExtensions = (LPSTR)(((LPBYTE)pNew) + sizeof(GROUP_POLICY_OBJECTA)); }
} }
lstrcpyA( pNew->lpExtensions, lpExtensionsA ); }
if (lpLinkA) {
if (lpExtensionsA) { pNew->lpLink = pNew->lpExtensions + lstrlenA(pNew->lpExtensions) + 1; } else {
if (lpDisplayNameA) { pNew->lpLink = pNew->lpDisplayName + lstrlenA(pNew->lpDisplayName) + 1; } else {
if (lpFileSysPathA) { pNew->lpLink = pNew->lpFileSysPath + lstrlenA(pNew->lpFileSysPath) + 1; } else {
if (lpDSPathA) { pNew->lpLink = pNew->lpDSPath + lstrlenA(pNew->lpDSPath) + 1; } else { pNew->lpLink = (LPSTR)(((LPBYTE)pNew) + sizeof(GROUP_POLICY_OBJECTA)); } } } }
lstrcpyA( pNew->lpLink, lpLinkA ); }
WideCharToMultiByte(CP_ACP, 0, pGPO->szGPOName, -1, pNew->szGPOName, 50, NULL, NULL);
pNew->GPOLink = pGPO->GPOLink; pNew->lParam = pGPO->lParam;
//
// Add it to the ANSI link list
//
if (pGPOTempA) {
pTemp = pGPOTempA;
while (pTemp->pNext != NULL) { pTemp = pTemp->pNext; }
pTemp->pNext = pNew; pNew->pPrev = pTemp;
} else {
pGPOTempA = pNew; }
FreeProducedString(lpDSPathA); FreeProducedString(lpFileSysPathA); FreeProducedString(lpDisplayNameA); FreeProducedString(lpExtensionsA); FreeProducedString(lpLinkA);
pGPO = pGPO->pNext; }
*pGPOListA = pGPOTempA;
FreeGPOListW (pGPOListW);
return TRUE; }
BOOL WINAPI GetGPOListA (HANDLE hToken, LPCSTR lpNameA, LPCSTR lpHostNameA, LPCSTR lpComputerNameA, DWORD dwFlags, PGROUP_POLICY_OBJECTA *pGPOListA) { LPWSTR lpNameW, lpHostNameW, lpComputerNameW; PGROUP_POLICY_OBJECTW pGPOListW; BOOL bResult;
if (!pGPOListA) { DebugMsg((DM_WARNING, TEXT("GetGPOListA: pGPOList is null"))); SetLastError(ERROR_INVALID_PARAMETER); return FALSE; }
lpNameW = ProduceWFromA(lpNameA); lpHostNameW = ProduceWFromA(lpHostNameA); lpComputerNameW = ProduceWFromA(lpComputerNameA);
bResult = GetGPOListW (hToken, lpNameW, lpHostNameW, lpComputerNameW, dwFlags, &pGPOListW);
FreeProducedString(lpNameW); FreeProducedString(lpHostNameW); FreeProducedString(lpComputerNameW);
if (bResult) { bResult = ConvertGPOListWToA( pGPOListW, pGPOListA ); }
return bResult; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
BOOL WINAPI GetGPOListW (HANDLE hToken, LPCWSTR lpNameW, LPCWSTR lpHostNameW, LPCWSTR lpComputerNameW, DWORD dwFlags, PGROUP_POLICY_OBJECTW *pGPOListW) { SetLastError (ERROR_CALL_NOT_IMPLEMENTED); return FALSE; }
#endif // UNICODE
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
BOOL WINAPI FreeGPOListA (PGROUP_POLICY_OBJECTA pGPOListA) { PGROUP_POLICY_OBJECTA pGPOTemp;
while (pGPOListA) { pGPOTemp = pGPOListA->pNext; LocalFree (pGPOListA); pGPOListA = pGPOTemp; }
return TRUE; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
BOOL WINAPI FreeGPOListW (PGROUP_POLICY_OBJECTW pGPOListW) { SetLastError (ERROR_CALL_NOT_IMPLEMENTED); return FALSE; }
#endif // UNICODE
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
BOOL WINAPI ApplySystemPolicyA (DWORD dwFlags, HANDLE hToken, HKEY hKeyCurrentUser, LPCSTR lpUserNameA, LPCSTR lpPolicyPathA, LPCSTR lpServerNameA) { LPWSTR lpUserNameW, lpPolicyPathW, lpServerNameW; BOOL bResult;
//
// Convert the ANSI strings to Unicode and call
// the real function.
//
if (!(lpUserNameW = ProduceWFromA(lpUserNameA))) { return FALSE; }
lpPolicyPathW = ProduceWFromA(lpPolicyPathA); lpServerNameW = ProduceWFromA(lpServerNameA);
bResult = ApplySystemPolicyW(dwFlags, hToken, hKeyCurrentUser, lpUserNameW, lpPolicyPathW, lpServerNameW);
FreeProducedString(lpServerNameW); FreeProducedString(lpPolicyPathW); FreeProducedString(lpUserNameW);
return bResult; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
BOOL WINAPI ApplySystemPolicyW (DWORD dwFlags, HANDLE hToken, HKEY hKeyCurrentUser, LPCWSTR lpUserNameW, LPCWSTR lpPolicyPathW, LPCWSTR lpServerNameW) { SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; }
#endif // UNICODE
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
DWORD WINAPI GetAppliedGPOListA ( DWORD dwFlags, LPCSTR pMachineNameA, PSID pSidUser, GUID *pGuidExtension, PGROUP_POLICY_OBJECTA *pGPOListA) { PGROUP_POLICY_OBJECTW pGPOListW; DWORD dwRet; LPWSTR pMachineNameW;
if (!pGPOListA || !pGuidExtension) { DebugMsg((DM_WARNING, TEXT("GetAppliedGPOListA: pGPOList or pGuidExtension is null"))); return ERROR_INVALID_PARAMETER; }
pMachineNameW = ProduceWFromA(pMachineNameA);
dwRet = GetAppliedGPOListW ( dwFlags, pMachineNameW, pSidUser, pGuidExtension, &pGPOListW);
FreeProducedString(pMachineNameW);
if ( dwRet == ERROR_SUCCESS ) { BOOL bResult = ConvertGPOListWToA( pGPOListW, pGPOListA ); dwRet = bResult ? ERROR_SUCCESS : E_FAIL; }
return dwRet; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
DWORD WINAPI GetAppliedGPOListW ( DWORD dwFlags, GUID *pGuidExtension, PGROUP_POLICY_OBJECTW *pGPOListW) { return ERROR_CALL_NOT_IMPLEMENTED; }
#endif // UNICODE
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
BOOL WINAPI DeleteProfileA ( LPCSTR lpSidStringA, LPCSTR lpProfilePathA, LPCSTR lpComputerNameA) { LPWSTR pSidStringW; LPWSTR pProfilePathW; LPWSTR pComputerNameW; BOOL dwRet;
if (!lpSidStringA) { DebugMsg((DM_WARNING, TEXT("DeleteProfileA: lpSidString is null"))); SetLastError(ERROR_INVALID_PARAMETER); return FALSE; }
if (!(pSidStringW = ProduceWFromA(lpSidStringA))) { return FALSE; }
if (lpProfilePathA) { if (!(pProfilePathW = ProduceWFromA(lpProfilePathA))) { FreeProducedString(pSidStringW); return FALSE; } } else { pProfilePathW = NULL; }
if (lpComputerNameA) { if (!(pComputerNameW = ProduceWFromA(lpComputerNameA))) { FreeProducedString(pSidStringW); FreeProducedString(pProfilePathW); return FALSE; } } else { pComputerNameW = NULL; }
dwRet = DeleteProfileW ( pSidStringW, pProfilePathW, pComputerNameW);
FreeProducedString(pSidStringW);
if (pProfilePathW) FreeProducedString(pProfilePathW);
if (pComputerNameW) FreeProducedString(pComputerNameW);
return dwRet; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
BOOL WINAPI DeleteProfileW ( LPWSTR lpSidStringW, LPWSTR lpProfilePathW, HKEY hKeyLM) { return ERROR_CALL_NOT_IMPLEMENTED; }
#endif // UNICODE
//*************************************************************
#ifdef UNICODE
//
// ANSI entry point when this module is compiled Unicode.
//
DWORD WINAPI GetUserAppDataPathA (HANDLE hToken, LPSTR lpFolderPathA) { LPWSTR lpFolderPathW; BOOL bResult; DWORD dwError = ERROR_SUCCESS, cchReq;
if (!lpFolderPathA) { DebugMsg((DM_WARNING, TEXT("GetUserAppDataPathA : lpFolderPathA is null"))); SetLastError(ERROR_INVALID_PARAMETER); return ERROR_INVALID_PARAMETER; } else { *lpFolderPathA = TEXT('\0'); }
//
// Allocate a buffer to match the ANSI buffer
//
if (!(lpFolderPathW = GlobalAlloc(GPTR, (MAX_PATH) * sizeof(TCHAR)))) { SetLastError(ERROR_OUTOFMEMORY); return ERROR_OUTOFMEMORY; }
dwError = GetUserAppDataPathW(hToken, lpFolderPathW);
if (dwError == ERROR_SUCCESS) { cchReq = WideCharToMultiByte(CP_ACP, 0, lpFolderPathW, -1, lpFolderPathA, 0, NULL, NULL); if (cchReq > MAX_PATH) { dwError = ERROR_INSUFFICIENT_BUFFER; } else { bResult = WideCharToMultiByte(CP_ACP, 0, lpFolderPathW, -1, lpFolderPathA, MAX_PATH, NULL, NULL); } }
GlobalFree(lpFolderPathW);
SetLastError(dwError); return dwError; }
#else
//
// Unicode entry point when this module is compiled ANSI.
//
BOOL WINAPI GetUserAppDataPathW (HANDLE hToken, LPWSTR lpFolderPathW) { SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return ERROR_CALL_NOT_IMPLEMENTED; }
#endif // UNICODE
|