mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
599 lines
13 KiB
599 lines
13 KiB
//*************************************************************
|
|
//
|
|
// 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;
|
|
|
|
|
|
//
|
|
// Thunk ProfileInfoA to 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 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
|
|
|
|
|
|
//*************************************************************
|
|
|
|
#ifdef UNICODE
|
|
|
|
//
|
|
// ANSI entry point when this module is compiled Unicode.
|
|
//
|
|
|
|
BOOL WINAPI AddItemA(LPCSTR lpGroupName, BOOL bCommonGroup,
|
|
LPCSTR lpDescription, LPCSTR lpCommandLine,
|
|
LPCSTR lpIconPath, int iIconIndex,
|
|
LPCSTR lpWorkingDirectory, WORD wHotKey,
|
|
int iShowCmd)
|
|
|
|
{
|
|
LPWSTR lpGroupNameW, lpDescriptionW, lpCommandLineW;
|
|
LPWSTR lpIconPathW, lpWorkingDirectoryW;
|
|
BOOL bResult;
|
|
|
|
//
|
|
// Convert the ANSI strings to Unicode and call
|
|
// the real function.
|
|
//
|
|
|
|
lpGroupNameW = ProduceWFromA(lpGroupName);
|
|
|
|
if (!(lpDescriptionW = ProduceWFromA(lpDescription))) {
|
|
return FALSE;
|
|
}
|
|
|
|
if (!(lpCommandLineW = ProduceWFromA(lpCommandLine))) {
|
|
return FALSE;
|
|
}
|
|
|
|
lpIconPathW = ProduceWFromA(lpIconPath);
|
|
|
|
lpWorkingDirectoryW = ProduceWFromA(lpWorkingDirectory);
|
|
|
|
|
|
bResult = AddItemW(lpGroupNameW, bCommonGroup, lpDescriptionW,
|
|
lpCommandLineW, lpIconPathW, iIconIndex,
|
|
lpWorkingDirectoryW, wHotKey, iShowCmd);
|
|
|
|
|
|
FreeProducedString(lpGroupNameW);
|
|
FreeProducedString(lpDescriptionW);
|
|
FreeProducedString(lpCommandLineW);
|
|
FreeProducedString(lpIconPathW);
|
|
FreeProducedString(lpWorkingDirectoryW);
|
|
|
|
return bResult;
|
|
}
|
|
|
|
#else
|
|
|
|
//
|
|
// Unicode entry point when this module is compiled ANSI.
|
|
//
|
|
|
|
BOOL WINAPI AddItemW(LPCWSTR lpGroupName, BOOL bCommonGroup,
|
|
LPCWSTR lpDescription, LPCWSTR lpCommandLine,
|
|
LPCWSTR lpIconPath, int iIconIndex,
|
|
LPCWSTR lpWorkingDirectory, WORD wHotKey,
|
|
int iShowCmd)
|
|
|
|
{
|
|
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
return FALSE;
|
|
}
|
|
|
|
#endif // UNICODE
|
|
|
|
//*************************************************************
|
|
|
|
#ifdef UNICODE
|
|
|
|
//
|
|
// ANSI entry point when this module is compiled Unicode.
|
|
//
|
|
|
|
BOOL WINAPI DeleteItemA(LPCSTR lpGroupName, BOOL bCommonGroup,
|
|
LPCSTR lpDescription, BOOL bDeleteGroup)
|
|
{
|
|
LPWSTR lpGroupNameW, lpDescriptionW;
|
|
BOOL bResult;
|
|
|
|
//
|
|
// Convert the ANSI strings to Unicode and call
|
|
// the real function.
|
|
//
|
|
|
|
lpGroupNameW = ProduceWFromA(lpGroupName);
|
|
|
|
if (!(lpDescriptionW = ProduceWFromA(lpDescription))) {
|
|
return FALSE;
|
|
}
|
|
|
|
bResult = DeleteItemW(lpGroupNameW, bCommonGroup, lpDescriptionW, bDeleteGroup);
|
|
|
|
|
|
FreeProducedString(lpGroupNameW);
|
|
FreeProducedString(lpDescriptionW);
|
|
|
|
return bResult;
|
|
}
|
|
|
|
#else
|
|
|
|
//
|
|
// Unicode entry point when this module is compiled ANSI.
|
|
//
|
|
|
|
BOOL WINAPI DeleteItemW(LPCWSTR lpGroupName, BOOL bCommonGroup,
|
|
LPCWSTR lpDescription, BOOL bDeleteGroup)
|
|
{
|
|
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)
|
|
{
|
|
LPWSTR lpUserNameW;
|
|
BOOL bResult;
|
|
|
|
//
|
|
// Convert the ANSI string to Unicode and call
|
|
// the real function.
|
|
//
|
|
|
|
if (!(lpUserNameW = ProduceWFromA(lpUserNameA))) {
|
|
return FALSE;
|
|
}
|
|
|
|
bResult = CreateUserProfileW(pSid, lpUserNameW);
|
|
|
|
|
|
FreeProducedString(lpUserNameW);
|
|
|
|
return bResult;
|
|
}
|
|
|
|
#else
|
|
|
|
//
|
|
// Unicode entry point when this module is compiled ANSI.
|
|
//
|
|
|
|
BOOL WINAPI CreateUserProfileW (PSID pSid, LPCWSTR lpUserName)
|
|
{
|
|
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
return FALSE;
|
|
}
|
|
|
|
#endif // UNICODE
|
|
|
|
|
|
|
|
//*************************************************************
|
|
|
|
#ifdef UNICODE
|
|
|
|
//
|
|
// ANSI entry point when this module is compiled Unicode.
|
|
//
|
|
|
|
BOOL WINAPI CopyProfileDirectoryA (LPCSTR lpSrcDirA, LPCSTR lpDstDirA, DWORD dwFlags)
|
|
{
|
|
LPWSTR lpSrcDirW, lpDstDirW;
|
|
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;
|
|
}
|
|
|
|
bResult = CopyProfileDirectoryW(lpSrcDirW, lpDstDirW, dwFlags);
|
|
|
|
|
|
FreeProducedString(lpSrcDirW);
|
|
FreeProducedString(lpDstDirW);
|
|
|
|
return bResult;
|
|
}
|
|
|
|
#else
|
|
|
|
//
|
|
// Unicode entry point when this module is compiled ANSI.
|
|
//
|
|
|
|
BOOL WINAPI CopyProfileDirectoryW(LPCWSTR lpSrcDirW, LPCWSTR lpDstDirW, DWORD dwFlags)
|
|
{
|
|
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;
|
|
|
|
//
|
|
// Allocate a buffer to match the ANSI buffer
|
|
//
|
|
|
|
if (!(lpProfilesDirW = GlobalAlloc(GPTR, (*lpcchSize) * sizeof(TCHAR)))) {
|
|
return FALSE;
|
|
}
|
|
|
|
bResult = GetProfilesDirectoryW(lpProfilesDirW, lpcchSize);
|
|
|
|
|
|
if (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 GetUserProfileDirectoryA (HANDLE hToken, LPSTR lpProfileDirA, LPDWORD lpcchSize)
|
|
{
|
|
LPWSTR lpProfileDirW;
|
|
BOOL bResult;
|
|
|
|
//
|
|
// Allocate a buffer to match the ANSI buffer
|
|
//
|
|
|
|
if (!(lpProfileDirW = GlobalAlloc(GPTR, (*lpcchSize) * sizeof(TCHAR)))) {
|
|
return FALSE;
|
|
}
|
|
|
|
bResult = GetUserProfileDirectoryW(hToken, lpProfileDirW, lpcchSize);
|
|
|
|
|
|
if (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 AddDesktopItemA(BOOL bCommonItem,
|
|
LPCSTR lpDescription, LPCSTR lpCommandLine,
|
|
LPCSTR lpIconPath, int iIconIndex,
|
|
LPCSTR lpWorkingDirectory, WORD wHotKey,
|
|
int iShowCmd)
|
|
|
|
{
|
|
LPWSTR lpDescriptionW, lpCommandLineW;
|
|
LPWSTR lpIconPathW, lpWorkingDirectoryW;
|
|
BOOL bResult;
|
|
|
|
//
|
|
// Convert the ANSI strings to Unicode and call
|
|
// the real function.
|
|
//
|
|
|
|
if (!(lpDescriptionW = ProduceWFromA(lpDescription))) {
|
|
return FALSE;
|
|
}
|
|
|
|
if (!(lpCommandLineW = ProduceWFromA(lpCommandLine))) {
|
|
return FALSE;
|
|
}
|
|
|
|
lpIconPathW = ProduceWFromA(lpIconPath);
|
|
|
|
lpWorkingDirectoryW = ProduceWFromA(lpWorkingDirectory);
|
|
|
|
|
|
bResult = AddDesktopItemW(bCommonItem, lpDescriptionW,
|
|
lpCommandLineW, lpIconPathW, iIconIndex,
|
|
lpWorkingDirectoryW, wHotKey, iShowCmd);
|
|
|
|
|
|
FreeProducedString(lpDescriptionW);
|
|
FreeProducedString(lpCommandLineW);
|
|
FreeProducedString(lpIconPathW);
|
|
FreeProducedString(lpWorkingDirectoryW);
|
|
|
|
return bResult;
|
|
}
|
|
|
|
#else
|
|
|
|
//
|
|
// Unicode entry point when this module is compiled ANSI.
|
|
//
|
|
|
|
BOOL WINAPI AddDesktopItemW(BOOL bCommonGroup,
|
|
LPCWSTR lpDescription, LPCWSTR lpCommandLine,
|
|
LPCWSTR lpIconPath, int iIconIndex,
|
|
LPCWSTR lpWorkingDirectory, WORD wHotKey,
|
|
int iShowCmd)
|
|
|
|
{
|
|
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
return FALSE;
|
|
}
|
|
|
|
#endif // UNICODE
|
|
|
|
//*************************************************************
|
|
|
|
#ifdef UNICODE
|
|
|
|
//
|
|
// ANSI entry point when this module is compiled Unicode.
|
|
//
|
|
|
|
BOOL WINAPI DeleteDesktopItemA(BOOL bCommonItem, LPCSTR lpDescription)
|
|
{
|
|
LPWSTR lpDescriptionW;
|
|
BOOL bResult;
|
|
|
|
//
|
|
// Convert the ANSI strings to Unicode and call
|
|
// the real function.
|
|
//
|
|
|
|
if (!(lpDescriptionW = ProduceWFromA(lpDescription))) {
|
|
return FALSE;
|
|
}
|
|
|
|
bResult = DeleteDesktopItemW(bCommonItem, lpDescriptionW);
|
|
|
|
|
|
FreeProducedString(lpDescriptionW);
|
|
|
|
return bResult;
|
|
}
|
|
|
|
#else
|
|
|
|
//
|
|
// Unicode entry point when this module is compiled ANSI.
|
|
//
|
|
|
|
BOOL WINAPI DeleteDesktopItemW(BOOL bCommonItem, LPCWSTR lpDescription)
|
|
{
|
|
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
return FALSE;
|
|
}
|
|
|
|
#endif // UNICODE
|